vagrant centos7.7 備忘録

# centos7.7　環境構築

## 使用するツール
:::note info
vagrant
virtualbox
:::

## 使用するbox
:::note info
bento/centos7.7
:::

## インストール準備
以下のコマンドを実行する。
実行後エラーが表示される場合があるのでkernelを最新版に更新する。

~~~linux:linux
vagrant init bento/centos-7.7
~~~~

### 起動準備
Vagrantfileのnetwork部分のコメントアウトを消す。

~~~vagrant:プロビジョニング
# config.vm.network "private_network", ip: "192.168.33.10"
↓
config.vm.network "private_network", ip: "192.168.33.10"
~~~

vagrantを起動する。

~~~vagrant:コマンド
vagrant up
~~~~

### エラー内容
:::note warn
vagrantの共有フォルダがマウントできないというエラーが出るがssh接続はできるので
ターミナルからkernelのアップデートを行う。
No package kernel-devel-3.10.0-1127.el7.x86_64 available.
Error: Nothing to do
:::

### kernelアップデート
~~~vagrant:コマンド
sudo yum -y update kernel
~~~

### アップデート後再度vagrant upする。（もしかしたらvagrant upだけでも良いかも）
~~~vagrant:コマンド
vagrant reload --provision
~~~

### ターミナルでの作業
ここからはrootユーザーで諸々のセットアップをしていく。まずユーザー変更
~~~Terminal:putty
sudo su -
~~~~

### まず日本語環境へ変更する。
localeコマンドで現在の状態を確認する。
usになっているはずなので↓を実行後、再起動してdateで確認をする。
~~~Terminal:putty
localectl set-locale LANG=ja_JP.UTF-8
~~~

### タイムゾーンの設定変更
確認後タイムゾーンを**Asia/Tokyoへ変更** 、変更後**date**で状態を確認する。
~~~Terminal:putty
timedatectl set-timezone Asia/Tokyo
~~~

### selinuxの状態確認＞停止まで
disabledになっていなければファイルを編集して停止する。
~~~Terminal:putty
getenforce
~~~

↓のファイルを編集する。
~~~Terminal:putty
vi /etc/selinux/config

SELINUX=enforcing　→　SELINUX=disabled
~~~

:::note inof
編集後に再起動して**getenforce**で状態確認**Disabled**が出ればOK
:::

### bash-completion パッケージの導入
systemctlをtabで補完できるようにパッケージをインストールする。

~~~Terminal:コマンド
yum -y install bash-completion
~~~

### インストール後パッケージの確認
~~~Terminal:コマンド
yum list installed | grep bash-completion
~~~

### firewalldサービスの無効化
**iptables**に入れ替える前に設定を確認して動いているようであれば止める。

~~~Terminal:
systemctl list-unit-files | grep firewall
~~~

**止める場合はこちら**
~~~Terminal:
systemctl disable firewalld.service
~~~

### 他初期インストールパッケージを最新にする。不要なsqlは削除
~~~Terminal:
yum list installed | grep mariadb-libs
yum -y remove mariadb-libs mysql*
yum -y update
yum -y install git vim wget epel-release dkms httpd zip unzip
~~~

### DKMSのインストール
VirtualBoxでLinuxを運用する際の推奨として、DKMS (Dynamic Kernel Module Support) のインストールしたらいいらしいので、インストール。
拡張リリースパッケージEPELをインストールし、そのリポジトリを使って導入。


**EPELがあるか確認**
~~~Terminal:コマンド
yum repolist all | grep -i epel
~~~

### できる限り標準のリポジトリからパッケージを使い、EPELを指定した時しか使用したくない方針とする場合
**viコマンドで、enabled=１をenapled=0に書き換え**
~~~Terminal:コマンド
vi /etc/yum.repos.d/epel.repo
enabled=1 →　enabled=0
~~~

### Remiリポジトリをインストール
~~~Terminal:コマンド
yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
~~~

