今更ながらWordPressってみた

だいぶさぼっていました。借りているConohaWordPressでも
やってみようかなと思い。そういえばどう構築するのかと考えて
試しにやってみました。(しかし実際はKUSANAGIでやればいいんですけどね)
WebサーバとDBサーバに分割して構築してみたいと思ったので
簡単ながらその手順をまとめてみた。
ApacheではなくNginX+PHP7+MariaDBの構成ね。


●大まかな手順
 ◆共通
 1.初期設定
  (1)最新パッチ適用
  (2)ホスト名設定、IPアドレス固定化

 ◆DBサーバ側
 2.Mariadbインストール
  (1)インストール
  (2)DB初期設定
  (3)インストール後確認

 3.MariaDB設定
  (1)状況確認
  (2)SSL接続設定
  (3)ワードプレス用設定

 4.FireWall開放
  (1)ポート開放
  (2)Webサーバへの証明書転送

 ◆Webサーバ側
 5.NginXインストール
  (1)最新版NginXリポジトリ情報入手
  (2)NginXインストール
  (3)ローカル証明書作成
  (4)NginX設定

 6.PHP7インストール
  (1)PHP7インストール
  (2)PHP-FPM設定

 7.MariaDBへの接続確認
  (1)MariaDBクライアントインストール
  (2)証明書設定変更
  (3)接続確認

8.WordPressインストール
  (1)ダウンロード
  (2)Nginx設定ファイル修正
  (3)WordPressの設定ファイル修正
  (4)NginX再起動
  (5)パーミッション設定

●参考サイト
1.データベース関連
https://www.server-world.info/query?os=Ubuntu_16.04&p=mariadb
https://qiita.com/akito1986/items/98a8430d936b293cb354
https://mariadb.com/kb/ja/mysql_secure_installation/
https://orebibou.com/2016/08/mariadb-galera-cluster-10-1%E7%B3%BB%E3%81%A7ssl%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B/
https://qiita.com/ngyuki/items/146252102315282e1f12
http://www.w3ii.com/ja/mariadb/mariadb_connection.html
https://o6asan.com/blog-j/2017/10/15/phpmyadmin-%E3%82%84-wordpress-%E3%81%8B%E3%82%89-mariadb-%E3%81%AB%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B%E3%80%82/
https://labo-iwasaki.com/code/mysql-ssl.html
http://inokara.hateblo.jp/entry/2013/04/29/023037
https://o6asan.com/blog-j/2017/10/13/mariadb-%E3%81%A7%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E6%8E%A5%E7%B6%9A%E3%80%82/
https://www.vultr.com/docs/secure-mariadb-with-ssl-support-on-ubuntu-16-04
http://d.hatena.ne.jp/editnuki/20110813/1313177077
http://ohbarye.blogspot.jp/2014/07/mysql.html
https://server-setting.info/centos/mysql-ssl.html
https://moshimore.jp/knowledge/2015/08/31/sakura_internet_vps_mysql_ssl/
https://www.server-world.info/query?os=CentOS_7&p=mariadb102&f=3
https://qiita.com/h6rdworker/items/40691b3a1e40e78bed92
https://mariadb.com/kb/ja/mycnf-mariadb/
http://server.etutsplus.com/centos-7-mariadb-install-and-mysql-secure-installation/
https://www.mk-mode.com/octopress/2014/08/29/centos-7-0-installation-of-mariadb/
https://gtrt7.com/blog/linux/ufw-setting
https://fsck.jp/?p=337
https://qiita.com/SUZUKI_Masaya/items/c587512643b7d6337538
https://www.cyberciti.biz/faq/how-to-setup-mariadb-ssl-and-secure-connections-from-clients/
https://qiita.com/ngyuki/items/146252102315282e1f12
https://www.digitalocean.com/community/tutorials/how-to-configure-ssl-tls-for-mysql-on-ubuntu-16-04

