自宅サーバを さくらVPS(石狩リージョン) + CentOS 8 Stream に移行する

さくらインターネットさんの新しいコントロールパネルの公開記念で貰っていた3ヶ月無料クーポンがまさかの期限切れで意気消沈していたのですが、何とか気持ちを取り戻して新しいVPSの環境を作成してみました。2020/12/31 までかと思っていたら、2020/12/30で切れるとは予想外でしたね…。(年内は行けるものかとばかり…)

このサイトも載っている現在使用しているVPSは前回のこの記事の時にセットアップしたものです。 振り返ってみると6年ぶりのリプレイスのようです。感慨深い。

さくらのVPS 新プラン(v4) メモリ1G、SSD 30Gに乗り換えました \| Blog \| riatw.me

今回のリプレイスの目的

  • CentOS Stream 8を試したい
  • 新しいパッケージマネージャ(dfn)に慣れたい
  • 既存環境が色々なことを試している中で散らかってきたので整理したい
  • Let's Encryptの更新に毎回コケるので環境を見直したい
  • ドメインごとのドキュメントルートの位置を見直したい

何故、CentOS Linux 8 ではなく、CentOS Stream 8 なのか

CentOS Linux 8 のサポートが今年一杯で終了することと、 ローリングリリース(随時アップデート)のLinux OSの環境に慣れたかったことが理由です。

実務でもCentOSにはとてもお世話になっているのでCentOS Linux 8のサポートが前倒しで 終了する発表には正直かなり驚きました。

初めは何てことを…と思いましたが、ローリングリリースは今どきの時代にはあっている 気もしていて、Streamで揉むことでRHELの品質が上がるならそれもありなのかな…と 思い出してきました。

確実性が必要な業務ではしばらくは CentOS 7 と RHEL 8 が使えるので直近では困らないのですが Streamって実際のところどうなの…?という疑問を解決するのが今回のリプレイスの 大きな目的だったりします。

実務では怖くて試せないことを色々と試せるのが個人サーバの醍醐味だと思っています。

CentOS Streamの位置づけに関してはこのブログがわかりやすかったです。

VPSは引き続き「さくらVPS」を採用

一瞬、Amazon Lightsail\| AWS もいいな…とか、GCPの無料枠にも惹かれたのですが、 長年お世話になっているさくらVPSにしました。

リージョンは少し迷ったのですが、こんな理由で石狩のデータセンターにしました。 我ながら馬鹿っぽくて良いです。

  • 土地柄的に寒くて冷えそう
  • 石狩のデータセンターに憧れがある
  • 最新のハードは石狩に導入されることが多いらしい(噂)

レイテンシーが気になってはいたのですが、今のところとても快適です。 Twitterで当たり外れがあることを教えていただいたので、このサイトを 見ながらCPUのモデルチェックをしました。

良い情報を教えてもらえて感謝です。
一発で良いものを引き当てたのでそのまま続行することとなりました。

VPSのCPU当たり外れ判定用参考資料

構築要件

ミドルウェア

基本的にミドルウェアは dnf でインストール出来るものを使用する。

  • Apache
  • PHP
  • MySQL
  • Perl
  • Postfix

個別要件

  • Craft CMS 3 の動作環境を構築する
  • Movable Type 7 の動作環境を構築する
  • Let's Encryptを導入する(自動アップデート設定込み)
  • Document Root の位置を見直す
    • /var/www/vhosts/xxxxx/htdocs
  • ドメインごとにログの出力を見直す
    • /var/www/vhosts/xxxxx/logs
  • Google Driveへのデータのバックアップを実施する
  • さくらVPSのパケットフィルタリングを使い、Firewalledは止める
  • パッケージは自動でアップデートできるようにする

設定

基本的な設定は前のサーバのものを踏襲。 設定ファイルなどは流用する。

CentOS Linux 8 からCentOS Stream 8に移行

さくらVPSの初期イメージにStreamが無かったのでこちらのサイトを参考に移行しました。

CentOS Linux 8 から CentOS Stream 8 へ移行する - Qiita

ユーザ作成、root宛のメールの転送設定

CentOS7初期設定 - CentOSで自宅サーバー構築