:::note info
念の為設定ファイルも確認（enabled=0になっていればOK）
vi /etc/yum.repos.d/remi.repo
:::

## Apache

### 起動と自動起動と起動チェック
~~~Terminal:コマンド
systemctl start httpd.service
systemctl enable httpd.service
service httpd status
~~~

### Apacheの文法チェック
~~~Terminal:コマンド
apachectl configtest
~~~

## Apacheの設定調整

1. バックアップ
~~~Terminal:コマンド
cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bk
~~~

2. vimで編集（vimの方がわかりやすい）
~~~Terminal:コマンド
vim /etc/httpd/conf/httpd.conf
~~~

3. phpが使えるように以下2行を追加
~~~Terminal:コマンド
※AddTypeタイプで検索（検索は「/〇〇」）
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
~~~

4. cssが読み込めるようにする。
~~~Terminal:コマンド
AllowOverride None　→　AllowOverride All
~~~

5. バーチャルホストの設定
~~~Terminal:コマンド
EnableSendfile on　→　EnableSendfile off
~~~

7. 共有フォルダへのシンボリックリンク設定
初期のディレクトリを削除する。
~~~Terminal:コマンド
rm -rf /var/www/html
~~~

共有のvagrantへシンボリックリンクを貼る。
~~~Terminal:コマンド
ln -fs /vagrant /var/www/html
~~~
:::note warn
Laravelを作るときはnode.js使うときにエラーになるのでLaravel環境は別途構築する必要がある。
※Laravel環境はxamppを使った…
:::

8. バーチャルホストの設定

~~~Terminal:コマンド
sudo vim /etc/httpd/conf.d/virtualhost-00.conf
~~~

~~~Terminal:vim
<VirtualHost *:80>
  ServerName 192.168.33.10
  DocumentRoot /var/www/html/フォルダ名
</VirtualHost>
~~~

9. 個別の設定ファイルを持っておく。（各ディレクトリごとのDNSはバーチャルホストとhostファイルで管理）
~~~Terminal:コマンド
sudo vim /etc/httpd/conf.d/virtualhost-〇〇.conf
~~~

◆↓の設定を入れる※ServerNameに「_」（アンダースコア）は使用出来ないので注意
~~~Terminal:vim
   <VirtualHost *:80>
      ServerName hoge.com
      # !!! Be sure to point DocumentRoot to 'public'!
      DocumentRoot /var/www/html/hoge
      <Directory /var/www/html/hoge>
         # This relaxes Apache security settings.
         AllowOverride all
         # MultiViews must be turned off.
         Options Indexes ExecCGI FollowSymLinks MultiViews
         Order allow,deny
         Allow from all
         AllowOverride all
         # Uncomment this if you're on Apache >= 2.4:
         #Require all granted
      </Directory>
   </VirtualHost>
~~~

**各設定が完了してから**
~~~Terminal:コマンド
apachectl configtest
service httpd configtest
systemctl restart httpd.service
service httpd status
~~~

### mysql8のインストール
1. リポジトリを追加
~~~Terminal:コマンド
yumリポジトリをインストール
yum -y localinstall http://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
~~~

2. リポジトリの追加が終わったらインストール可能なバージョンを確認する。
~~~Terminal:コマンド
yum info mysql-community-server
~~~

:::note info
↓の結果出ればOK
:::

~~~Terminal:コマンド結果
------------------------------------------
利用可能なパッケージ
名前                : mysql-community-server
アーキテクチャー    : x86_64
バージョン          : 8.0.28
リリース            : 1.el7
容量                : 451 M
------------------------------------------
~~~

3. MySqlをインストール
~~~Terminal:コマンド
yum -y install mysql-community-server
~~~

4. 公開鍵がインストールされていません。と怒られてしまったら↓を実行して、もう一度インストールする「yum -y install mysql-community-server」
~~~Terminal:コマンド
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
~~~

5. バージョンの確認
~~~Terminal:コマンド
mysqld --version
~~~

