やりたいこと
ブログ更新するたびに手動でデプロイするのはめんどうなので、 git push
時、自動でAstroのプロジェクトをビルドしたい。
方針
だいたい3つぐらい思いついた。
- 手元でビルドして、FTPでアップロード。
- アクセスしたら
git pull && npm run build
してくれるphpを設置して、Github Webhooksで叩く。 - 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をインストールする。
これでめでたくすべてのビルドが通るはず。お疲れ様でした!