prod-rebuild

Production rebuild

Production rebuild нужен, когда нужно вручную пересобрать garden на сервере.

Основная команда

cd /home/supervisor/leonid_projects/duck-obsidian/.deploy
./gardenctl rebuild obsidian-duck-guide

Для другого garden меняем slug:

./gardenctl rebuild <slug>

Что делает rebuild

gardenctl rebuild заходит в project directory и запускает:

FORCE_REBUILD=1 HARD_CLEAN=1 ./pull-and-rebuild.sh

Это означает:

FORCE_REBUILD=1  — пересобрать даже если commit не изменился
HARD_CLEAN=1     — удалить старые build artifacts

Hard clean удаляет:

site/dist
site/.duck-garden

Затем сборка идёт с нуля.

Проверить сайт после rebuild

Главная страница:

curl -I https://obsidian-duck-guide.obsidians.otc.guru/

Конкретный asset:

curl -I 'https://obsidian-duck-guide.obsidians.otc.guru/img/user/foto/2026-06-15%2014.57.12.jpg'

Нужно увидеть:

HTTP/1.1 200 OK

Проверить локальный Caddy port

curl -I http://127.0.0.1:8089/

Если локально отвечает, а публичный домен нет — смотреть nginx.

Если локально не отвечает — смотреть docker/caddy/build.

Логи rebuild

Systemd logs:

journalctl -u obsidian-duck-guide-pull.service -n 100 --no-pager

Deploy log:

tail -n 200 /home/supervisor/leonid_projects/obsidians/obsidian-duck-guide/logs/deploy.log

Live logs:

cd /home/supervisor/leonid_projects/duck-obsidian/.deploy
./gardenctl logs obsidian-duck-guide

Когда сначала делать pause

Если ты вручную редактируешь files внутри garden repo на сервере, сначала останови timer:

cd /home/supervisor/leonid_projects/duck-obsidian/.deploy
./gardenctl pause obsidian-duck-guide

После правок:

./gardenctl rebuild obsidian-duck-guide
./gardenctl resume obsidian-duck-guide

Если rebuild завис

cd /home/supervisor/leonid_projects/duck-obsidian/.deploy
./gardenctl stop-service obsidian-duck-guide
sudo lslocks | grep obsidian-duck-guide-deploy || true

После этого можно попробовать снова:

./gardenctl rebuild obsidian-duck-guide

См. также: debug runbook.