2.Webサーバ関連
https://inter.work/build_wordpress_construction/
https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-lemp-on-ubuntu-16-04
http://tyama1234.hatenablog.com/entry/2014/11/06/204218
https://qiita.com/tukiyo3/items/b1d29a257c41d97d6107
https://joppot.info/2014/03/11/979
https://qiita.com/na0AaooQ/items/810cce437c6d480701ab
http://ext.omo3.com/linux/mysql_host.html
https://qiita.com/fk1/items/3ef1d989d1d5e44a1d03
https://e-algorithm.xyz/recovery-of-wordpress-db-error/
https://wordpress.org/plugins/secure-db-connection/
http://wordpress-custom.jp/security/security-permission-2.html


●詳細
1.初期設定【共通】
(1)最新パッチ適用
 ・パッケージリスト更新

user@ubuntusrv:~$ sudo apt-get update
ヒット:1 http://jp.archive.ubuntu.com/ubuntu xenial InRelease
~中略~
306 kB を 1秒 で取得しました (213 kB/s)
パッケージリストを読み込んでいます... 完了

・パッケージ更新
user@ubuntusrv:~$ sudo apt-get upgrade
ヒット:1 http://jp.archive.ubuntu.com/ubuntu xenial InRelease
取得:2 http://jp.archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]
~中略~
続行しますか? [Y/n]Y
~中略~
resolvconf (1.78ubuntu4) のトリガを処理しています ...

・Ubuntuアップデート
user@ubuntusrv:~$ sudo apt-get dist-upgrade
[sudo] user のパスワード:
パッケージリストを読み込んでいます... 完了
~中略~
続行しますか? [Y/n]Y
~中略~
user@ubuntusrv:~$ sudo reboot

(2)ホスト名設定、IPアドレス固定化
・IPアドレス変更
user@ubuntutestsrv:~$ sudo vi /etc/network/interfaces

※DHCPの箇所(上から3行をコメントアウトしIPアドレス設定を追記 )
# The primary network interface
#auto eth0 #iface eth0 inet dhcp
# Static Address auto eth0 iface eth0 inet
 static address 192.168.X.XXX
 network 192.168.X.0
 netmask 255.255.255.0
 broadcast 192.168.X.255
 gateway 192.168.X.X
 dns-nameservers 192.168.X.X 

 ・ホスト名変更
user@ubuntusrv:~$ sudo hostnamectl set-hostname servername
user@ubuntusrv:~$ sudo hostnamectl

・hostsファイルの書替
user@ubuntutestsrv:~$ sudo vi /etc/hosts

※ホスト名の書替え。
127.0.0.1 localhost
127.0.1.1 servername.hoge.com servername
192.168.X.XXX servername.hoge.com servername

 ・再起動
user@ubuntusrv:~$ sudo reboot


2.Mariadbインストール
(1)インストール
・インストール
user@databasesrv:~$ sudo apt-get -y install mariadb-server
[sudo] user のパスワード:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
~中略~
ureadahead (0.100.0-19) のトリガを処理しています ...
user@databasesrv:~$

・サーバ文字コード設定
user@databasesrv:~$ sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf

※赤字の通り修正
 MySQL/MariaDB default is Latin1, but in Debian we rather default to the full
# utf8 4-byte character set. See also client.cnf
#
 character-set-server = utf8
 collation-server = utf8_general_ci

 ・クライアント文字コード設定
user@databasesrv:~$ sudo vi /etc/mysql/mariadb.conf.d/50-client.cnf

※下記の通り修正
[client]
 # Default is Latin1, if you need UTF-8 set this (also in server section)
 default-character-set = utf8

 ・クライアント文字コード設定2
user@databasesrv:~$ sudo vi /etc/mysql/mariadb.conf.d/50-mysql-clients.cnf

※下記の通り修正
 [mysql]
 # Default is Latin1, if you need UTF-8 set this (also in server section)
 default-character-set = utf8 

 ・サービス再起動
user@databasesrv:~$ sudo systemctl restart mysql

