自身の管理するサーバーにおいて、これまでWordpressを含む複数のWebサイトをレンタルサーバー(ロリポップ)で稼働し、RailsアプリをHeroku、ドメインをYahooドメイン&ムームードメインの2箇所で取得、と謎の分散構成になっており、コストやリソースの無駄が生じていた。
この際、1つのプラットフォームにまとめてしまいたいと思い、自由度の高いVPS(ConoHa)に移行することにした。
目次
移行すべき理由
結論から言うと、レンタルサーバーからVPSに移行することで、月当たりのランニングコストを半分以下に節約できた。また結果的に、インフラ〜ミドルウェアを中心とした知識・経験が増え、アプリケーション開発における各種設定に対する理解が深まった。
プログラミングやアプリ開発を学習中の初心者エンジニアは、ぜひ自身のVPS(や物理サーバー)を購入して運用してみることをおすすめする。
メリットとしては、当然の内容だが、以下のような点がある。
- リソースを集約させることで、ランニングコストを削減
- レンタルサーバーでは触れられない、インフラ〜ミドルウェアを中心とした知識・経験が増える
- システム構成の自由度が高い
- 無料でSSL通信(HTTPS)を導入可能
- メールサーバーの実装により、メールアドレス作り放題
VPSへの移行の流れ
以下のようなシステム構成を採用したが、大まかな手順と特に参考になったサイトのみを記載する。
詳しい手順やコマンド等については、リンク先を参照されたい。
<システム構成概要>
・OS: Ubuntu 20.04
・ドメインおよびVPS: ConoHa VPS
・Webサーバー: Nginx
・DBサーバー: MySQL
・メールサーバー : PostFix, Dovecot
・CMS: Wordpress
1. VPSの購入・立ち上げ
VPSホストについては、比較サイトを参考に、小規模・低コストから始めて将来のスケールアップに備えられる、ConoHa VPSを選択した。OSは、自身の開発経験からUbuntuを選択した。
2. OS初期設定
初心者は特にセキュリティホールを作らないように注意したい。
https://qiita.com/kotarella1110/items/f638822d64a43824dfa4
3. WordPressの導入・環境設定
https://tomato-develop.com/ubuntu-20-04-nginx-mariadb-wordpress-setup/
https://qiita.com/1104crf14/items/f260595da3767ade3a73
https://www.linuxbabe.com/ubuntu/install-wordpress-ubuntu-20-04-nginx-mariadb-php7-4-lemp
wordpress導入時によくミスるwordpresアドレス設定の間違いでログインできなくなったため、SQLを直接叩いて修正。
https://qiita.com/pugiemonn/items/1852fb246ca141a2256a
4. DNS設定・移管
ConoHa VPSのDNSを設定後に、ネームサーバー設定を変更することで、シームレスにIPアドレスを移行できた。さらにドメインまでConoHaで管理したほうが安かったため、ドメイン移管も実施。
5. SSL通信の導入
これまでレンタルサーバー(Lolipop)の格安プランでは、SSL通信が利用できず、Webサイトの信頼性だけでなく検索順位まで落としていた。VPSに移行することで、Let’s Encryptを使ってSSL通信を導入できるメリットがある。
https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04-ja
https://qiita.com/akubi0w1/items/c436343f544d13e3be1d
6. Static Webサイトの移行(Nginxバーチャルホスト設定)
Nginxのバーチャルホストの仕組みを利用するが設定はさほどの難しくない。
7. メールサーバー(PostFix, Dovecot)の導入
ここが一番大変であった。多くの人がメールサーバー環境構築に関する解説を書いているが、設定がマチマチであり、中にはセキュリティホールを残すものもある。この英語のチュートリアル(Part1, Part2)が最も信頼でき、参考になった。
私は構成理解のため、最初にSMTP, IMAP, POP3による認証環境を作り、その後SMTPs、IMAPsのみの認証への移行にチャレンジしたが、結果的に上記のPart1, Part2に従うだけで、最終的に欲しかった環境は整う。
DoveCotのテストは、色々見たが結局DoveCot開発者サイトが一番わかりやすかった。
https://wiki2.dovecot.org/TestInstallation
以下のようなサイトも参考にさせて頂いたので、自身の備忘録として掲載。
https://server-setting.info/debian/dovecot-tls.html
https://www.mk-mode.com/blog/2015/06/13/debian-8-dovecot-installation/#
https://jsapachehtml.hatenablog.com/entry/2014/01/23/230029
https://www.usagi1975.com/06feb171934/
https://okamurax.com/?p=3899
https://qiita.com/ekzemplaro/items/369465cbf820a53e6541
https://www.server-world.info/query?os=Ubuntu_20.04&p=mail&f=1
http://www.postfix-jp.info/trans-2.3/jhtml/VIRTUAL_README.html
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-on-ubuntu-20-04-ja
https://www.server-memo.net/server-setting/postfix/postfix-install.html
8. PostFixAdminの導入とバーチャルメールボックス化
複数ドメインのメールアドレスを利用するため、7のチュートリアルの続きに従い、PostFixAdminの導入とバーチャルメールボックスの設定を行った。(次のPart3とMultiple Mail Domain)
注意すべき点として、PostFixAdminをインストールすると、一度MySQLがアンインストールされてしまう。データは残るため再インストールすれば問題ないが、PostFixAdmin用のデータベース作成(sudo dpkg-reconfigure postfixadmin)において、以下のエラーが出てしまう。
Your password does not satisfy the current policy requirements.
これは、パスワードポリシーにマッチしていない時だけでなく、再インストールによりMySQLのサービスが複数立ち上がっていること、sudo mysql_secure_installation によりauth_socketが設定されていること、が関係していたため、以下のトラブルシュートを参考にした。
https://stackoverflow.com/questions/43094726/your-password-does-not-satisfy-the-current-policy-requirements
https://stackoverflow.com/questions/61952490/mysql-root-auth-socket-to-empty-password
その他にも、バーチャルメールボックス化する上で参考になったサイトが以下。
https://blog.d-shimizu.io/article/215
https://web-creators-hub.com/linux/postfix3/
https://www.rough-and-cheap.jp/linux/ubuntu18-04_postfix_dovecot/#i
https://www.server-memo.net/server-setting/postfix/postfix-virtualmailbox.html
9. Railsアプリの移行
実施中。