ConoHa VPS の障害に我慢の限界
かれこれ 10 年以上は ConoHa VPS を使用してきたのだが、最近 VPS が異常に重くて大したことがないブログシステムしか動かしていないはずなのに全然応答が返ってこない。 VPS を再起動しても以前はすぐサーバ起動したのに今は 10 分くらい待たないと再起動できない。 しかもこれが 1 度や 2 度ではないためもう限界だろう、と移転先を探した。 また VPS でも良かったのだが VPS を使い始めた当初は Git サーバやメールサーバなども運用していたので VPS 一択だったのだが今はこのブログ+αのシステムしか動かしていない (メールは Gmail で事足りるし Git は GitHub に移行済) ので正直レンタルサーバでも十分だろうと思った。 レンタルサーバだと有名なのはさくらインターネットとロリポップだが、ロリポップは安い方のプランだと SSH 接続できないので 500 円/月で SSH 接続できるスタンダードプランが選択できて信頼性も高いさくらインターネットの方にした。 今 VPS で動かしている Laravel が動くかどうかが心配だったがネット上にもそういう運用例がいくつか載っていたのでまあいけるだろう、と踏み切った。 結果ちゃんと動いて無事移転でき、処理速度が劇的に速くなった (というより ConoHa の激遅から解放された) ので満足だ。 ただやはりレンタルサーバなので VPS と違って制限があるのでいくつか注意点があったのでここに書き残しておく。
ファイル送受信は SFTP で良い
レンタルサーバというと、いにしえの個人ホームページで CGI を配置して、というのを思い出してしまう。 そう考えると FTP といえば FFFTP か、懐かしいな、と思ってしまうが普通に SFTP でできたので WinSCP でやり取りすることができた。 ちなみに私は IntelliJ IDEA 使いで IntelliJ は IDE 上で SFTP でデプロイできるのでそれを利用した。
Composer
Laravel をインストールするために Composer が必要だがレンタルサーバ上にインストールされていない。
だがこれは composer.phar をダウンロードして実行 (php composer.phar) する形式で普通に使えたので問題なかった。https://getcomposer.org/download/ からダウンロードできる。
Node.js
Laravel の JavaScript や Sass をトランスパイルするために Node.js が必要だがこれもレンタルサーバにインストールされていない。
しかしこちらも工夫すればインストールできるようだが結構面倒 (レンタルサーバ上で長時間処理すると kill されてしまうため制限して時間をかける必要があるらしい) なのでローカル環境で npm run build してできた assets をそのままデプロイしたら動いたので良しとした。
凝ったことをやろうとしたらやはりサーバ側に Node.js を入れたほうが良いだろうが、それなら最初から VPS にしておいたほうがいい気がする。
料金だって言うほど変わらない。
public/ 問題
Laravel は public/index.php がフロントなので public/ を DocumentRoot に設定する必要がある。
さくらのレンタルサーバにも Web 公開フォルダーという設定でそれを行うことができるが、残念ながら kojion.sakura.ne.jp といったような初期ドメインでは何故かそれが使用できず、独自ドメインを設定しないと指定することができない。
なので私はお名前.com のほうでドメイン管理していたのでそちらの DNS 設定でさくらのレンタルサーバ側に向けてから独自ドメインの登録を行った。
そして SSL だが Let's Encrypt が使用できた上にボタンをポチポチやるだけで設定できたのでとても楽だった。
VPS だとコマンド何回か叩く必要がある上に 3 ヶ月に 1 回 cron で再実行する必要があるので若干手間だった。
ともかくそういうプロセスを踏んだら何とか設定できた。
php.ini
例えばこのブログでは大きめの画像ファイルをアップロードできるようにしている。
通常の php.ini だとアップロードできるファイルサイズが控えめでこれを拡張するには設定変更しなければならないが、これもコントロールパネルから upload_max_filesize = 10M を追記することで設定できた。
初期ドメインでアクセスできてしまう問題
このように独自ドメインの設定が完了しても初期ドメイン kojion.sakura.ne.jp でアクセスできてしまう。
そうすると先述のように初期ドメインは public/ の上の階層を見るようになっていてしかも設定変更できないため、放っておくと設定ファイルやら何やらが丸見えになってしまう。
しかも何故かコントロールパネルから初期ドメインを無効にできない。
しかし以下のように .htaccess を配置することで初期ドメインへのアクセスを拒否することができた:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?[^.]+\.sakura\.ne\.jp$ [NC]
RewriteRule .* https://kojion.com%{REQUEST_URI} [R=301,L]