docs: native Ubuntu install as primary; systemd and nginx

- install-ubuntu-24.04-native.md (production) and -docker.md (alternative)

- deploy/systemd/sac-api.service, nginx/sac.conf.example, env.native.example

- deployment, README, INDEX, work-plan, TZ updated
This commit is contained in:
PTah
2026-05-26 20:28:05 +10:00
parent 69a232d08a
commit 9203af90d5
14 changed files with 582 additions and 427 deletions
+55 -135
View File
@@ -1,9 +1,23 @@
# Развёртывание на Ubuntu 24.04
Руководство для эксплуатации SAC.
Эксплуатация SAC: **native** (PostgreSQL + systemd + nginx). Docker — только альтернатива.
> **Подготовка чистого сервера (установка Docker, git, firewall, первый запуск):**
> **[install-ubuntu-24.04.md](install-ubuntu-24.04.md)** — пошаговые команды для администратора.
## Руководства по установке
| Документ | Назначение |
|----------|------------|
| **[install-ubuntu-24.04-native.md](install-ubuntu-24.04-native.md)** | **Production** — пошаговая подготовка сервера |
| [install-ubuntu-24.04-docker.md](install-ubuntu-24.04-docker.md) | Стенд / отладка (Compose) |
| [install-ubuntu-24.04.md](install-ubuntu-24.04.md) | Указатель |
## Артефакты native в репозитории
```
deploy/
env.native.example → /etc/security-alert-center/sac-api.env
systemd/sac-api.service → /etc/systemd/system/
nginx/sac.conf.example → /etc/nginx/sites-available/sac
```
---
@@ -14,136 +28,65 @@
| ОС | Ubuntu 24.04 LTS | Ubuntu 24.04 LTS |
| CPU | 2 vCPU | 4 vCPU |
| RAM | 4 GB | 8 GB |
| Диск | 50 GB SSD | 100+ GB SSD (отдельный том для PostgreSQL) |
| Сеть | Статический IP или DNS | TLS-сертификат (Let's Encrypt / внутренний CA) |
| Диск | 50 GB SSD | 100+ GB SSD |
**Порты:**
| Порт | Назначение |
|------|------------|
| 443 | HTTPS (UI + API ingest) |
| 80 | Редирект на 443 (опционально) |
PostgreSQL **не** публикуется наружу.
**Порты снаружи:** 443 (nginx), 80 (редирект). API `8000` — только `127.0.0.1`. PostgreSQL — только localhost.
---
## 2. Сетевые правила
**Исходящие с агентов:**
- Linux (ssh-monitor) → `https://sac.example.com:443`
- Windows (RDP-monitor) → тот же URL
**Исходящие с SAC:**
- `api.telegram.org` (если Telegram)
- SMTP-сервер организации
**Входящие на SAC:**
- 443 от сетей, где расположены агенты и админы UI
**Агенты →** `https://sac.example.com/api/v1/events`
**SAC →** Telegram, SMTP (исходящие)
**Админы →** 443 (UI/API через nginx)
---
## 3. Вариант A: Docker Compose (рекомендуется)
## 3. Вариант A: Native (production)
Целевая структура (фаза 1):
Компоненты на хосте:
```
deploy/
docker-compose.yml
.env.example
nginx/
sac.conf
```
| Компонент | Как |
|-----------|-----|
| PostgreSQL 16 | `apt`, БД `sac` |
| SAC API | Python 3.12 venv, **systemd** `sac-api` |
| TLS / proxy | **nginx** |
| UI (позже) | static в `/var/www/sac/` |
Сервисы:
Полная инструкция: **[install-ubuntu-24.04-native.md](install-ubuntu-24.04-native.md)**.
- `postgres:16`
- `api` (FastAPI)
- `worker` (тот же образ, другая command)
- `nginx` (static + proxy)
### 3.1. Установка Docker
Кратко:
```bash
sudo apt update
sudo apt install -y ca-certificates curl
# Официальная инструкция Docker CE для Ubuntu 24.04
```
### 3.2. Конфигурация
```bash
sudo mkdir -p /etc/security-alert-center
sudo cp deploy/.env.example /etc/security-alert-center/.env
sudo chmod 600 /etc/security-alert-center/.env
# Заполнить: POSTGRES_PASSWORD, JWT_SECRET, TELEGRAM_*, SAC_PUBLIC_URL
```
### 3.3. Запуск
```bash
cd /opt/security-alert-center/deploy
sudo docker compose up -d
sudo docker compose exec api alembic upgrade head
```
### 3.4. Обновление
```bash
git pull
sudo docker compose build
sudo docker compose up -d
sudo docker compose exec api alembic upgrade head
systemctl status sac-api
curl -sS http://127.0.0.1:8000/health
curl -sS https://sac.example.com/health
```
---
## 4. Вариант B: Native systemd
## 4. Вариант B: Docker Compose (альтернатива)
Пакеты:
```bash
sudo apt install -y postgresql nginx python3.12 python3.12-venv
```
- PostgreSQL: БД `sac`, пользователь `sac`
- venv в `/opt/security-alert-center/.venv`
- Units: `sac-api.service`, `sac-worker.service`
- Static UI в `/var/www/sac/`
- nginx site `/etc/nginx/sites-available/sac`
Детальные unit-файлы — при реализации фазы 1.
См. [install-ubuntu-24.04-docker.md](install-ubuntu-24.04-docker.md) и `deploy/docker-compose.yml`.
**Не используется** для production KalinaMall.
---
## 5. TLS
- Публичный: **certbot** + nginx
- Внутренний: корпоративный CA, полный chain в nginx
Агенты должны доверять CA (или `SAC_TLS_SKIP_VERIFY=1` только для dev — **запрещено в prod**).
- **certbot** + nginx (Let's Encrypt)
- Внутренний CA — сертификаты в nginx, доверие на агентах Windows/Linux
---
## 6. Резервное копирование
### 6.1. Ежедневный pg_dump
## 6. Резервное копирование (native)
```bash
# /etc/cron.d/sac-backup (пример)
0 3 * * * postgres pg_dump -Fc sac > /var/backups/sac/sac_$(date +\%Y\%m\%d).dump
# /etc/cron.d/sac-backup
0 3 * * * postgres pg_dump -Fc -U sac sac > /var/backups/sac/sac_$(date +\%Y\%m\%d).dump
```
Ротация: 14 daily + 4 weekly.
### 6.2. Восстановление (тест раз в месяц)
```bash
pg_restore -d sac_restored /var/backups/sac/sac_YYYYMMDD.dump
```
Восстановление: `pg_restore -d sac_restored /var/backups/sac/sac_YYYYMMDD.dump`
---
@@ -151,48 +94,25 @@ pg_restore -d sac_restored /var/backups/sac/sac_YYYYMMDD.dump
| Задача | Периодичность |
|--------|---------------|
| `unattended-upgrades` security | автоматически |
| Проверка диска PostgreSQL | еженедельно |
| Ротация логов nginx/app | logrotate |
| Проверка `/health` | каждые 5 мин (Uptime Kuma / cron) |
| Review Problems «хост мёртв» | ежедневно |
| `unattended-upgrades` | автоматически |
| `journalctl -u sac-api` | по инцидентам |
| `/health` | каждые 5 мин |
| Тест restore БД | ежемесячно |
---
## 8. Мониторинг самого SAC
## 8. Обновление (native)
- `GET https://sac.example.com/health``200`, `"database": "ok"`
- Алерт если нет ingest с активного хоста > 90 мин (настраивается)
- Диск > 85% — алерт ОС
---
## 9. Создание API key для хоста
(После реализации UI)
1. Войти как admin → Hosts → Add / Generate API key.
2. Скопировать ключ в `/etc/ssh-monitor.conf` или RDP-конфиг.
3. `UseSAC=exclusive`, перезапуск агента.
4. `--check-sac` на хосте.
---
## 10. Чеклист первого prod-развёртывания
- [ ] Ubuntu 24.04, hostname, DNS A-record
- [ ] TLS работает
- [ ] PostgreSQL backup настроен
- [ ] `.env` не в git, chmod 600
- [ ] Создан admin-пользователь
- [ ] Telegram test notification
- [ ] Тестовый ingest с одного Linux и одного Windows
- [ ] Firewall: только нужные порты
```bash
cd /opt/security-alert-center && sudo -u sac git pull
sudo -u sac backend/.venv/bin/pip install -r backend/requirements.txt
sudo -u sac bash -c 'set -a; source /etc/security-alert-center/sac-api.env; set +a; cd backend && .venv/bin/alembic upgrade head'
sudo systemctl restart sac-api
```
---
## См. также
- [TZ.md](TZ.md) §5, §9
- [TZ.md](TZ.md)
- [agent-integration.md](agent-integration.md)