sshdのポート変更、rootでのログインを禁止

新しいサーバ起動後に最低限行うべき SSH 設定 - Qiita

自動アップデート設定

CentOS 8 で DNF の自動アップデートを設定する \| 株式会社オルタ

ミドルウェアをインストール

Perlは標準バージョンを利用するのでそのままでほかをインストール。

  • dnf install wget
  • dnf install php
  • dnf install mysql-server
  • dnf install postfix
  • dnf install epel-release
  • dnf install php-mysqlnd
  • dnf install openssl mod_ssl
  • dnf install php-mbstring php-json php-gd php-xml php-pecl-zip
  • dnf -y install ImageMagick ImageMagick-perl perl-Time-HiRes perl-Archive-Zip perl-Mail-Sendmail perl-Digest-SHA perl-Digest-MD5 perl-FCGI mod_fcgid perl-open perl-DBD-MySQL yum install "perl(HTML::Entities)"
  • dnf install -y mailx

MySQLの設定

MySQL8.0を Linux(CentOS 8)にインストール&設定する手順 \| 「ポテパンスタイル」

データ移設、バーチャルホスト設定、cron設定

  • /root/*
  • /home/(作業ユーザ)/*
  • /var/www
  • /etc/httpd/conf.d/my_config.conf
  • /etc/httpd/conf.d/virtualhost/*.conf
  • mysqldump
  • /etc/crontab

Let's Encrypt設定

CentOS8に無料SSL「Let’s Encrypt」を設定する \| 株式会社オルタ

php-cgiからphp-fpmに変更

CentOS 8 のApacheからMPMの初期値がpreforkからeventに変わっており、 それに伴ってスレッドセーフではない mod_php が使えなくなり、標準で php-fpm で PHPが実行されるように変更されたようです。

php-fpmとはPHPの処理を専門で受け持つプロセスで、Apache側からは拡張子 .php の アクセスはそのまま php-fpm に引き渡されます。内部では mod_proxy が使われており ソケット経由でやり取りがされているのでPSGI用のサーバを立てるのと似ているような気がします。

まず、MPMとは?php-fpmとは?と分からないことが多すぎたので少し調べてみました。 このサイトが分かりやすかったです。

Apache MPMとはなんぞやという話 - 備忘録の裏のチラシ

Apache2.4 を event MPM + FastCGI に変更して省メモリする - 備忘録の裏のチラシ

このサーバは元々コンテンツの所有者でプログラムが実装されるように拘っていて、 そのため元々 mod_php ではなく php-cgi + mod_fcgid を使ってFastCGIで動作はしていました。

この構成でも動作は問題なくしたので続投でも良かったのですが、 php-fpm に変更すれば動作速度が10倍になる、という記事を見かけて 今回を期に php-fpm を使った構成に変更することにしました。

参考サイトを見ながら進めて結果問題なく構築出来たのですが、 security.limit_extensionsになかなか気が付かず、ハマっていました。 1個めのサイトで救われました…。(感謝)

Debian10でApache2.4+PHP-fpmを動かす - tohokuaikiのチラシの裏

CentOS8 + Apache2.4.37 + php7.2(php-fpm) で HTML ファイルの中で PHP を実行する - Qiita

php-fpmでVirtualHostごとにuid/gidを変える - とみぞーノート

Googleドライブへのバックアップ設定

サーバの重要なデータをGoogle Driveにバックアップする。 前回までは gdrive を使っていたものの開発が終了していたようなので、 rclone に切り替えました。

rcloneでGoogle Driveへのリモートバックアップを自動化する【rsyncみたいなやつ】 \| けーのブログ

コマンドラインからGoogleドライブにファイルをアップする - 麦芽を支える技術

自動起動設定

systemctl enable httpd systemctl enable mysqld systemctl enable postfix

今後やっていくこと

  • ドキュメントルート以下のファイル整理
  • Google Drive Backupの動作確認
  • root宛のメールの疎通確認(試用期間終了後)
  • MySQL設定のチューニング
  • Apache設定の見直し(基本前回のままを踏襲したので)
  • セキュリティ設定の見直し
  • Let's Encryptの自動更新の動作確認