成功すると↓が出る。
~~~Terminal:コマンド
/usr/sbin/mysqld  Ver 8.0.28 for Linux on x86_64 (MySQL Community Server - GPL)
~~~

6. 初期設定
設定をバックアップ
~~~Terminal:コマンド
cp /etc/my.cnf /etc/my.cnf.org
~~~

7. 認証プラグインの設定
**vim /etc/my.cnf**でcnfファイルを開いて以下を追加。
~~~Terminal:コマンド
default_authentication_plugin=mysql_native_password
~~~

8. MySQL起動
~~~Terminal:コマンド
systemctl start mysqld
~~~

9. 状態確認
~~~Terminal:コマンド
systemctl status mysqld
~~~
:::note info
以下のようになっていればOK
:::

~~~Terminal:コマンド
mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since 土 2022-04-02 09:09:46 JST; 30s ago
~~~

10.自動起動の設定
~~~Terminal:コマンド
systemctl enable mysqld
~~~

11.初回のパスワードについて
mysqlを初回に起動すると一時パスワードがlogに吐き出されので以下のコマンドを打って出てきたパスをメモとして残しておく。
~~~Terminal:コマンド
grep password /var/log/mysqld.log
~~~

12.パスワードの更新と初期設定
mysql_secure_installationで初期設定をする。先程吐き出されたlogから変更する。


13.ログインと状態確認をする。

:::note info
（ログイン）mysql -u root -p
（状態確認）status
:::

↓の結果が帰ってくればまぁ大丈夫。
--------------
~~~Terminal:コマンド
mysql  Ver 8.0.28 for Linux on x86_64 (MySQL Community Server - GPL)

Connection id:          11
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         8.0.28 MySQL Community Server - GPL
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:            /var/lib/mysql/mysql.sock
Binary data as:         Hexadecimal
Uptime:                 7 min 47 sec

Threads: 2  Questions: 16  Slow queries: 0  Opens: 133  Flush tables: 3  Open tables: 49  Queries per second avg: 0.034
~~~

文字コードの確認
~~~Terminal:コマンド
show variables like '%char%';
~~~

:::note info
↓の結果が帰ってくればまぁ大丈夫。
:::

~~~Terminal:コマンド
mysql> show variables like '%char%';
+--------------------------------------+--------------------------------+
| Variable_name                        | Value                          |
+--------------------------------------+--------------------------------+
| character_set_client                 | utf8mb4                        |
| character_set_connection             | utf8mb4                        |
| character_set_database               | utf8mb4                        |
| character_set_filesystem             | binary                         |
| character_set_results                | utf8mb4                        |
| character_set_server                 | utf8mb4                        |
| character_set_system                 | utf8mb3                        |
| character_sets_dir                   | /usr/share/mysql-8.0/charsets/ |
| validate_password.special_char_count | 1                              |
+--------------------------------------+--------------------------------+
9 rows in set (0.01 sec)
~~~~

万が一mysqlのパスワードを忘れてしまった場合
---
~~~Terminal:コマンド
ALTER USER 'root'@'localhost' IDENTIFIED BY 'SxB&+ExpZ-(5';
~~~

この後必要なnode.jpをインストールする。（参考ページ執筆時点の最新版とのこと）
---
1.リポジトリ追加

~~~Terminal:コマンド
curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -
~~~

2.インストール
~~~Terminal:コマンド
yum install -y nodejs
~~~

3.確認
~~~Terminal:コマンド
node -v
----------------
v16.14.2
----------------
~~~

~~~Terminal:コマンド
npm -v
----------------
8.5.0
----------------
~~~



phpのインストール
---

1.必要なパッケージを落とす。
~~~Terminal:コマンド
yum -y install --enablerepo=epel,remi,remi-php73 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql phpmyadmin
~~~

2.上記がダウンロードできたらバージョンの確認
~~~Terminal:コマンド
php -v
~~~

