CentOS7系 初期設定からNGINX+PHP+DB 環境を作るまで

# CentOS7系 初期設定からNginx + MySQL + php 環境を作るまで


---
### 初期設定

##### とりあえずアプデ
- `yum upgrade`

##### 再起動
- `shutdown -r now`

##### 管理ユーザーを追加
- `useradd admin`
- `passwd admin`

##### rootになれるユーザーをadminのみにする
- `usermod -G wheel admin`
- `vi /etc/pam.d/su`
 - `auth       required     pam_wheel.so use_uid　`←コメント解除

##### firewalldを有効化する
- `systemctl start firewalld`
- `systemctl enable firewalld`
##### firewalldでポートを管理する
 >VPSやパブリッククラウドの場合いくらここで開けても、より上位にある管理画面からポートを開けてやらないと通信ができないので注意

 - `firewall-cmd add-port=80/tcp --permanent` (80番ポートを解放)
 - `firewall-cmd add-port=443/tcp --permanent` (443番ポートを解放)
 - `firewall-cmd --reload`


---
### 必要になるであろう各種パッケージを入れる
- `yum groupinstall base development`

##### 各種リポジトリを追加
| Repository | Command|Description|                                                                                                                                                                            
|:---|:---|:---|
|EPEL| `yum install epel-release`|エンタープライズ向け外部リポジトリ                                                                                                                                          
| remi       | `yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm`|PHP7.1が必要なため入れる。不安定なものも提供されているので注意が必要                                                         |
| nginx      | `yum install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm`|WebサーバーNGINXの公式リポジトリ。                                                            |
| MySQL      | `yum install https://dev.mysql.com/get/mysql57-community-release-el`rpm -q --whatprovides /etc/redhat-release --qf '%{version}\n'`-9.noarch.rpm`|MySQL（DB）のコミュニティ版（評価版？）のリポジトリ。 |

##### SELinuxを無効化する
>デフォでOnになってるこの機能はその強すぎる保護機能のせいで他のアプリケーションに悪さをすることもあるので無効化しておく。とあるが思考停止でとりあえずDisableにするのはどうなんだろうか

 - `setenforce 0`
 - `vim /etc/sysconfig/selinux`
 - `SELINUX=disabled`


---
### yum-cronのインストール
> yum-cronとは、パッケージ管理（要はアプデ）を勝手にやってくれる便利なやつ

- パッケージインストール
 - `yum install yum-cron`
- confファイルを編集
 - `vim /etc/yum/yum-cron.conf`

##### 以下を変更する
 - `apply_updates = yes`　(このソフトにアップデートを許可)
 - `update_cmd = security` (セキュリティーに関するアプデのみ自動更新に)

##### yum-cronを使えるようにする
 - `systemctl start yum-cron`
 - `systemctl enable yum-cron`

---
#### nginx のインストール
> Apacheより応答速度が高く、各種設定も楽なのでこれを使用する。ロシア製らしい

 - `yum install nginx`
 - `systemctl start nginx`
 - `systemctl enable nginx`

##### 各種configファイルを編集する

|Conf file|Location|Description|
|:---|:---|:---|:---|
|default.conf|/etc/nginx/conf.d/default.conf|サブドメインやPHPとの連携などを設定するファイル|
|nginx.conf|/etc/nginx/nginx.conf|NGINXのグローバル設定ファイル
|WEB Root|/usr/share/nginx/html|.htmlやWordpressなどのディレクトリを置いておく場所


##### 設定が終わったら設定ファイルをロードし直す
 - `systemctl reload nginx`

##### 設定したドメインを叩いてブラウザから確認
- ` http://localhost`

>localhostのところは適宜操作しているIP or FQDNに読み換えること

---
### PHPをインストールする。
>PHPとは、HTMLと親和性の高いオープンソースの汎用スクリプト。今回はWordPressの実行を想定してインストールします。

##### パッケージをダウンロードするためにremiリポジトリを有効にする
 - `yum install yum-utils`
 - `yum-config-manager --enable remi-php71`

##### 必要なパッケージをインストールする
- `yum install --enablerepo=remi,remi-php71 php php-fpm php-gd php-json php-mysql php-curl php-mbstring php-intl php-mcrypt php-imagick php-xml php-zip php-pecl-apcu php-pecl-zendopcache`


