開発サーバー構築①(UbuntuとWEBサーバー)
ホラーゲーム・サーチはさくらのVPSでサーバーを借りて公開しています。今回開発を再始動するにあたり、新しくサーバーを1台追加で借りました。このサーバーを「開発サーバー」と呼ぶことにしました。本体が稼働しているサーバーを「本番サーバー」と呼んでいます。
あえて毎年7,000円近くのお金をかけてまで追加のサーバーを借りた理由はまた別の記事で書こうと思いますが、テストの自動化が主な目的です。せっかくなのでこのブログも開発サーバーの方で立ち上げてみました。
そこでさくらのVPSで開発サーバーの構築をどのように行ったかを数回に分けて紹介します。今回はサーバーの契約から、ApacheによるWEBサーバーの構築までを紹介します。
※実際には間にPHPのインストールなどもやっていたりと順番が前後しています。
サーバーを追加
既にさくらのVPS会員ではあるので、コントロールパネルからサーバー追加を行いました。
サーバー選択
本番が石狩 第1ゾーンにあるので開発も同じところにしました。プランは一番安い512。ちなみに本番は1Gです。ストレージは初回500円しかかからないならいいかと50GBに増設してみました。
サーバー設定
名前と説明は適当に設定しました。インストールするOSを Ubuntuの 18.04に設定し、パスワードを設定、スタートアップスクリプトは利用せず、パケットフィルタもそのままにしました。公開鍵はPuTTYgenでキーペアを作成してあらかじめ登録しておいた公開鍵を選択して次に進みました。公開鍵の作り方はついては開発用サーバーを立てた話②に記載しています。
あとは支払情報などを設定して完了。数分待てばサーバ一覧に追加されました。
Ubuntu 20.04にアップデート
Ubuntu は 20.04 を使いたいのです。でも、2020年11月3日時点ではUbuntu 20.04のOSインストールはカスタムOSかISOイメージからのインストールしかできませんでした。これでインストールするとネットワーク設定とかを自分でやらないといけないのですが、その辺りは詳しくないので18.04をインストールして20.04にアップデートすることにしました。
サーバーが追加されたので、SSHで繋ぐぞーとTeraTermを立ち上げてみたところ繋がらない…そりゃそうです。電源入れてないんだもん…
というわけで、サーバ一覧で新しいサーバーの電源をONにして、バージョンアップ作業はVNCコンソールでやることにしました。VNCコンソールはサーバー一覧でサーバーを選択し、次の画面で上のメニューに[>_コンソール]というボタンが出てくるのでそこから起動します。
サーバーへログイン
ユーザー名:ubuntu、パスワード:さっきの画面で設定したやつ、でログインします。まずは18.04自体を最新に更新しました。
sudo apt update
sudo apt upgrade
これで更新完了。続いてOSのアップグレードを実行しました。
sudo do-release-upgrade
最初、「めっちゃ時間かかるけどいい?」みたいなことを聞かれますがOK!
しばらく画面を見ていると「アップデートの際に再起動が必要かどうか聞かなくていい?」みたいなことを聞かれた気がしたので、Yesを選択しアップデートスタート。
途中3回ほど、アップデートによって設定ファイルが上書きされる旨のメッセージが出ましたが、いずれも差分を見ると更新しなくてもよさそうだったので、現状維持を選択しました。
3ファイルの内訳を書いておくと、
- ntp.conf
- crontab
- sshd_config
でした。ntp.confとsshd_configはさくらの方で初期設定されているやつで、そのまま残してても問題なさそうなので現状維持、crontabは特になにも設定していないので現状維持としました。
しばらく待っていると「40個のパッケージが削除されるけどいい?」みたいなことを聞かれたのですが、dで内容確認しようとしたら間違えて何も入力せずにENTERを押してしまい確認できないまま次へ行ってしまいました…
ま、いっか。で、最後に「再起動するかい?」みたいなことを聞かれるので、yで再起動してバージョンアップ完了しました。
Apache2.4インストール
無事OSのバージョンアップもできたところで、WEBサーバーを構築していきました。まずはAapcheのインストール。
sudo apt install apache2
これでApacheが入りました。まだ起動してませんし、ポートが空いていないので確認できません。
いずれmod_rewriteが必要となるので有効化しておきました。セキュリティ設定を行う場合に、WordPressでも必要となります。
sudo a2enmod rewrite
基本的にmod_rewriteは使うので、デフォルト設定の方で有効にしちゃいました。
$ sudo vi /etc/apache2/apache2.conf
<Directory /var/www/>のところの、AllowOverrideをAllにしときました。
そしてサーバー起動時にApacheが自動で立ち上がるように設定しつつ、Apacheを起動しました。
sudo systemctl enable apache2
sudo systemctl start apache2
ポート開放
まだポートが空いてないのでアクセスしても何も見えません。
VPSのコントロールパネルで開発サーバーのパケットフィルタ設定から80と443を開放します。フィルタの用途で「Web」を選択すると2つともあけてくれました。
これで外部から見られるようになったので、「http://サーバーのIPアドレス」にアクセスして初期ページが見られることを確認しました。
ドメイン取得
horrorgame.netのドメインもさくらのドメインで取得済みです。サブドメインのdev.horrorgame.netを追加して、開発サーバーのIPアドレスと紐づけておきました。これで「http://dev.horrorgame.net」にアクセスすると、開発サーバーのWEBサイトが見られるようになりました。
Let’s Encrypt
httpsで接続できるようにするため、dev.horrorgame.net用の証明書をLet’s Encryptで取得しました。本番の時はGitから落としてごにょごにょやった記憶があるのですが、Sever Worldさんの記事によるとaptで必要なアプリケーションをインストールできるらしいので今回はこちらのやりかたでやりました。
certbotをインストールします。
sudo apt -y install certbot
証明書を取得します。
sudo certbot certonly --webroot -w /var/www/html -d dev.horrorgame.net
メールアドレスの入力を求められるので設定します。3か月毎に更新しないといけないのですが、ここで登録したメールアドレスに事前に連絡がきます。
完了すると、「/etc/letsencrypt/live/dev.horrorgame.net/」にファイルがいくつか作成されます。
Apacheの設定
※ここについては実際の設定の時とは順番が前後しており、内容もちょっと違います。この段階ならこういう風にすれば動くだろうという内容になっています。
/etc/apache2/sites-available に以下の内容のファイルを作成しました。ファイル名は「dev.conf」としています。
NameVirtualHost dev.horrorgame.net
<IfModule mod_ssl.c>
<VirtualHost *:80>
ServerName dev.horrorgame.net:80
RewriteEngine on
RewriteCond %{HTTP_HOST} ^dev.horrorgame\.net
RewriteRule ^/(.*)$ https://dev.horrorgame.net/$1 [R=301,L]
</VirtualHost>
<VirtualHost _default_:443>
ServerName dev.horrorgame.net:443
ServerAdmin webmaster@horrorgame.net
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/dev.horrorgame.net/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/dev.horrorgame.net/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/dev.horrorgame.net/chain.pem
CustomLog /var/log/apache2/dev_access.log common
ErrorLog /var/log/apache2/dev_error.log
AddDefaultCharset UTF-8
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
そして、以下のコマンドを実行して、設定を有効にします。
sudo a2ensite dev
Apacheを再起動します。(設定のリロードでも大丈夫かも)
sudo systemctl restart apache
これで「https://dev.horrorgame.net」でサイトにアクセスできるようになりました。ついでに「http://~」でアクセスされた時に自動で「https://~」に繋ぎ変えさせる設定も入れています。
WEBサーバーが立ち上がりました
まだセキュリティの設定とかログのローテーション設定とかしないといけないことはあるのですが、WEBサイトが見られる状態にはなったので今回はここまでにします。