2023/1/29

やりたいこと

ブログ更新するたびに手動でデプロイするのはめんどうなので、 git push 時、自動でAstroのプロジェクトをビルドしたい。

方針

だいたい3つぐらい思いついた。

  1. 手元でビルドして、FTPでアップロード。
  2. アクセスしたら git pull && npm run build してくれるphpを設置して、Github Webhooksで叩く。
  3. Github Actionsを設定する。

手間的にはどれも変わんないかなーと思ったけど、なんとなく、せっかくVPSなんだから、サーバー側でpullしてビルドするのが綺麗かなと思って2.を選択したが、結局これが一番大変だった。なんとかできたので簡単に記録に残しておく。以下、手順。

手順

まず、アクセスしたらビルドしてくれるphpファイルを作って設置する。↓は最低限だが、実際はgithub actionsで設定できるsecret keyを照合して……などとした方が良い。

<?php 
exec("sh ./deploy.sh 2>&1", $str);
var_dump($str);
?>

実際の作業内容はdeploy.shに書く。

で、これを叩けばOK……ではない。phpを実行するのはapacheユーザなので、gitやnpmが使えない。

これを解決するには、apacheユーザーにgitやnpmを使えるようにするか、phpをユーザーアカウントで動かすか、どっちか。apacheユーザはシェルからログインすることを想定されていないっぽいので、後者にする。

phpをユーザーアカウントで動かすには、まずphpをcgiで動かす必要がある。詳しい方法は割愛するが、apacheのconfigファイルを弄って、 php-cgi を実行する必要がある。うまくいかない場合は etc/httpd/logs にログが出る。phpinfoを出力するphpを作って、FastCGIで実行されるようになるまで頑張る。

phpがcgiで動くようになったら、suexec の設定をする。apacheのconfigとフォルダの権限なんかをいじるとできる。ログは /var/log/secure にあるので、動かないときは参照する。

最後に、suexecは環境変数が制限されているので、nvmのnodeが使えない。普通にnodejsをインストールする。

これでめでたくすべてのビルドが通るはず。お疲れ様でした!

  • 日記
  • astro