(2)DB初期設定
user@databasesrv:~$ sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

・パスワード設定(空白にしない)
Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] Y

New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!

・匿名ユーザ削除
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

・rootリモートログイン禁止
Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

・テストデータベース削除
By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n]Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

・特権情報リロード
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

(3)インストール後確認
・バージョン確認
user@databasesrv:~$ mysql --version
mysql  Ver 15.1 Distrib 10.0.31-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

・rootで接続
user@databasesrv:~$ sudo mysql -u root -p
Enter password:

・文字コード情報表示
MariaDB [(none)]> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

・ユーザ情報表示
MariaDB [(none)]> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *0B24DB6553CBDFB0C91DD3427A068400D1D8401E |
+------+-----------+-------------------------------------------+
1 row in set (0.00 sec)

・データベース一覧表示
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+

MariaDB [(none)]> exit
Bye

3.MariaDB設定
 (1)状況確認
 ・rootで接続
user@databasesrv:~$ sudo mysql -u root -p
Enter password:

・SSLオプションがOFFとなっていることを確認
MariaDB [(none)]> show variables like '%ssl%';
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| have_openssl  | NO       |
| have_ssl      | DISABLED |
| ssl_ca        |          |
| ssl_capath    |          |
| ssl_cert      |          |
| ssl_cipher    |          |
| ssl_crl       |          |
| ssl_crlpath   |          |
| ssl_key       |          |
+---------------+----------+
9 rows in set (0.00 sec)
MariaDB [tohonokai]> exit
Bye

(2)SSL接続設定 ・CAキー作成
user@databasesrv:~$ sudo mkdir /etc/mysql/ssl
user@databasesrv:~$ cd /etc/mysql/ssl
user@databasesrv:/etc/mysql/ssl$ sudo openssl genrsa -out ca-key.pem 2048
Generating RSA private key, 2048 bit long modulus
...........+++
~中略~
user@databasesrv:/etc/mysql/ssl$

・CA証明書作成
user@databasesrv:/etc/mysql/ssl$ sudo openssl req -new -x509 -nodes -days 365000 -key ca-key.pem -out ca-cert.pem
You are about to be asked to enter information that will be incorporated
~中略~
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:XXXX
Organizational Unit Name (eg, section) []:XXXX
Common Name (e.g. server FQDN or YOUR name) []:databasesrv
Email Address []:hoge@hoge.com

・DBサーバ用の秘密鍵と CSR の作成
user@databasesrv:/etc/mysql/ssl$ sudo openssl req -newkey rsa:2048 -days 365000 -nodes -keyout server-key.pem -out server-req.pem
Generating a 2048 bit RSA private key
..+++
~中略~
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:XXXX
Organizational Unit Name (eg, section) []:XXXX
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:hoge@hoge.com
~中略~
A challenge password []:
An optional company name []:
user@databasesrv:/etc/mysql/ssl$

・DBサーバ用の証明書作成
user@databasesrv:/etc/mysql/ssl$ sudo openssl rsa -in server-key.pem -out server-key.pem
writing RSA key
user@databasesrv:/etc/mysql/ssl$ sudo openssl x509 -req -in server-req.pem -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
Signature ok
~中略~
Getting CA Private Key

・クライアント用の秘密鍵と証明書作成
user@databasesrv:/etc/mysql/ssl$ sudo openssl req -newkey rsa:2048 -days 365000 -nodes -keyout client-key.pem -out client-req.pem
Generating a 2048 bit RSA private key
~中略~
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:XXXX
Organizational Unit Name (eg, section) []:XXXX
Common Name (e.g. server FQDN or YOUR name) []:websrv
Email Address []:hoge@hoge.com
~中略~
A challenge password []:
An optional company name []:

・クライアント用の証明書作成
user@databasesrv:/etc/mysql/ssl$ sudo openssl rsa -in client-key.pem -out client-key.pem
writing RSA key
user@databasesrv:/etc/mysql/ssl$ sudo openssl x509 -req -in client-req.pem -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
~中略~
Getting CA Private Key

