# Deploy Минимальный `systemd`-деплой для `ignis-core`. Файлы: - `ignis-core.service` — unit-файл - `ignis-core.env.example` — пример env-конфига ## Ожидаемая раскладка - код: `/opt/ignis/ignis-core` - env: `/etc/ignis-core/ignis-core.env` - пользователь: `ignis` - база: `/var/lib/ignis-core/ignis.db` Если пути другие, поправьте unit и env. ## Установка ### 1. Пользователь ```bash sudo useradd --system --home /opt/ignis --shell /usr/sbin/nologin ignis ``` ### 2. Код и зависимости ```bash sudo mkdir -p /opt/ignis sudo cp -R /path/to/ignis-core /opt/ignis/ignis-core cd /opt/ignis/ignis-core python3 -m venv .venv . .venv/bin/activate pip install -r requirements.txt sudo chown -R ignis:ignis /opt/ignis ``` ### 3. Env-файл ```bash sudo mkdir -p /etc/ignis-core sudo cp deploy/ignis-core.env.example /etc/ignis-core/ignis-core.env sudo chmod 640 /etc/ignis-core/ignis-core.env sudo chown root:ignis /etc/ignis-core/ignis-core.env ``` Минимум, который надо заполнить: - `IGNIS_API_KEY` - `IGNIS_INSTANCE_NAME` - `SCAN_NETWORK` ### 4. Unit ```bash sudo cp deploy/ignis-core.service /etc/systemd/system/ignis-core.service sudo systemctl daemon-reload sudo systemctl enable --now ignis-core.service ``` ## Проверка ```bash sudo systemctl status ignis-core.service sudo journalctl -u ignis-core.service -n 100 --no-pager curl -sS http://127.0.0.1:8000/auth/me -H 'X-API-Key: ' curl -sS http://127.0.0.1:8000/system/info -H 'X-API-Key: ' ``` Если сервис стоит за reverse proxy, имеет смысл задать `IGNIS_PUBLIC_BASE_URL`. ## Обновление ```bash cd /opt/ignis/ignis-core . .venv/bin/activate pip install -r requirements.txt sudo systemctl restart ignis-core.service ``` Если менялся env: ```bash sudo systemctl restart ignis-core.service ``` Если менялся unit: ```bash sudo systemctl daemon-reload sudo systemctl restart ignis-core.service ``` ## Что делает unit Текущий [ignis-core.service](ignis-core.service): - запускает `python -m uvicorn main:app --host 0.0.0.0 --port 8000` - читает `/etc/ignis-core/ignis-core.env` - рестартует сервис при падении - пишет состояние в `/var/lib/ignis-core` - даёт записи в `/opt/ignis/ignis-core` и `/var/lib/ignis-core` ## Практические замечания - для хостов с VPN, Docker или несколькими интерфейсами лучше всегда задавать `SCAN_NETWORK` явно; - перед релизом полезно перегенерировать `openapi.json` и прогнать `unittest`; - reverse proxy лучше ставить перед сервисом, а не встраивать в него.