3.php.iniファイルの編集
~~~Terminal:コマンド
vim /etc/php.ini
~~~

4.変更点

:::note info
memory_limit = 512M
post_max_size = 100M
upload_max_filesize = 100M
date.timezone = "Asia/Tokyo"
display_errors = On
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = UTF-8
mbstring.encoding_translation = On
mbstring.http_output = pass
mbstring.detect_order = auto
:::

5.phpmyadminの設定
vim /etc/httpd/conf.d/phpMyAdmin.conf


6.phpmyadminconfの調整
~~~Terminal:コマンド
★phpmyadmin設定ファイル
# phpMyAdmin - Web based MySQL browser written in php
#
# Allows only localhost by default
#
# But allowing phpMyAdmin to anyone other than localhost should be considered
# dangerous unless properly secured by SSL

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
       Require ip 192.168.33.10
       Require all granted
     </RequireAny>
   </IfModule>
</Directory>

<Directory /usr/share/phpMyAdmin/setup/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
       Require ip 192.168.33.10
       Require all granted
     </RequireAny>
   </IfModule>
</Directory>

# These directories do not require access over HTTP - taken from the original
# phpMyAdmin upstream tarball
#
<Directory /usr/share/phpMyAdmin/libraries/>
    Require all denied
</Directory>

<Directory /usr/share/phpMyAdmin/templates/>
    Require all denied
</Directory>

<Directory /usr/share/phpMyAdmin/setup/lib/>
    Require all denied
</Directory>

<Directory /usr/share/phpMyAdmin/setup/frames/>
    Require all denied
</Directory>

# This configuration prevents mod_security at phpMyAdmin directories from
# filtering SQL etc.  This may break your mod_security implementation.
#
#<IfModule mod_security.c>
#    <Directory /usr/share/phpMyAdmin/>
#        SecRuleInheritance Off
#    </Directory>
#</IfModule>
~~~

composerのインストール
---

1.composerをインストールする。
~~~Terminal:コマンド
yum -y install --enablerepo=remi,remi-php73 php-pecl-zip composer
~~~

2.composerの配置とインストール確認
#CentOSのどこからでも使えるようにするために、/usr/local/binフォルダにcomposer.pharを移動させる
~~~Terminal:コマンド
mv composer.phar /usr/local/bin/composer
~~~

boxのバックアップ
~~~Terminal:コマンド
vagrant package --output laravelos7.box
~~~

●gitの初期設定
~~~Terminal:コマンド
git config --global user.name "太一 石坂"
git config --global user.email "taiti048235921@gmail.com"
~~~

●ssh鍵作成
~~~Terminal:コマンド
ssh-keygen -t rsa -C "taiti048235921@gmail.com"
~~~

●鍵登録
catコマンドで鍵の内容をコピーしてgitに登録する。
~~~Terminal:コマンド
cat ~/.ssh/id_rsa.pub
~~~

★参考ページ
●CentOS 7のインストール後におこなうLinuxの基本設定 13ポイント
https://www.rem-system.com/linux-first-setting/

●EPELに関して
https://qiita.com/yamada-hakase/items/fdf9c276b9cae51b3633

●CentOS7 に最新版の Git をインストールする方法
https://qiita.com/tomy0610/items/66e292f80aa1adc1161d

●vagrantを用いたPHPの環境構築
https://qiita.com/tiwu_dev/items/f135e6b6fbbe3ec6aa54

●Apache 2.4.25 以降でホスト名のアンダースコアで 400 が出る場合の対処方法
https://gotohayato.com/content/148/

●【Apache】httpd.conf ファイルの設定の解説
https://go-journey.club/archives/14030

●CentOS7にMySQL8をインストールして初期パスワードを変更する
https://www.suzu6.net/posts/196-mysql/

●CentOS 7 に Node.js(npm, node) をインストールする手順
https://mekou.com/linux-magazine/centos-7-%E3%81%AB-node-jsnpm-node-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86/