Ubuntu18.04へのWordPressインストール(Let’s Encrypt+Nginx)


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インストール後の初期設定は追って書きます。

 

タグ付けされた , . ブックマークする へのパーマリンク.

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください