このサイトは最初の数年は自宅サーバーで、その後数年はWebARENA Indigoを用いて運営を続けてきました。
とはいえサーバーマシンも古いので色々アップデートをしないといけないというのと、最近少しこのサーバーに機能でも追加しようかと画策していたので、久しぶりに手を加えることにしました。
色々アップデートをしようということで調べて居るとSSH周りに更新があったようで古い認証方式が使えなくなるので、締め出されるかも的な話が書いてありました。その回避方法も書いてあったので、何も考えず設定ファイルを追記して、諸々していました。そしてSSHから締め出されてコンソールからのログインもできず無事やらかしました(苦笑)。昔に設定したときに焦ってやっていたのでコンソールを使えるようにする設定を忘れていたんですよね…しかも(あれほど安価な)スナップショットを面倒くさいと思い取らずにやった結果がこれです。
幸いなことはメインコンテンツのWordpressは定期的にバックアップが取られているので、サーバーの設定をやり直せばデータは復旧できるということですね。あとは、実はベースのプランが古いもののため、IPv6に対応していない環境で、いい加減IPv6対応のサイトにしようというのもありました。これはスナップショットを取って移動させるだけで上手くいくかは不明だったので「作り直すつもりだった」のメンタルで環境構築をやっていきます。セキュリティ周り設定もIPv4オンリーの環境からIPv6を加えるというのも、見直しという意味では良い機会です。
というわけで、自戒と備忘録兼ねたうえでWebARENA Indigoで1からWordpressサーバーを作ろうな話です。また同じことやらかしてしまったときの保険ですw
余談ですが、他のサーバーも検討しましたがWordpressがメイン用途ならやはりWebARENA Indigoがコスパ最強ですし、使い勝手が良いです。
目次
インスタンスを作成とSSH
インスタンスを作成する前に、初めてWebARENA Indigoを使う方はSSHの認証に用いる、暗号鍵を生成する必要があります。ここらへんの詳細は公式ページの方が詳しいのでそちらへどうぞ。ここでダウンロードしたPrivate_key.txtはSSHログインの際に必要になります。また、SSH接続にあたっては毎回PowerShellでやる方法もあるのですが、面倒なので、Tera Termあたりを使うと良いと思います。古いTera TermだとSSHログインができない現象があるので、最新版を入れておくと安心です。
次にWebARENA Indigoのインスタンスを作成します。どのプランがいいかはわからないと思いますが、新規で作製される方は基本的には、OSはUbuntuの一番新しいもの、プランは1GBのIPv4/v6の両方に対応したプランが安定です。WebARENA Indigoではスナップショットを取って良いプランに乗り換えることで、実質的なサーバーアップデートもできるので、初めての方や、PV数が少ない方は小さいプランからスタートして不満があるようならアップグレードで問題ないかと思います。ちなみに私のサイトはUbuntuで1GBのIPv4/IPv6対応の一番小さいものを使っています。
インスタンスを作成したらIPアドレスが割り振られるのを待ち、使えるようになったらインスタンスを起動します。
インスタンス管理のページにあるIPアドレス(IPv4:3桁以下の数字の区切りになっているやつ)をコピーしておき、TeraTermを起動してホストの欄にIPアドレスをペーストします。接続すると初回はこのホストを信用しますか的なものが出たはずですが、とりあえずOKを押して進めて、ユーザー名を入れて、認証方式の欄は「RSA/DSA/ECDSA/ED25519鍵を使う」を選び、パスワードは空白でログインします。デフォルトのユーザー名はこのページに記載がありOSで異なる仕様です。
この段階で、環境を作っていくのでレポジトリを更新して最新にしておきます。
sudo apt update
sudo apt upgrade
コンソールログインの有効化
私のようにSSHで締め出されて手が付けられなくなるという悲劇を防止するためには、WebARENA Indigo上のコンソールでログインできるようにする必要があります。
そのためにはrootユーザーにパスワードを設定します。rootじゃない方が安全ではありますが、締め出されたりしたときや障害発生時はrootならなんとかなるので、ここはrootで設定しておいた方が良いと思います。
sudo su -l
pwd
/rootとなっていればOK
passwd
//新しいパスワードを設定する
設定が終わったら、WebARENA Indigoのコントロールパネルからインスタンス管理を開き、使っているインスタンスの操作欄の選択タブからアクセスを押し、コンソールを起動します。ユーザー名は「root」でアクセスできるかを確認します。パスワードは先ほど設定したものになります。
ログインできて操作できれば問題ないです。これで、一先ず締め出されることは無くなります。また、WAN側に障害が発生してもここからならログインできるのが強味になりますね。
ここまで確認出来たら、念のため再起動をして、同様にしてコンソールログインとSSH接続に問題が発生していないかを確認します。
問題なければ、この段階でIPv6を有効化しておきます。具体的な手順は公式が一番確実なのでここをご覧ください。あとは後述のNginxの設定を正しくすればIPv4/IPv6両対応サイトが出来上がります。
最低限のセットアップで行きたいので、投稿時間に影響を及ぼしそうなシステムのタイムコードだけ変更します。
date
//UTCになっていれば作業を続行、JSTなら何もしなくてOK
sudo timedatectl set-timezone Asia/Toky
//dateコマンドでJSTになればOK
ファイアウォールの設定
ここまで設定したら、ひとまずファイアウォールを設定します。今回の説明ではufwで紹介します。
ひとまず、SSHのみを有効にします。
$ sudo ufw app status
Available applications:
OpenSSH
これを確認して、OpenSSHが選択肢にあることを確認してから、
sudo ufw allow 'OpenSSH'
sudo ufw enable
sudo wfw reload //一応再読み込み
としてufwを有効化します。SSHで接続しているが、有効化してよいかを尋ねられるのでYで回答しておきます。
このSSHセッションをキープした状態で、もう一つTeraTermのウィンドウを開いて接続できるかを確認します。
接続できれば問題ありません。また、以下のコマンドでufwの状態を確認できます。
sudo ufw status
OpenSSHか22がALLOWになっていれば問題ありません。
Nginxの設定
Apacheでもいいのですが、せっかく1から設定し直すので、軽量で早いと話題のNginxを使ってみることにします。
sudo apt install nginx
ufwでNginxの分も設定します。ファイアウォールの設定と同じ手順で確認と設定ができるので少し端折って紹介すると、
sudo ufw app status //Nginxの選択肢を確認する
sudo ufw allow 'Nginx Full' //Nginx Fullを設定する
sudo ufw reload //再読み込み
sudo ufw status //状態を確認
として設定できます。
Nginxの細かい設定は何が最適かいまいちわからないのでこのサイトを参考にしつつ設定していきます。変更が必要になったそのときに必要に応じて変更しましょう。
nano /etc/nginx/nginx.conf
http{}の先頭に以下の2行を追加。
client_max_body_size 32M;
keepalive_timeout 65;
保存したらNginxのサービスを再起動して、構文エラーなどで止まっていないかを確認する。
sudo service nginx restart
sudo service nginx status
緑の●の横にActiveとなっていれば問題ありません。
MySQLとPHPの導入
ここからはWordPressを動かす上で必要なモジュールを導入していきます。
sudo apt install mysql-server mysql-client
sudo systemctl mysql
systemctl start mysql
続いてPHPを入れます。適宜対応している最新のバージョンのものを入れましょう。aptでphpを捜索します。
apt search php
私がこの記事を書いている段階だと、php8.1が最新っぽいのでこれを入れておきます。ごく稀に一番新しいバージョンだとプラグインが動かなかったりすることがあるようなので、トラブルが起きた場合は疑ってみても良いかもしれません。
ちなみにapt install phpとするとApacheを一緒に入れてこようとするので、面倒ですが個別にインストールしていくのがおすすめです。逆にNginxでは無い場合はNginxの工程と飛ばしてapt install phpで十分ということになりますね。
話を戻してパッケージを確認したら関連するものをとりあえず入れます。何か足りないパッケージがあれば教えてください。大体これで必要な機能は使えるはずです。
sudo apt install php8.1-fpm php8.1-xml php8.1-curl php8.1-gd php8.1-mbstring php8.1-readline php8.1-bz2 php8.1-zip php8.1-opcache php8.1-mysql php8.1-imagick php8.1-intl
/etc/php/8.1/fpm/php.iniを書き換えます。
upload_max_filesize = 10M
max_execution_time=300
post_max_size = 10M
max_input_vars = 4440 //先頭の;を外して書き換える
memory_limit = 256M
Nginxのデフォルトの設定を変更しておきます。php-fpmを指定します。また、インストールしたバージョンに合わせて書き換えてください。一部分を抜粋して掲載しているので、対応する部分を変更してください。
sudo nano /etc/nginx/sites-available/default
sserver{
server_name www.example.com;
location / {
# 404のは葬る
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
}
これでやっとWordpressのインストールに進むことができます。
WordPressのインストール
WordPressのもとになるファイルをダウンロードして解凍します。適当にホームディレクトリで作業しました。
cd
wget https://wordpress.org/latest.tar.gz
tar -zxvf latest.tar.gz
rm latest.tar.gz
sudo mv wordpress /var/www/html/
sudo chown www-data.www-data /var/www/html/wordpress/* -R
確認する前にWordPress用のDBの設定を行う必要があります。ユーザー名やデータベース名は適宜読み替えてください。
sudo mysql -u root -p
CREATE DATABASE wordpress;
CREATE USER 'ユーザー名'@'localhost' IDENTIFIED BY 'パスワード';
GRANT ALL on wordpress.* TO 'ユーザー名'@'localhost';
exit
あとはhttp://[IPアドレス]/index.phpとか適当なファイルを開いたらセットアップが始まりました。readme.htmlによるとwp-admin/install.phpを開くのが正解のようです。
あとは先ほど決めたデータベースの通りに欄を埋めて設定して文句を言われずにセットアップできれば完了です。
念のため、ツール⇒サイトヘルスより、欠けているモジュールが無いかを確認して、必要であれば追加します。
ここからはドメインの設定やURLの設定ですが、ここは他のサイトの方が詳しいと思うので割愛します。
SSLへの対応
WordPressもそうですが、昨今のWebサーバーはSSLの対応が必須と言っても良いでしょう。ここではLet's Encryptを用いたSSL化について紹介します。
セットアップが終わったWordpressにて
sudo apt install certbot python3-certbot-nginx
でcertbotをインストール。次のコマンドで設定を行う。
sudo certbot --nginx -d test.example.com
途中で何個か選択肢が出てくるのえとりあえずYes or Noは Yesにしておいて、メールアドレスやドメインを入れる部分は指示通りに入れて、Errorが出ていなければOKです。
この照明書は3か月で期限切れになるので自動更新する必要がありますが、まずコマンドで更新できるかを確認します。
sudo certbot renew --dry-run
エラーが出ずssuccessと最後の方に出ていれば大丈夫です。これで更新ができる状態なので、これを定期的に実行するようにcronに登録します。
sudo crontab -u root -e
0 3 1 * * certbot renew #毎月初日の朝3時に証明書を更新
1 4 * * * reboot #毎日4時1分に再起動
動かしっぱなしも考えものなので、ひとまず毎日再起動するようにしておきました。
余談ですが、DDNSの更新も何分に1回という形でcronに登録しておけば安定して更新できますよ。別のサーバーでは私が作ったツールを使って更新していたりします。
補足ですが、certbotを設定した時点で、httpにアクセスすると、httpsの形にリダイレクトされるように設定されます。毎回リダイレクトするのも気になるので、WordPress上からはhttps://~をデフォルトとして設定しておくと良いでしょう。また、必要であれば、wwwの有無のリダイレクトも設定しましょう。詳細は以下の記事に掲載しています。
まとめ
WebARENA Indigoで1から設定し、Nginxを用いてWordPressサーバーを設置しました。コンソールからログインをできるようにすることで、SSHからの締め出し対策を講じて今後の同様のトラブルの再発防止に取り組みつつ、Nginxによる高速化、IPv6への対応とアップグレードを行うことができました。
今度は通信周りの設定をいじるときはスナップショットを作ってやろうと思いました。びっくりするくらい安価なのになぜ利用しなかったのかと後悔しています。今後は締め出しされることもないはずなのでお世話になることは無いかもしれませんが、やはり保険をかけてスナップショットを作るでしょう。あっさりと書いていますが、やってしまった感が強いので結構反省はしていますね…皆様は通信周りをいじるときはスナップショットを取りましょうね。
総合的にはそこまで時間もかからなかったですし、アップグレードもできたしで満足です。
以上となります。お読みいただきありがとうございました。