はじめに
最近swift3を勉強が本格的に行なっております。はじめです。
セキュリティーやSEO対策も含めブログをSSL化をすることになりましたが、
以前契約していたサーバーでは月額料金がかなりかかってしまうことがわかったので、
今回サーバーの移設をすることになりました。
自分の理解を深めるという意味も含め今回行った「サーバ移設の手順」、「nginxでWordPressを動かす設定」、「無料SSLの設定」を記事にすることにしました。
環境
- conohaのVPS
- CentOS 7
- WordPress
サーバー準備
ConohaのVPSサーバーの契約
今回conohaのVPSサーバーを使用します。
OSは[CentOS 7]を使用します。
sshログイン用のユーザーを作成
セキュリティー面も考えsshユーザーを作成します。(実際はtestユーザとかではなく、ちゃんとしたユーザ名にしています。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | # sshログイン用のユーザーを作成 ssh root@example.com useradd test passwd test # testユーザーでsudoを使えるようにする visudo ---- # 以下を追記 test ALL=(ALL) ALL ---- # testユーザーに切り替え su - test # 秘密鍵を作成(すべてenterでOK) ssh-keygen -t rsa # rootの許可リストをtestユーザーへ変更 sudo cp /root/.ssh/authorized_keys ~/.ssh/ sudo chown test:test ~/.ssh/authorized_keys chmod 644 ~/.ssh/authorized_keys # 一度ログアウトし、秘密鍵を使用して、ローカルのMacPCからtestユーザでログインできることを確認 # test.pem.txtはconohaでサーバを構築した際に取得できます。 cd /Users/test/ ssh test@XXX.XX.XXX.XXX -i test.pem.txt # rootユーザーでのsshログインを禁止 sudo vi /etc/ssh/sshd_config --- # 以下のように編集 /PermitRootLogin yes ↓ /PermitRootLogin no --- # sshサービスを再起動 sudo systemctl restart sshd.service # testユーザをログアウトして、ローカルのMacPCからrootでログインができないことを確認 ssh root@XXX.XX.XXX.XXX -i test.pem.txt -> Permission denied (publickey,gssapi-keyex,gssapi-with-mic). # testユーザならばログインできることを確認 ssh test@XXX.XX.XXX.XXX -i test.pem.txt |
必要なソフトウェアのインストール
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | yum remove mariadb-libs rm -rf /var/lib/mysql/ yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm yum info mysql-community-server yum -y install mysql-community-server vi /etc/yum.conf --- [main]内追記 exclude=kernel* tzdata* --- sudo yum install -y bash-completion unzip nginx php php-gd php-mbstring php-mysql php-pspell php-xml php-xmlrpc php-fpm # プロセスの起動・プロセスの自動起動設定 systemclt start nginx.service systemctl start php-fpm.service systemctl start mysqld.service sudo systemctl enable nginx.service sudo systemctl enable php-fpm.service sudo systemctl enable mysqld.service |
WordPressの移行
※事前に移行前のサーバーからDBのdumpとrootディレクトリ配下のファイルを取得しておきます。
DBの準備
1 2 3 4 5 6 7 8 9 10 | # mysqlでDBの作成 mysql -u root -p create database 'DB名'; grant all on DB名.* to DBユーザー名@'localhost' identified by 'パスワード'; # 移行前のDBと同じDB名・パスワードを使用するため、mysqlのパスワードバリデーションレベルをLOWに設定 validate_password_policy=LOW # dumpファイルをインポート mysql -uユーザー名 -pパスワード DB名 < test.sql |
WordPressのソースをアップロード
FTPツールで取得しておいたrootディレクトリ配下のファイルを移行先サーバーのrootディレクトリにアップロードします。
nginxの設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | vi /etc/nginx/nginx.conf --- user engines; worker_processes auto; ... http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; ... server { listen 80; listen [::]:80; # ドメインに合わせて適宜変更 server_name example.com; index index.php; # ドキュメントルートに合わせて適宜変更 root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; # 設定ファイルを見られないように location ~* /wp-config.php { deny all; } location ~ \.php$ { try_files $uri @wordpress; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location / { try_files $uri $uri/ @wordpress; } location @wordpress { fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root/index.php; include fastcgi_params; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } } --- |
php-fpmの設定
1 2 3 | vi /etc/php-fpm.d/www.conf listen.owner = test listen.group = test |
サービスの再起動
1 2 | sudo systemctl restart nginx.service sudo systemctl restart php-fpm.service |
ブラウザにてIP直指定でアクセスをし、表示確認
“【502 Bad Gateway】”
conohaでデフォルトで立ち上がっていたファイヤーウォールが原因でだったので、
ファイヤーウォールを停止
1 | systemctl stop firewalld |
再度IP直指定でアクセスし、表示の確認ができました。
DNSの切り替え
移行前のDNSを使用していたので、DNSを切り替えます。
ドメインにてアクセスができることを確認して完了です。
SSL化
今回は無料のLet`s Encryptを使用します。
letsencryptをインストール
1 2 3 4 | git clone https://github.com/letsencrypt/letsencrypt cd letsencrypt/ ./letsencrypt-auto --help ./letsencrypt-auto certonly --webroot --webroot-path ルートディレクトリ -d ドメイン名 |
証明書と秘密鍵を生成
証明書と秘密鍵を生成し、所有者を変更します。
1 2 3 4 5 | cd /etc/letsencrypt/live/example.com/ # 証明書のグループと所有者を変更 chown test:test fullchain.pem # 秘密鍵のグループと所有者を変更 chown test:test private.pem |
nginxに証明書と秘密鍵を設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | vi /etc/nginx/nginx.conf --- http { ... server { listen 443 ssl; listen [::]:443 ssl; server_name example.com; index index.php; root /usr/share/nginx/html; ssl_certificate "/etc/letsencrypt/live/example.com/fullchain.pem"; ssl_certificate_key "/etc/letsencrypt/live/example.com/privkey.pem"; # It is *strongly* recommended to generate unique DH parameters # Generate them with: openssl dhparam -out /etc/pki/nginx/dhparams.pem 2048 # ssl_dhparam "/etc/pki/nginx/dhparams.pem"; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP; ssl_prefer_server_ciphers on; ... } ... } --- |
httpsでの接続確認
httpsで正常にアクセスできるかを確認します。
nginxにてhttpでアクセスされたものをhttpsにリダイレクトさせる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | vi /etc/nginx/nginx.conf --- http { ... # http:で来たアクセスをhttpsにリダイレクト server { listen 80 default_server; listen [::]:80 default_server; server_name example.com; rewrite ^(.*) https://example.com$1 permanent; ... } ... } --- |
さいごに
ミドルウェアのインストールや設定等行いましたが、
改めて自分が理解できていないことが多いことを実感しました。
一つ一つ単語の意味を調べたこともあり理解度が深まったのでよかったです。