・証明書の確認
user@databasesrv:/etc/mysql/ssl$ sudo openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem
server-cert.pem: OK
client-cert.pem: OK

・フォーマット変換
user@databasesrv:/etc/mysql-ssl$ sudo openssl rsa -in server-key.pem -out server-key.pem
user@databasesrv:/etc/mysql-ssl$ sudo openssl rsa -in client-key.pem -out client-key.pem
writing RSA key

・サーバ設定ファイル編集
user@databasesrv:/etc/mysql-ssl$ sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf

※赤字の通り修正
 # Instead of skip-networking the default is now to listen only on
 # localhost which is more compatible and is not less secure.
 bind-address = *
 ~略~
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
# ssl
ssl-ca=/etc/mysql/ssl/ca-cert.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem

 ・クライアント設定ファイル編集
user@databasesrv:/etc/mysql-ssl$ sudo vi /etc/mysql/mariadb.conf.d/50-clients.cnf
user@databasesrv:/etc/mysql/ssl$ sudo vi /etc/mysql/mariadb.conf.d/50-mysql-clients.cnf

※以下を追記
 ssl-ca=/etc/mysql/ssl/ca-cert.pem
 ssl-cert=/etc/mysql/ssl/client-cert.pem
 ssl-key=/etc/mysql/ssl/client-key.pem

 ・MariaDB再起動
user@databasesrv:/etc/mysql-ssl$ sudo systemctl restart mysql
(3)ワードプレス用設定
・rootでログイン
user@databasesrv:~$ sudo mysql -u root -p

・WordPress用データベース作成
MariaDB [(none)]> create database wp;
Query OK, 1 row affected (0.00 sec)

・ユーザ作成
MariaDB [(none)]> create user wpuser;
Query OK, 0 rows affected (0.00 sec)

・権限付与
MariaDB [(none)]> grant all privileges on wp.* to 'wpuser'@'%' identified by 'password' require ssl;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> select user,host,password from mysql.user;
+-----------+-----------+-------------------------------------------+
| user      | host      | password                                  |
+-----------+-----------+-------------------------------------------+
| root      | localhost |                                           |
| wpuser | %         |                                              |
+-----------+-----------+-------------------------------------------+
2 rows in set (0.00 sec)
MariaDB [(none)]> SHOW GRANTS FOR 'wpuser';
+-----------------------------------------------------------------------------------------------------------------------+
| Grants for wpuser@%                                                                                                |
+-----------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'wpuser'@'%' IDENTIFIED BY PASSWORD '' REQUIRE X509 |
| GRANT ALL PRIVILEGES ON `tohonokai`.* TO 'wpuser'@'%'                                                              |
+-----------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

・SSL設定確認
MariaDB [(none)]> show variables like '%ssl%';
+---------------+--------------------------------+
| Variable_name | Value                          |
+---------------+--------------------------------+
| have_openssl  | NO                             |
| have_ssl      | YES                            |
| ssl_ca        | /etc/mysql-ssl/ca-cert.pem     |
| ssl_capath    |                                |
| ssl_cert      | /etc/mysql-ssl/server-cert.pem |
| ssl_cipher    |                                |
| ssl_crl       |                                |
| ssl_crlpath   |                                |
| ssl_key       | /etc/mysql-ssl/server-key.pem  |
+---------------+--------------------------------+
9 rows in set (0.00 sec)

・作成ユーザのログイン確認
MariaDB [(none)]> exit
Bye
user@databasesrv:~$ mysql -u wpuser --ssl-ca=/etc/mysql/ssl/ca-cert.pem -p
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 47
Server version: 10.0.31-MariaDB-0ubuntu0.16.04.2 Ubuntu 16.04
~中略~
MariaDB [wp]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| wp          |
+--------------------+
2 rows in set (0.00 sec)
MariaDB [tohonokai]> exit
Bye

