レンタルサーバーからVPSへの移行

自身の管理するサーバーにおいて、これまで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のバーチャルホストの仕組みを利用するが設定はさほどの難しくない。

https://self-development.info/ubuntu%E3%81%ABnginx%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6web%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E6%A7%8B%E7%AF%89%E3%80%90%E3%83%9E%E3%83%AB%E3%83%81/

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アプリの移行

実施中。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA