commands-cheatsheet
Шпаргалка команд
gardenctl
cd /home/supervisor/leonid_projects/duck-obsidian/.deploy
./gardenctl doctor
./gardenctl list
./gardenctl timers
./gardenctl status obsidian-duck-guide
./gardenctl timer-status obsidian-duck-guide
./gardenctl logs obsidian-duck-guide
./gardenctl rebuild obsidian-duck-guide
./gardenctl pause obsidian-duck-guide
./gardenctl resume obsidian-duck-guide
./gardenctl stop-service obsidian-duck-guide
./gardenctl upgrade obsidian-duck-guide --to 1.0.18
./gardenctl upgrade-all --to 1.0.18
./gardenctl destroy obsidian-duck-guide \
--domain obsidian-duck-guide.obsidians.otc.guru
Systemd timer/service
sudo systemctl status obsidian-duck-guide-pull.timer
sudo systemctl status obsidian-duck-guide-pull.service
systemctl list-timers | grep obsidian-duck-guide
journalctl -u obsidian-duck-guide-pull.service -n 100 --no-pager
sudo systemctl disable --now obsidian-duck-guide-pull.timer
sudo systemctl stop obsidian-duck-guide-pull.service
sudo systemctl enable --now obsidian-duck-guide-pull.timer
sudo systemctl start obsidian-duck-guide-pull.service
Production rebuild
cd /home/supervisor/leonid_projects/duck-obsidian/.deploy
./gardenctl rebuild obsidian-duck-guide
curl -I https://obsidian-duck-guide.obsidians.otc.guru/
curl -I 'https://obsidian-duck-guide.obsidians.otc.guru/img/user/foto/2026-06-15%2014.57.12.jpg'
Caddy recreate
cd /home/supervisor/leonid_projects/obsidians/obsidian-duck-guide
docker compose up -d --force-recreate --no-deps caddy
Garden local build
cd /home/supervisor/leonid_projects/obsidians/obsidian-duck-guide/site
npm install --no-audit --no-fund --prefer-online
npm run build
npm run assert:dist
Clean build:
sudo rm -rf node_modules package-lock.json dist .duck-garden
sudo chown -R supervisor:supervisor .
npm install --no-audit --no-fund
npm run build
node node_modules/@duck/garden-engine/scripts/assert-dist.js
Проверка graph/search/backlinks
node -e 'const g=require("./dist/graph.json"); console.log(g.nodes["/"]); console.log(g.links)'
node -e 'const s=require("./dist/searchIndex.json"); console.log(s.map(x=>[x.title,x.url]))'
grep -R "backlink-card" dist/index.html
DUCK_ASSERT_MIN_LINKS=1 npm run assert:dist
DUCK_ASSERT_BACKLINK_URL=/ npm run assert:dist
Подключить engine branch для теста
cd /home/supervisor/leonid_projects/obsidians/obsidian-duck-guide/site
npm pkg set 'dependencies.@duck/garden-engine=git+ssh://git@github.com/leo-mmmmmmm/duck-garden-engine.git#debug/image-asset-resolution'
Вернуть engine на release tag
npm pkg set 'dependencies.@duck/garden-engine=git+ssh://git@github.com/leo-mmmmmmm/duck-garden-engine.git#v1.0.18'
Release engine
cd /home/supervisor/leonid_projects/duck-garden-engine
git checkout main
git pull origin main
git merge --no-ff debug/image-asset-resolution -m "Merge image asset resolution fix"
npm version patch --no-git-tag-version
cat > migrations/1.0.17-to-1.0.18.js <<'EOF'
module.exports = async function migrate({ config }) {
return config;
};
EOF
git add package.json package-lock.json migrations/1.0.17-to-1.0.18.js
git commit -m "Release v1.0.18"
git tag -a v1.0.18 -m "Release v1.0.18"
git push origin main
git push origin v1.0.18
Panel build/deploy
cd /home/supervisor/leonid_projects/duck-obsidian-panel
npm ci
npm run build
sudo rm -rf /var/www/duck-obsidian-panel
sudo mkdir -p /var/www/duck-obsidian-panel
sudo cp -a out/. /var/www/duck-obsidian-panel/
Panel API
sudo systemctl status duck-garden-panel-api --no-pager
sudo journalctl -u duck-garden-panel-api -n 100 --no-pager
sudo systemctl restart duck-garden-panel-api
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
Nginx
sudo nginx -t
sudo systemctl reload nginx
sudo systemctl status nginx --no-pager