Files

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_KEY
  • IGNIS_INSTANCE_NAME
  • SCAN_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 лучше ставить перед сервисом, а не встраивать в него.