<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Hikaのホームページ</title>
    <link>https://h1ka.net/</link>
    <description>Recent content on Hikaのホームページ</description>
    <generator>Hugo</generator>
    <language>ja</language>
    <lastBuildDate>Mon, 05 Oct 2026 00:00:00 +0900</lastBuildDate>
    <atom:link href="https://h1ka.net/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>WordPressからHugoへ移行してみたよ</title>
      <link>https://h1ka.net/post/2026-10-5/</link>
      <pubDate>Mon, 05 Oct 2026 00:00:00 +0900</pubDate>
      <guid>https://h1ka.net/post/2026-10-5/</guid>
      <description>&lt;h4 id=&#34;この記事の対象&#34;&gt;この記事の対象&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;dockerがある程度使える人(私は全然使えないけど)&lt;/li&gt;
&lt;li&gt;GNU/Linuxへの知識がある人&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;今まではWordpressを使っていたのをHugoに移行してみた。&lt;/p&gt;
&lt;h2 id=&#34;移行した理由&#34;&gt;移行した理由&lt;/h2&gt;
&lt;p&gt;WordpressはWebからグラフィカルに記事を書けるんだけど、普段Neovimで文字を打ってる人からするととても使い辛かった。管理も面倒臭いしね。
だからMarkdownで投稿を書けたら良いなって思ってHugoに移行してみたって感じです。&lt;/p&gt;
&lt;h2 id=&#34;どうやって移行したの&#34;&gt;どうやって移行したの？&lt;/h2&gt;
&lt;p&gt;Gitサーバー(forgejo)を立ててあったので、サイトを上げるリポジトリを作って、プッシュしたらWebhookでdocker内に作ったhugoの環境にプッシュを通知するようにした。通知されたらシェルスクリプトを実行するプログラムをpythonで書いてみた。&lt;/p&gt;
&lt;h2 id=&#34;手順&#34;&gt;手順&lt;/h2&gt;
&lt;h3 id=&#34;forgejoでwebhookを設定する&#34;&gt;forgejoでwebhookを設定する&lt;/h3&gt;
&lt;p&gt;サーバー内にforgejoのdockerとhugoのdockerがあって、forgejo側でサイトのリポジトリにプッシュされたらhugoのdockerに通知を送るようにしたいんだけど、forgejoはデフォルトでプライベートIPへのアクセスを禁止している。だから解除する必要があるよ&lt;/p&gt;
&lt;p&gt;forgejo/gitea/conf/app.iniにこれを追加&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-app.ini&#34; data-lang=&#34;app.ini&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;[webhook]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ALLOWED_HOST_LIST&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;external,loopback,192.168.0.*(サーバーのIP)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ALLOW_LOCAL_NETWORKS&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これを追加した後、forgejoを再起動するとサーバーのIPにwebhookを送ることができる。そして、リポジトリの設定からwebhook→webhookを追加→forgejoをリポジトリと組み合せる→ターゲットURLにサーバーのIPを入力
これでforgejo側は完了。
私の書いたコードを使うならポートは9999で。&lt;/p&gt;
&lt;h3 id=&#34;docker側の設定&#34;&gt;docker側の設定&lt;/h3&gt;
&lt;p&gt;dockerfile&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-dockerfile&#34; data-lang=&#34;dockerfile&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;ubuntu:latest&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;WORKDIR&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;/app&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;COPY&lt;/span&gt; ./scripts /app&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;RUN&lt;/span&gt; apt update &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt -y install hugo nginx git ssh neovim rsync python3&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CMD&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;bash&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-c&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;nginx &amp;amp; python3 webhook.py&amp;#34;&lt;/span&gt;]&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;./scriptsの中身は、push.shとwebhook.pyだけです。&lt;/p&gt;
&lt;p&gt;このpythonのプログラムは、9999ポートにHTTPリクエストを送ると勝手にpush.shを実行してくれるよ
(本当はpythonじゃなくCで書きたかったけど、dockerのコンテナ内でビルドするのが面倒だったのとpythonの練習でpythonにした)&lt;/p&gt;
&lt;p&gt;webhook.py&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-webhook.py&#34; data-lang=&#34;webhook.py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; socket
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; subprocess
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;listening &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; socket&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;socket(socket&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;AF_INET, socket&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;SOCK_STREAM)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;listening&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;bind((&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;0.0.0.0&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;9999&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;listening&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;listen(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    connected, address &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; listening&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;accept()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    subprocess&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;run([&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;bash&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;push.sh&amp;#39;&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    connected&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sendall(&lt;span style=&#34;color:#e6db74&#34;&gt;b&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;HTTP/1.1 200 OK&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\r\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;Content-Length: 0&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\r\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;Connection: close&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\r\n\r\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    connected&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;close()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;9999番ポートに大量のアクセスが来たらぶっ壊れるくらい弱いし9999ポートに来たら問答無用で更新しちゃうけど許してね!(そもそも家のLANに怪しい奴を入れたり怪しいソフトを動かしたりはやめろ！)&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