4.FireWall開放
 (1)ポート開放
 ・ポート状況確認
user@databasesrv:/etc/mysql-ssl$  sudo ufw status

・FireWallでMariaDBのポートを開放
user@databasesrv:/etc/mysql-ssl$ sudo ufw allow from 192.168.1.0/24 to any port 3306
ルールを追加しました
ルールを追加しました (v6)
user@databasesrv:/etc/mysql-ssl$ sudo ufw allow from 192.168.1.0/24 to any port 873
ルールを追加しました
ルールを追加しました (v6)

・設定確認
user@databasesrv:~$ sudo ufw status numbered
user@databasesrv:/etc/mysql-ssl$ sudo ufw reload
ファイアウォールを再読込しました

(2)Webサーバへの証明書ファイル類転送
user@databasesrv:/etc/mysql/ssl$ scp client-cert.pem user@192.168.X.XXX:/home/user
~略~
user@192.168.X.XXX's password:
client-cert.pem                                                          100% 1306     1.3KB/s   00:00
user@databasesrv:/etc/mysql/ssl$ scp ca-cert.pem user@192.168.X.XXX:/home/sshloginuser
user@192.168.X.XXX's password:
ca-cert.pem                                                              100% 1432     1.4KB/s   00:00
user@databasesrv:/etc/mysql/ssl$ scp server-cert.pem user@192.168.X.XXX:/home/sshloginuser
user@192.168.X.XXX's password:
server-cert.pem                                                          100% 1306     1.3KB/s   00:00
user@databasesrv:/etc/mysql/ssl$ scp client-key.pem user@192.168.X.XXX:/home/sshloginuser
user@192.168.X.XXX's password:
client-key.pem                                                           100% 1679     1.6KB/s   00:00

5.NginXインストール
(1)最新版NginXリポジトリ情報入手
 ・nginxサイトが配布するPGPキーを追加
user@websrv:~$ sudo curl http://nginx.org/keys/nginx_signing.key | sudo apt-key add -
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1561  100  1561    0     0    738      0  0:00:02  0:00:02 --:--:--   738
OK

・リポジトリを一覧に追加
user@websrv:~$ sudo sh -c "echo 'deb http://nginx.org/packages/ubuntu/ trusty nginx' >> /etc/apt/sources.list"
user@websrv:~$ sudo sh -c "echo 'deb-src http://nginx.org/packages/ubuntu/ trusty nginx' >> /etc/apt/sources.list"

・aptの更新
user@websrv:~$ sudo apt-get update
ヒット:1 http://jp.archive.ubuntu.com/ubuntu xenial InRelease
~中略~
パッケージリストを読み込んでいます... 完了

(2)NginXインストール ・インストール
user@websrv:~$ sudo apt-get install nginx
パッケージリストを読み込んでいます... 完了
~中略~
ureadahead (0.100.0-19) のトリガを処理しています ...

・バージョン確認
user@websrv:~$ sudo nginx -v
nginx version: nginx/1.12.2

(3)ローカル証明書作成 ・秘密鍵作成
user@websrv:/var/www$ cd /etc/nginx/
user@websrv:/etc/nginx$ sudo mkdir ssl
user@websrv:/etc/nginx$ cd ssl
user@websrv:/etc/nginx/ssl$ sudo  openssl genrsa -aes128 -out server.key 2048
Generating RSA private key, 2048 bit long modulus
................................................................................................................................+++
~中略~
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:

・秘密鍵からパスフレーズ削除
user@websrv:/etc/nginx/ssl$ sudo openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:
writing RSA key

・公開鍵作成
user@websrv:/etc/nginx/ssl$  sudo openssl req -new -days 3650 -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
~中略~
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:websrv@hoge.com ←入力
Email Address []:hoge@hoge.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
user@websrv:/etc/nginx/ssl$

・10年分の証明書準備
user@websrv:/etc/nginx/ssl$ sudo openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650
Signature ok
~中略~
Getting Private key