##### php.iniを編集する
- `/etc/php.ini`

        mbstring.language = Japanese
        mbstring.http_input = UTF-8
        mbstring.http_output = pass
        mbstring.encoding_translation = On
        mbstring.detect_order = auto
        mbstring.substitute_charset = none

##### NGINXでPHPが動くようにする
- `/etc/nginx/conf.d/default.conf`

        {
          location ~ \.php$ {
          root            /usr/share/nginx/html;
          fastcgi_pass   127.0.0.1:9000;
          fastcgi_index  index.php;
          fastcgi_param  SCRIPT_FILENAME;
          $document_root$fastcgi_script_name;
          include        fastcgi_params;

        }

##### NGINXの再起動
- `systemctl restart nginx`

##### PHP-FPMの起動＆自動起動設定
- `systemctl start php-fpm`
- `systemctl enable php-fpm`

##### info.phpの作成
- `vim /usr/share/nginx/html/<?php phpinfo();?>`

##### ブラウザーから確認
- `http://localhost/info.php`
> ここで作ったinfo.phpはサーバーの動作確認後は速やかに削除すること

---
### MySQLをインストールする
>MySQLはOracleのデータベースソフト。今回使用しているCentOS7ではデフォで類似品のMariaDBが入っているが、MySQLのがドキュメントが充実しているのでこれを使用。

- 'yum install https://dev.mysql.com/get/mysql57-community-release-el`rpm -q --whatprovides /etc/redhat-release --qf '%{version}\n'`-9.noarch.rpm'
- `yum -y install mysql-community-devel`
- `yum -y install mysql-community-server`

##### MySQLをセットアップする
- `systemctl start mysqld`
- `systemctl enable mysqld`

##### ちょっとごにょごにょコンフィグファイルに追加
- `vim /etc/my.cnf`
 - my.cnf に下記を追記


      default_password_lifetime=0
      log_timestamps=SYSTEM
      explicit_defaults_for_timestamp=TRUE
      skip-character-set-client-handshake
      character-set-server=utf8


##### MySQL初期パスワードを確認する
 - `grep password /var/log/mysqld.log`

##### MySQLにログインする
 - `mysql -u root -p`
 - 上で確認した初期パスワードをコピペ
 - 任意のパスワードに変更する。



---
### Wordpressをセットアップする

##### wordpress用のDBを作る
- `create database wordpress;`
>わかればいいので名前はなんでも

##### wordpressのデータベースへwordpressさんに権限を与える
- `パスワード';　`
>「パスワード」と書かれた場所は適宜設定したいパスワードに変更すること

##### 内容をリロードして退出
- `flush privileges;`
- `exit`

##### ドキュメントルートへ移動
- `usr/share/nginx/html`

##### wordpressを落としてくる
- `wget https://ja.wordpress.org/latest-ja.tar.gz`

##### 解凍する
- `tar xvzf latest-ja.tar.gz`


---

### Let's Encryptをインストールする
> Let'sEncryptは無料でWEBページのSSL化をしてくれる公益プロジェクト。MozillaとかGoogleとかAkamaiみたいな超巨大インターネット企業のスポンサーシップによって運営しているもの。最近ではGoogleがhttps化していないWEBサイトのランキング表示順位を下げる施策を始めたのでサイトのSSL化は最早必須と言える。

 ##### 必要なパッケージを入れる
 - `yum install certbot certbot-nginx`


##### 通知が欲しいメールアドレスを記入（入力しないと続行できない）
 - `Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):`


##### 利用規約に同意 (Aで続行)
 - `Please read the Terms of Service at...`


##### EFFのメールニュースを購読するかどうか問われる（Nで拒否）
 - `Would you be willing to share your email address with the Electronic Frontier
Foundation,...`


##### NGINXの設定ファイルにあるドメインのどれに証明書を当てるかを聞かれる(ブランクのままEnterを押して続行)
 - `Which names would you like to activate HTTPS for?`


##### NGINXの設定をどうするか聞かれる(2を選ぶとよりセキュアになる)
 - `Please choose whether HTTPS access is required or optional.`


---
とりあえずここまででNGINX+PHP+DBの環境が揃いました。
ここから先は適宜nextCloud環境にするなりWordPress環境にするなり煮るなり焼くなりしてください。