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. Пользователь
sudo useradd --system --home /opt/ignis --shell /usr/sbin/nologin ignis
2. Код и зависимости
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-файл
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_KEYIGNIS_INSTANCE_NAMESCAN_NETWORK
4. Unit
sudo cp deploy/ignis-core.service /etc/systemd/system/ignis-core.service
sudo systemctl daemon-reload
sudo systemctl enable --now ignis-core.service
Проверка
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: <master-key>'
curl -sS http://127.0.0.1:8000/system/info -H 'X-API-Key: <master-key>'
Если сервис стоит за reverse proxy, имеет смысл задать IGNIS_PUBLIC_BASE_URL.
Обновление
cd /opt/ignis/ignis-core
. .venv/bin/activate
pip install -r requirements.txt
sudo systemctl restart ignis-core.service
Если менялся env:
sudo systemctl restart ignis-core.service
Если менялся unit:
sudo systemctl daemon-reload
sudo systemctl restart ignis-core.service
Что делает unit
Текущий 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 лучше ставить перед сервисом, а не встраивать в него.