debug-runbook
Debug runbook
Этот файл — общий порядок отладки, когда garden не работает.
1. Проверить публичный домен
curl -I https://obsidian-duck-guide.obsidians.otc.guru/
Если нет ответа — проверить nginx и локальный Caddy port.
2. Проверить локальный Caddy port
curl -I http://127.0.0.1:8089/
Если локально работает, а публично нет — проблема в nginx/certbot/domain.
Если локально не работает — проблема в docker/caddy/build.
3. Проверить garden status
cd /home/supervisor/leonid_projects/duck-obsidian/.deploy
./gardenctl status obsidian-duck-guide
./gardenctl timer-status obsidian-duck-guide
4. Проверить logs
journalctl -u obsidian-duck-guide-pull.service -n 100 --no-pager
tail -n 200 /home/supervisor/leonid_projects/obsidians/obsidian-duck-guide/logs/deploy.log
5. Проверить dist
cd /home/supervisor/leonid_projects/obsidians/obsidian-duck-guide/site
ls -lah dist/index.html
ls -lah dist/graph.json dist/searchIndex.json
Если dist/index.html нет — проверить Home note.
6. Проверить опубликованные notes
find src/site/notes -maxdepth 5 -type f | sort
У нужной note должен быть:
dg-publish: true
Для Home:
dg-home: true
или:
tags:
- gardenEntry
7. Если ссылка ведёт на /404
Проверить, что целевая note опубликована.
Для ссылки:
А если тут?
должна быть опубликованная note, которую engine может найти по имени, title, пути или permalink.
Команды:
find src/site/notes -maxdepth 5 -type f | sort
grep -R "А если тут" src/site/notes || true
8. Если не виден sidebar/filetree
Проверить garden.config.json:
"dgShowFileTree": true
Проверить, что notes попали в workdir:
npm run build
find .duck-garden/work/src/site/notes -maxdepth 5 -type f | sort
Если там пусто — проблема в публикации notes, а не в CSS.
9. Если graph/backlinks пустые
cat dist/graph.json | head -c 1000
DUCK_ASSERT_MIN_LINKS=1 npm run assert:dist
DUCK_ASSERT_BACKLINK_URL=/ npm run assert:dist
Backlinks строятся по wikilinks.
10. Если картинка не открывается
В note должна быть ссылка:

Debug:
DUCK_DEBUG_IMAGES=1 npm run build
find dist/img/user -maxdepth 5 -type f | sort
Проверка через public domain:
curl -I 'https://obsidian-duck-guide.obsidians.otc.guru/img/user/foto/2026-06-15%2014.57.12.jpg'
11. Если API панели не отвечает
sudo systemctl status duck-garden-panel-api --no-pager
sudo journalctl -u duck-garden-panel-api -n 100 --no-pager
curl -s http://127.0.0.1:3017/health
Авторизованный запрос:
TOKEN="$(sudo awk -F= '$1=="DUCK_PANEL_TOKEN"{print $2}' /etc/duck-garden-panel.env)"
curl -s -H "Authorization: Bearer $TOKEN" http://127.0.0.1:3017/api/gardens
12. Если панель открывается, но actions падают
Смотреть:
sudo journalctl -u duck-garden-panel-api -n 200 --no-pager
sudo nginx -t
sudo systemctl status nginx --no-pager
Если timeout — увеличить proxy timeouts в Nginx панели.
13. Если Caddy container нужно пересоздать
cd /home/supervisor/leonid_projects/obsidians/obsidian-duck-guide
docker compose up -d --force-recreate --no-deps caddy
Подробнее: Caddy recreate.