pipoduster

поднимаем selfhost инфраструктуру на debian

есть старый сервер, 8 гб озу, debian. хочется: git-хостинг, блог, синхронизация заметок. без лишнего.

что получилось

структура сервисов

graph TD
    A[nginx :80/:443] --> B[forgejo :3000]
    A --> C[webhook :9000]
    A --> D[статика блога]
    E[syncthing :8384] --> F[устройства]
    C --> G[hugo build]
    G --> D

сервисы разнесены по папкам — можно перезапустить один не трогая остальные. все подключены к одной docker сети, nginx видит их по именам контейнеров.

автодеплой блога

самая интересная часть.

sequenceDiagram
    participant O as obsidian
    participant G as forgejo
    participant W as webhook
    participant H as hugo
    participant N as nginx

    O->>G: git push
    G->>W: POST /hooks/blog-deploy
    W->>G: git pull
    W->>H: hugo --minify
    H->>N: public/
    N->>N: отдаёт новую версию

forgejo шлёт POST на https://pipoduster.ru/hooks/blog-deploy при каждом пуше в main. на сервере висит простой python http сервер который ловит запрос и запускает скрипт деплоя. git тянет изменения через ssh по имени контейнера — они в одной docker сети. hugo пересобирает сайт, nginx отдаёт из той же папки.

ssl

wildcard сертификат *.pipoduster.ru от let’s encrypt через хостера. один раз выдал — покрывает все поддомены. http автоматически редиректит на https через return 301.

потребление ресурсов

сервисram
forgejo~140 мб
syncthing~70 мб
nginx~10 мб
webhook~30 мб
итого~250 мб из 8 гб

gitlab на той же машине ел 4-6 гб. разница очевидна.

итог

пишу пост в obsidian → коммичу → пушу в forgejo → блог обновляется сам. заметки синхронизируются на все устройства через syncthing. всё крутится на одном debian сервере и почти не замечается.