self-hostedservertips
Giteaは最近Actionが使えるようになった。Dockerで別にランナーマシンを立ち上げる必要があるほか、GitHub Actionsと比べると、Concurrencyなどちゃんと効かなかったり色々まだ機能が足りてない所はある。
ただ、公開されてるGithubs Actionはそのままuseできるのが強い。actions/cache@v3
の代わりにhttps://github.com/actions/cache@v3
のようにURLで指定できる。よく使うアクションはgitea側にもミラーされていることもあるが、なんか放置されてるやつも多々あるので注意。
Pagesの機能がないため、別途サーバーを立ち上げてrsyncで同期するくらいしか方法がない。そこそこ設定は面倒くさいが、nginxよりさらに簡易的に動かせるgo製のWebサーバーCaddyを使ってなんとかすることにした。
下準備
鍵をssh-keygenで作っておく。(秘密鍵をGitea側のSecretsに置くので新しく生成しないとだめ)
ファイル名はrsync_webserver
とrsync_webserver.pub
とかにしておく
Caddyサーバー側の構成
tomoyanonymous/Caddy_rsync_webserver - Caddy_rsync_webserver - Tomoya Matsuura Gitea
フォルダ構成
rsyncでファイルを受け取る用のDockerイメージを作る
パーミッションは必ず~/.ssh/authorized_keys
が600、~/.ssh
が700でないとssh接続できないので注意
docker-compose.yml
でCaddyとの連携設定。共通のボリュームでhtmlを管理するが、今回はそのフォルダをdocs
という名前で作った。Caddyのイメージはそのまま使う。
Caddyファイルは最小限。
この辺参考。Serving static files using Caddy。Quartzでは/記事名.html
にexample.com/記事名
でアクセスする必要があるのでtry_files
の行が必要。
docs
内に適当なindex.html
を置いてdocker-compose build
、docker-compose up -d
で立ち上げ、DockerホストのIP:8080
で繋ぐとアクセスできる。
これをそのままCloudflare Tunnelで公開している。
Gitea側の設定
Action RunnerつきでGiteaを立ち上げるところまでは省略。
ほぼこのサイトの例を借りる。HugoじゃなくQuartzなので色々違うけど
CI/CD pipeline for a Hugo-built static page using Gitea Actions on a selfhosted Gitea instance · Julius Röttgermann | DevOps related Blog and Tutorials
リポジトリのSettings → Actions → SecretsにPRIVATE_KEY
という名前でrsync_webserver
の中身を貼り付ける。
同じくVariablesの方には以下を設定
- WEBSERVER_HOST (Caddyが立ち上がっているサーバーのIP)
- WEBSERVER_PORT (Caddyが立ち上がっているサーバーのSSH用ポート、上の例では25222)
- WEBSERVER_USER :root(これあんまり良くないのかな)
で、リポジトリに/.gitea/workflows/ci.yaml
を作る。Gitea Actionsのubuntu-latest
ラベルのランナーはデフォルトでDebianベースのnode:16-bullseye
のDockerイメージのエイリアスで(これまじでややこしい)、QuartzはNode18以降でないと動かない。またGoも入ってないので入れる。
できてますねえ!
Branch Previewが手軽にできればいいんだけどなあ