gardenctl
Серверные операции через gardenctl
Все команды выполняются на сервере из папки:
cd /home/supervisor/leonid_projects/duck-obsidian/.deploy
Главный entrypoint:
./gardenctl
Help
./gardenctl
Проверить сервер
./gardenctl doctor
Проверяет:
git
docker
docker compose
nginx
systemctl
journalctl
sudo
ss
sed
Создать garden
./gardenctl create \
--slug obsidian-duck-guide \
--domain obsidian-duck-guide.obsidians.otc.guru \
--repo git@github.com:leo-mmmmmmm/obsidian-duck-guide.git \
--port 8089 \
--engine-version 1.0.18
Если --domain не указан:
<slug>.obsidians.otc.guru
Если --repo не указан:
git@github.com:leo-mmmmmmm/<slug>.git
Что делает create
1. Проверяет slug/domain/port.
2. Создаёт /home/supervisor/leonid_projects/obsidians/<slug>.
3. Клонирует repo в site/.
4. Если repo пустой, инициализирует его из duck-obsidian-template.
5. Создаёт/обновляет <slug>-vault/.
6. Пишет garden.config.json.
7. Пишет package.json dependency на @duck/garden-engine.
8. Пишет базовый config Digital Garden plugin.
9. Рендерит docker-compose.yml, Caddyfile, pull-and-rebuild.sh.
10. Рендерит nginx config.
11. Создаёт systemd service и timer.
12. Включает timer.
13. Запускает первый build.
14. Проверяет site/dist/index.html.
15. Включает HTTPS через certbot, если auto HTTPS разрешён.
Статус garden
./gardenctl status obsidian-duck-guide
Показывает:
systemd timer
systemd service
Docker container
listening ports
Obsidian vault path
Timer/service status
./gardenctl timer-status obsidian-duck-guide
Ручной эквивалент:
sudo systemctl status obsidian-duck-guide-pull.timer
sudo systemctl status obsidian-duck-guide-pull.service
systemctl list-timers --all obsidian-duck-guide-pull.timer --no-pager
Логи
./gardenctl logs obsidian-duck-guide
Ручной эквивалент:
journalctl -u obsidian-duck-guide-pull.service -f
Deploy log:
tail -n 120 /home/supervisor/leonid_projects/obsidians/obsidian-duck-guide/logs/deploy.log
Rebuild
./gardenctl rebuild obsidian-duck-guide
Внутри запускается:
FORCE_REBUILD=1 HARD_CLEAN=1 ./pull-and-rebuild.sh
Ручной эквивалент:
cd /home/supervisor/leonid_projects/obsidians/obsidian-duck-guide
FORCE_REBUILD=1 HARD_CLEAN=1 ./pull-and-rebuild.sh
Pause / resume
Остановить auto-update:
./gardenctl pause obsidian-duck-guide
Вернуть auto-update:
./gardenctl resume obsidian-duck-guide
Остановить только текущий rebuild:
./gardenctl stop-service obsidian-duck-guide
Подробнее: timers.
Все timers
./gardenctl timers
Список gardens
./gardenctl list
Upgrade одного garden
./gardenctl upgrade obsidian-duck-guide --to 1.0.18
Команда меняет в garden repo:
package.json
garden.config.json
package-lock.json
Потом коммитит:
Upgrade garden engine to v1.0.18
и запускает:
obsidian-duck-guide-pull.service
Upgrade всех gardens
./gardenctl upgrade-all --to 1.0.18
В production безопаснее сначала обновить один garden, проверить его, и только потом делать upgrade-all.
Подробнее: release и upgrade engine.
Destroy deployment
./gardenctl destroy obsidian-duck-guide \
--domain obsidian-duck-guide.obsidians.otc.guru
Удаляет с сервера:
systemd timer/service
Docker containers
nginx config
local project directory
Не удаляет GitHub repo.
Без подтверждения:
./gardenctl destroy obsidian-duck-guide \
--domain obsidian-duck-guide.obsidians.otc.guru \
--yes
Безопасный порядок ручных production-правок
cd /home/supervisor/leonid_projects/duck-obsidian/.deploy
./gardenctl pause <slug>
cd /home/supervisor/leonid_projects/obsidians/<slug>/site
git status
# edit files
git add .
git commit -m "Your change"
git push origin main
cd /home/supervisor/leonid_projects/duck-obsidian/.deploy
./gardenctl rebuild <slug>
./gardenctl timer-status <slug>
./gardenctl resume <slug>