Ubuntu18.04、Nginx環境でWordpressをインストールします。その後、Let’s EncryptでSSLを有効にします。
殆ど定型作業に近いので、レンタルサーバを借りて、パッケージ更新した後にコピペで作業できるようにまとめます。
必要なパッケージのインストールと環境設定
# パッケージの最新化 sudo apt-get update; sudo apt-get upgrade # 時間を日本時間に設定 sudo timedatectl set-timezone Asia/Tokyo # 必要なパッケージのインストール sudo apt-get install php-fpm php-common php-cli mysql-server mysql-client php-mysql php-xml php-mbstring php-xmlrpc php-gd php-zip php-curl # PHPのタイムゾーンを日本にする sudo cp /etc/php/7.2/fpm/php.ini /etc/php/7.2/fpm/php.ini.bak sudo sed -i 's/;date.timezone =/date.timezone = "Asia\/Tokyo"/g' /etc/php/7.2/fpm/php.ini diff /etc/php/7.2/fpm/php.ini /etc/php/7.2/fpm/php.ini.bak sudo cp /etc/php/7.2/cli/php.ini /etc/php/7.2/cli/php.ini.bak sudo sed -i 's/;date.timezone =/date.timezone = "Asia\/Tokyo"/g' /etc/php/7.2/cli/php.ini diff /etc/php/7.2/cli/php.ini /etc/php/7.2/cli/php.ini.bak
DBの作成と権限設定
wordpressとある箇所は、わかりやすい名前に置換してもらっても、そのままでも構いません。DBのパスワードは大文字、小文字、数字、記号が入るように設定します。パスワードは一例として記載していますが、必ず変更してください。
sudo mysql -u root -p CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; GRANT ALL ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY '<一例:nodsa89yh9342#a3Ac>'; FLUSH PRIVILEGES; EXIT;
WordPress最新版のインストール
wordpressとある箇所は、わかりやすい名前に置換してもらっても、そのままでも構いません。DBのパスワードは大文字、小文字、数字、記号が入るように設定します。
cd /tmp wget https://wordpress.org/latest.tar.gz tar -zxvf latest.tar.gz sudo mv wordpress /var/www/wordpress sudo chown -R www-data:www-data /var/www/wordpress/ sudo chmod -R 755 /var/www/wordpress/
nginxの設定ファイルを以下のように書いて有効化します。
sudo vi /etc/nginx/sites-available/wordpress
/etc/nginx/sites-available/wordpressの中身
設定中にある/etc/letsencrypt/live/sample.yourdomain.com等はまだ作成できていませんが、記事の下の方でLet’s Encryptの設定時に作成しています。
server { listen 80; listen [::]:80; listen 443 ssl; listen [::]:443 ssl; charset utf-8; access_log /var/log/nginx/sample.yourdomain.com.access.log; error_log /var/log/nginx/sample.yourdomain.com.error.log; root /var/www/wordpress; index index.php index.html index.htm; server_name sample.yourdomain.com; ssl_certificate /etc/letsencrypt/live/sample.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/sample.yourdomain.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED'; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_session_timeout 10m; ssl_dhparam /etc/nginx/ssl/dhparam.pem; ssl_stapling on; client_max_body_size 10M; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
Let’s Encryptによる暗号化(SSL/TLS)設定を行う
SSL証明書をLet’s Encryptで取得するにあたって注意事項があります。新規構築時は特にハマりやすいので以下に注意してください。
- DNSによる名前解決が出来る事
- 80番ポートでアプリケーションが起動していない事(Let’s Enctyptによる初回証明書取得時に80番ポートでサービスを立ち上げる為、nginxやApacheが80番ポートを利用していると、証明書登録処理が失敗する)
- sample.yourdomain.comとある箇所は、インストール対象のドメイン名に直して実行する事
sudo apt-get install letsencrypt sudo service nginx stop sudo letsencrypt certonly --standalone -d sample.yourdomain.com sudo mkdir /etc/nginx/ssl sudo openssl dhparam 4092 -out /etc/nginx/ssl/dhparam.pem # 以下の中身を/etc/nginx/ssl/dhparam.pemに転記する。 # -----BEGIN DH PARAMETERS----- # MII・・・・・・ # ・・・・・・・ # ・・・・・・・・== # -----END DH PARAMETERS----- sudo vi /etc/nginx/ssl/dhparam.pem # 新しいサイトの設定をnginx上、有効にする。 sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/wordpress # nginxを再起動(手順上止まっているが面倒なのでrestartで)する。 sudo service nginx restart
## バーチャルドメイン毎のログファイルを作成する
バーチャルドメイン毎にログファイルを作成すると、分析などが楽になる為に事前設定しておきます。
touch /var/log/nginx/sample.yourdomain.com.access.log chown www-data:adm /var/log/nginx/sample.yourdomain.com.access.log touch /var/log/nginx/sample.yourdomain.com.error.log chown www-data:adm /var/log/nginx/sample.yourdomain.com.error.log
ブラウザでWordPressへログインして初期設定を行う
http://sample.yourdomain.comへアクセスして初期設定を行ってください。
日本語を選択して「続ける」をクリック
「さあ、始めましょう!」をクリッ
データベース名、ユーザー名、パスワードを入力して送信をクリック。この記事の通りに実施している場合には、データベース名、ユーザー名はwordpress、パスワードは<一例:nodsa89yh9342#a3Ac>に指定したものです。
「インストール実行」をクリック
ようこそ画面が表示されたら、サイトとタイトル、ユーザー名、パスワードを入れて「wordpressをインストール」をクリック
後は、見慣れた画面になるため、適宜設定を行ってください。
以前のwordpressのベストプラクティスでは、インストール時にアクセスしていた「install.php」等を削除すると良いと言う情報もありますが、最新版のWordpressでは、該当ページにアクセスしてもDBを削除しないとインストール不可と出る為、問題ありません(気になるなら削除してもOKです)。
SSL設定の評価
https://www.ssllabs.com/ssltest/より、SSLの設定テストを行います。A以上が取れていれば問題無いと思います(旧ブラウザのサポート等を考慮して、わざとセキュリティレベルの低い設定を行う事もありますので、一概にA以上が良いと言うわけではありませんが・・・)。
以上でSSL対応のwordpressサイトの構築は終わりですが、Let’s Encryptの証明書の有効期限は3か月ですので、cronで3か月毎に証明書を更新するようにcronに登録しておきます。
sudo crontab -e
毎月1日の2時ごろにでも実行されるようにしておきます。
20 2 1 * * /usr/bin/certbot renew && service nginx reload
wordpressインストール後の初期設定は追って書きます。