Add idempotent install.sh for one-command deployment #10
Loading…
Reference in a new issue
No description provided.
Delete branch "feature/8_install_script"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что сделано
Идемпотентный установщик
deploy/install.sh— одна команда на скачивание и установку (issue #8):Работает и как pipe, и как файл (
curl -fsSL -o install.sh ... && sudo bash install.sh), чистый bash без внешних зависимостей. Решение — по согласованному в #8 плану, с учётом аппрува заказчика:AUTH_TOKENгенерируется автоматически при первой установке; дефолты —/opt/watcherenish, пользовательpi,SESSIONS_DIR=~pi/.pi/agent/sessions.Шаги скрипта (с прогрессом и финальным статусом «успешно/не успешно»):
/opt/watcherenishесть →git fetch+reset --hard origin/main; нет →git clone. Всё переопределяется переменными окружения (INSTALL_DIR,INSTALL_USER,PORT,BIND,SESSIONS_DIR,GATE_LOG,BRANCH, ...).npm testперед запуском сервиса — при падении установка прерывается со статусом «не успешно», сервис не трогается.deploy/pi-web-monitor.service(User=,WorkingDirectory=, путь кnodeавтодетектятся), все переменные окружения вынесены вEnvironmentFile=-/etc/default/pi-web-monitor;daemon-reload,enable,restart./etc/default/pi-web-monitor: создаётся только при первой установке, при повторных не перетирается (ручные правки и токен сохраняются). При создании —AUTH_TOKEN(openssl rand -hex 32), права 600.GET /api/healthсо статусом (fallback наsystemctl is-active), неуспех печатает конкретный шаг и подсказкуjournalctl -u ....Идемпотентность: повторный запуск безопасен — обновляет код, перегенерирует юнит, рестартует сервис; дубликатов юнитов нет; конфиг не теряется.
README: разделы «Установка» (одна команда + что делает скрипт) и «systemd» обновлены.
Как проверить
bash -n deploy/install.sh— синтаксис.systemctl status pi-web-monitor;curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:8787/api/health→{"status":"ok",...}; без токена → 401.Проверено (E2E на чистом стенде)
AUTH_TOKENнапечатан в статусе, healthcheck OK.diff), exit 0.curl -fsSL ... | sudo bash— через локальный HTTP-сервер: OK.status:ok, без токена → 401.INSTALL_DIRбез.git→ внятное сообщение, exit code 1.Closes #8