(4)NginX設定
 ・設定ファイル編集(worker_process最適化とバナーを隠す)
user@websrv:~$ sudo vi /etc/nginx/nginx.conf

※下記の内容を追記
http {
        server_tokens off;
        ##

・ルートディレクトリ作成
user@websrv:~$ sudo mkdir -p /var/www

・ルートディレクトリ設定
user@websrv:/var/www$ sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.org
user@websrv:/var/www$ vi /etc/nginx/conf.d/default.conf

※下記のとおり編集
upstream phpfpm70{
  server unix:/var/run/php/php7.0-fpm.sock;
}

server {
        listen 80; # httpへのアクセスをhttpsへリダイレクトする
        listen [::]:80;
        server_name  192.168.0.1;
        if ($http_x_forwarded_proto != https) {
            return 301 https://$host$request_uri;
        }
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    ssl on;
    server_name  192.168.0.1;
    root   /var/www;
    index  index.html index.htm index.php;

    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_session_timeout 5m;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
    ssl_prefer_server_ciphers on;

    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains" always;

    location / {
            try_files $uri $uri/ @wordpress;
    }
    location ~ \.php$ {
        try_files $uri $uri @wordpress;
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_pass   phpfpm70;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
    location @wordpress {
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_pass   phpfpm70;
        include       fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root/index.php;
    }
}

6.PHP7インストール
(1)PHP7インストール
 ・インストール
user@websrv:~$ sudo apt-get install php php-cgi php-cli php-mysql php-gd php-apcu php-fpm php-pear php-xmlrpc php-mbstring php-mcrypt
パッケージリストを読み込んでいます... 完了
~中略~
php7.0-fpm (7.0.22-0ubuntu0.16.04.1) のトリガを処理しています ...
user@websrv:~$

・バージョン確認
user@websrv:~$ php -v
PHP 7.0.22-0ubuntu0.16.04.1 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.22-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend Technologies
user@websrv:~$

(2)PHP-FPM設定
user@websrv:/etc/php/7.0/fpm$ sudo vi /etc/php/7.0/fpm/php-fpm.conf
※赤字の通り修正
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group ; will be used.
user = nginx
group = nginx 

 ※赤字の通り修正
; Set permissions for unix socket, if one is used. In Linux, read/write
 ; permissions
 ~略~
group are set as the running user ; mode is set to 0660
listen.owner = nginx
listen.group = nginx

 ・nginx再起動
user@websrv:/var/www$ sudo service nginx configtest
user@websrv:/var/www$ sudo service nginx restart
user@websrv:/var/www$

※http://hoge.com/ に接続しページが表示されていることを確認する。

7.MariaDBへの接続確認
(1)MariaDBクライアントインストール
・クライアントインストール
user@websrv:~$ sudo apt-get -y install mysql-client
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
~中略~
libc-bin (2.23-0ubuntu9) のトリガを処理しています ...

・インストール後確認
user@websrv:~$ which mysql
/usr/bin/mysql

(2)証明書設定変更
 ・証明書のコピー ※先にDBサーバから証明書を転送しておくこと
user@websrv:~$ sudo mkdir /etc/mysql/ssl
user@websrv:~$ sudo mv /home/sshloginuser/ca-cert.pem /etc/mysql/ssl/
user@websrv:~$ sudo mv /home/sshloginuser/client-cert.pem /etc/mysql/ssl/
user@websrv:~$ sudo mv /home/sshloginuser/client-key.pem /etc/mysql/ssl/
user@websrv:~$ sudo mv /home/sshloginuser/server-cert.pem /etc/mysql/ssl/

・証明書の権限変更
user@websrv:~$ sudo chown -R root /etc/mysql/ssl/
user@websrv:~$ sudo chgrp -R root /etc/mysql/ssl/

(3)接続確認
 ・接続確認
user@websrv:~$ mysql -u wpuser -h 192.168.X.XXX --ssl-ca=/etc/mysql/ssl/ca-cert.pem -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.

~中略~

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> status;
--------------
mysql  Ver 14.14 Distrib 5.7.20, for Linux (x86_64) using  EditLine wrapper

Connection id:          40
Current database:
Current user:           wpuser@192.168.X.XXX
SSL:                    Cipher in use is DHE-RSA-AES256-SHA
~中略~
Uptime:                 19 min 39 sec

Threads: 2  Questions: 114  Slow queries: 0  Opens: 20  Flush tables: 1  Open tables: 84  Queries per second avg: 0.096
--------------

・DBへのSSL接続確認
mysql> show status like 'ssl_cipher';
+---------------+--------------------+
| Variable_name | Value              |
+---------------+--------------------+
| Ssl_cipher    | DHE-RSA-AES256-SHA |
+---------------+--------------------+
1 row in set (0.00 sec)

mysql> exit

8.WordPressインストール
 (1)ダウンロード
 ・ダウンロード
user@websrv:/var/www$ cd /usr/local/src
user@websrv:/usr/local/src$ sudo wget https://ja.wordpress.org/latest-ja.tar.gz
--2017-12-03 13:51:30--  https://ja.wordpress.org/latest-ja.tar.gz
~中略~
2017-12-03 13:51:32 (5.12 MB/s) - `latest-ja.tar.gz' へ保存完了 [10141950/10141950]

・展開およびコピー
user@websrv:/usr/local/src$ sudo tar zxvf latest-ja.tar.gz
wordpress/
~中略~
wordpress/wp-comments-post.php
user@websrv:/usr/local/src$ sudo mv wordpress /var/www/
user@websrv:/usr/local/src$ ls -al /var/www/
合計 16
drwxr-xr-x  3 root   root    4096 12月  3 13:54 .
drwxr-xr-x 15 root   root    4096 11月 18 10:55 ..
-rw-r--r--  1 root   root      17 11月 19 14:28 index.php
drwxr-xr-x  5 nobody nogroup 4096 11月 30 17:21 wordpress
user@websrv:/usr/local/src$

(2)Nginx設定ファイル修正
atarain@websrv:/etc/nginx$ sudo vi /etc/nginx/conf.d/default.conf
※赤字の箇所修正
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    ssl on;
    server_name  hoge.com;
    root   /var/www/wordpress;
    index  index.html index.htm index.php;
    location ~* /wp-config.php {
             deny all;
     }
(3)WordPressの設定ファイル修正
user@websrv:/etc/nginx$ sudo mv /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php
user@websrv:/etc/nginx$ sudo vi /var/www/wordpress/wp-config.php

※赤字の箇所修正し、SSL設定と認証用ユニークキー設定を追加
/** WordPress のためのデータベース名 */
define('DB_NAME', 'wp');
/** MySQL データベースのユーザー名 */
define('DB_USER', 'wpuser');
/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'password');
/** MySQL のホスト名 */
define('DB_HOST', '192.168.X.X');
/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define('DB_COLLATE', '');
/** SSL設定 */
define( 'MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL | MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT );

/** 認証用ユニークキー */
/* https://api.wordpress.org/secret-key/1.1/salt/ の内容をコピー */

(4)NginX再起動
user@websrv:/etc/nginx$ sudo service nginx restart

 (5)パーミッション設定
user@websrv:/var/www$ sudo chmod -R 775 /var/www/wordpress/wp-content

※WebサーバにアクセスしWordPressインストールページが表示されるか確認 http://hoge.com
そのままサイトの内容を設定していく。

MariaDBのSSLの箇所で少しどころかかなり嵌った。
まだいまいちよくわかんないけど・・・。
証明書はきちんと勉強しないといけないですね。
後はConohaにWordPressインストールしてコンテンツ拡充ですな。
こっから先はWordPress領域なり

コメント

このブログの人気の投稿

証券外務員1種勉強(計算式暗記用メモ)

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

マクロ経済学(IS-LM分析)