WordPressからHugoへ移行してみたよ
この記事の対象 dockerがある程度使える人(私は全然使えないけど) GNU/Linuxへの知識がある人 今まではWordpressを使っていたのをHugoに移行してみた。 移行した理由 WordpressはWebからグラフィカルに記事を書けるんだけど、普段Neovimで文字を打ってる人からするととても使い辛かった。管理も面倒臭いしね。 だからMarkdownで投稿を書けたら良いなって思ってHugoに移行してみたって感じです。 どうやって移行したの? Gitサーバー(forgejo)を立ててあったので、サイトを上げるリポジトリを作って、プッシュしたらWebhookでdocker内に作ったhugoの環境にプッシュを通知するようにした。通知されたらシェルスクリプトを実行するプログラムをpythonで書いてみた。 手順 forgejoでwebhookを設定する サーバー内にforgejoのdockerとhugoのdockerがあって、forgejo側でサイトのリポジトリにプッシュされたらhugoのdockerに通知を送るようにしたいんだけど、forgejoはデフォルトでプライベートIPへのアクセスを禁止している。だから解除する必要があるよ forgejo/gitea/conf/app.iniにこれを追加 [webhook] ALLOWED_HOST_LIST=external,loopback,192.168.0.*(サーバーのIP) ALLOW_LOCAL_NETWORKS = true これを追加した後、forgejoを再起動するとサーバーのIPにwebhookを送ることができる。そして、リポジトリの設定からwebhook→webhookを追加→forgejoをリポジトリと組み合せる→ターゲットURLにサーバーのIPを入力 これでforgejo側は完了。 私の書いたコードを使うならポートは9999で。 docker側の設定 dockerfile FROM ubuntu:latest WORKDIR /app COPY ./scripts /app RUN apt update && apt -y install hugo nginx git ssh neovim rsync python3 CMD ["bash", "-c", "nginx & python3 webhook.py"] ./scriptsの中身は、push.shとwebhook.pyだけです。 このpythonのプログラムは、9999ポートにHTTPリクエストを送ると勝手にpush.shを実行してくれるよ (本当はpythonじゃなくCで書きたかったけど、dockerのコンテナ内でビルドするのが面倒だったのとpythonの練習でpythonにした) webhook.py import socket import subprocess listening = socket.socket(socket.AF_INET, socket.SOCK_STREAM) listening.bind(('0.0.0.0', 9999)) listening.listen(1) while 1: connected, address = listening.accept() subprocess.run(['bash', 'push.sh']) connected.sendall(b'HTTP/1.1 200 OK\r\nContent-Length: 0\r\nConnection: close\r\n\r\n') connected.close() 9999番ポートに大量のアクセスが来たらぶっ壊れるくらい弱いし9999ポートに来たら問答無用で更新しちゃうけど許してね!(そもそも家のLANに怪しい奴を入れたり怪しいソフトを動かしたりはやめろ!) ...