69a232d08a
- FastAPI: POST /api/v1/events, GET /health, JSON Schema validation - PostgreSQL models, Alembic migration, bootstrap API key - deploy/docker-compose.yml, .env.example - docs/install-ubuntu-24.04.md, updated work-plan (agents first)
278 lines
7.8 KiB
Markdown
278 lines
7.8 KiB
Markdown
# Подготовка сервера Ubuntu 24.04 для Security Alert Center
|
||
|
||
Пошаговое руководство: установка софта на **чистый** или обновлённый хост перед развёртыванием SAC.
|
||
Целевой способ запуска — **Docker Compose** (рекомендуется). В конце — проверка и ссылка на [deployment.md](deployment.md).
|
||
|
||
---
|
||
|
||
## 0. Исходные данные
|
||
|
||
Запишите до начала:
|
||
|
||
| Параметр | Пример |
|
||
|----------|--------|
|
||
| FQDN | `sac.kalinin.example` |
|
||
| IP | `10.0.0.50` |
|
||
| Пользователь sudo | `deploy` |
|
||
| Каталог установки | `/opt/security-alert-center` |
|
||
|
||
---
|
||
|
||
## 1. Базовая настройка ОС
|
||
|
||
```bash
|
||
sudo apt update
|
||
sudo apt upgrade -y
|
||
sudo timedatectl set-timezone Europe/Moscow # или ваша IANA-зона
|
||
timedatectl status
|
||
```
|
||
|
||
Опционально — hostname:
|
||
|
||
```bash
|
||
sudo hostnamectl set-hostname sac-01
|
||
```
|
||
|
||
### 1.1. Firewall (ufw)
|
||
|
||
```bash
|
||
sudo apt install -y ufw
|
||
sudo ufw default deny incoming
|
||
sudo ufw default allow outgoing
|
||
sudo ufw allow OpenSSH
|
||
sudo ufw allow 80/tcp
|
||
sudo ufw allow 443/tcp
|
||
sudo ufw enable
|
||
sudo ufw status verbose
|
||
```
|
||
|
||
SSH оставьте только с доверенных подсетей, если политика безопасности требует:
|
||
|
||
```bash
|
||
# пример: только внутренняя сеть
|
||
# sudo ufw allow from 10.0.0.0/8 to any port 22
|
||
```
|
||
|
||
---
|
||
|
||
## 2. Установка Git
|
||
|
||
```bash
|
||
sudo apt install -y git
|
||
git --version
|
||
```
|
||
|
||
Клонирование (после доступа к репозиторию):
|
||
|
||
```bash
|
||
sudo mkdir -p /opt
|
||
sudo git clone https://git.kalinamall.ru/PapaTramp/security-alert-center.git /opt/security-alert-center
|
||
sudo chown -R "$USER:$USER" /opt/security-alert-center
|
||
```
|
||
|
||
---
|
||
|
||
## 3. Установка Docker Engine + Compose plugin
|
||
|
||
Официальный репозиторий Docker для Ubuntu 24.04 (noble):
|
||
|
||
```bash
|
||
sudo apt install -y ca-certificates curl gnupg
|
||
sudo install -m 0755 -d /etc/apt/keyrings
|
||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||
sudo chmod a+r /etc/apt/keyrings/docker.gpg
|
||
|
||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu noble stable" | \
|
||
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||
|
||
sudo apt update
|
||
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||
```
|
||
|
||
Добавить пользователя в группу `docker` (перелогиниться после):
|
||
|
||
```bash
|
||
sudo usermod -aG docker "$USER"
|
||
```
|
||
|
||
Проверка:
|
||
|
||
```bash
|
||
docker --version
|
||
docker compose version
|
||
sudo docker run --rm hello-world
|
||
```
|
||
|
||
---
|
||
|
||
## 4. Каталоги данных и конфигурации
|
||
|
||
```bash
|
||
sudo mkdir -p /etc/security-alert-center
|
||
sudo mkdir -p /var/lib/sac/postgres
|
||
sudo mkdir -p /var/backups/sac
|
||
sudo chown -R "$USER:docker" /var/lib/sac
|
||
```
|
||
|
||
Права на секреты:
|
||
|
||
```bash
|
||
sudo chmod 750 /etc/security-alert-center
|
||
```
|
||
|
||
---
|
||
|
||
## 5. Конфигурация SAC (.env)
|
||
|
||
```bash
|
||
cd /opt/security-alert-center/deploy
|
||
cp .env.example /etc/security-alert-center/.env
|
||
chmod 600 /etc/security-alert-center/.env
|
||
nano /etc/security-alert-center/.env
|
||
```
|
||
|
||
Обязательно задать (см. комментарии в `.env.example`):
|
||
|
||
- `POSTGRES_PASSWORD` — длинный случайный пароль
|
||
- `JWT_SECRET` — `openssl rand -hex 32`
|
||
- `SAC_PUBLIC_URL` — публичный URL, например `https://sac.kalinin.example`
|
||
- `SAC_ADMIN_PASSWORD` — пароль первого admin (только первый запуск)
|
||
|
||
Симлинк для compose (удобно):
|
||
|
||
```bash
|
||
ln -sf /etc/security-alert-center/.env /opt/security-alert-center/deploy/.env
|
||
```
|
||
|
||
---
|
||
|
||
## 6. Первый запуск SAC
|
||
|
||
```bash
|
||
cd /opt/security-alert-center/deploy
|
||
docker compose build
|
||
docker compose up -d --build
|
||
docker compose run --rm migrate
|
||
docker compose ps
|
||
```
|
||
|
||
Проверка health (пока без TLS — с хоста):
|
||
|
||
```bash
|
||
curl -sS http://127.0.0.1:8000/health | jq .
|
||
```
|
||
|
||
Ожидается JSON с `"status": "ok"` и `"database": "ok"`.
|
||
|
||
Тест ingest (подставьте ключ из `.env` — `SAC_BOOTSTRAP_API_KEY` или созданный в UI):
|
||
|
||
```bash
|
||
curl -sS -X POST http://127.0.0.1:8000/api/v1/events \
|
||
-H "Authorization: Bearer ВАШ_API_KEY" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"schema_version": "1.0",
|
||
"event_id": "00000000-0000-4000-8000-000000000001",
|
||
"occurred_at": "2026-05-26T12:00:00+03:00",
|
||
"source": {"product": "ssh-monitor", "product_version": "test"},
|
||
"host": {"hostname": "test-host", "os_family": "linux"},
|
||
"category": "agent",
|
||
"type": "agent.test",
|
||
"severity": "info",
|
||
"title": "Test",
|
||
"summary": "Install check"
|
||
}'
|
||
```
|
||
|
||
---
|
||
|
||
## 7. Nginx и TLS (production)
|
||
|
||
Установка nginx на хосте **или** использование контейнера из `docker compose` (см. `deploy/docker-compose.yml`).
|
||
|
||
### 7.1. Certbot (Let's Encrypt), если есть публичный DNS
|
||
|
||
```bash
|
||
sudo apt install -y nginx certbot python3-certbot-nginx
|
||
# после настройки server_name в nginx:
|
||
sudo certbot --nginx -d sac.kalinin.example
|
||
```
|
||
|
||
### 7.2. Внутренний CA
|
||
|
||
Используйте корпоративный сертификат в `deploy/nginx/certs/` и смонтируйте в compose.
|
||
Агентам (ssh-monitor / Windows) нужно доверять этому CA.
|
||
|
||
---
|
||
|
||
## 8. Автозапуск после перезагрузки
|
||
|
||
Docker Compose с `restart: unless-stopped` в `docker-compose.yml` — сервисы поднимутся сами.
|
||
|
||
Проверка:
|
||
|
||
```bash
|
||
sudo reboot
|
||
# после входа:
|
||
docker compose -f /opt/security-alert-center/deploy/docker-compose.yml ps
|
||
```
|
||
|
||
---
|
||
|
||
## 9. Резервное копирование PostgreSQL
|
||
|
||
```bash
|
||
sudo tee /etc/cron.d/sac-backup <<'EOF'
|
||
0 3 * * * root docker compose -f /opt/security-alert-center/deploy/docker-compose.yml exec -T postgres pg_dump -U sac -Fc sac > /var/backups/sac/sac_$(date +\%Y\%m\%d).dump
|
||
EOF
|
||
```
|
||
|
||
Ротация старых дампов — `logrotate` или скрипт по политике (14 daily).
|
||
|
||
---
|
||
|
||
## 10. Обновление SAC
|
||
|
||
```bash
|
||
cd /opt/security-alert-center
|
||
git pull
|
||
cd deploy
|
||
docker compose build
|
||
docker compose up -d
|
||
docker compose exec api alembic upgrade head
|
||
```
|
||
|
||
---
|
||
|
||
## 11. Чеклист готовности сервера
|
||
|
||
- [ ] Ubuntu 24.04, время и timezone верные
|
||
- [ ] ufw: 22 (по политике), 80, 443
|
||
- [ ] Docker и compose работают
|
||
- [ ] Репозиторий в `/opt/security-alert-center`
|
||
- [ ] `/etc/security-alert-center/.env` заполнен, chmod 600
|
||
- [ ] `docker compose up` — все контейнеры healthy
|
||
- [ ] `GET /health` — ok
|
||
- [ ] Тестовый `POST /api/v1/events` — 202
|
||
- [ ] TLS настроен (prod)
|
||
- [ ] cron backup
|
||
|
||
---
|
||
|
||
## 12. Устранение неполадок
|
||
|
||
| Симптом | Действие |
|
||
|---------|----------|
|
||
| `database: error` в /health | `docker compose logs postgres api`, проверить `DATABASE_URL` |
|
||
| 401 на ingest | неверный API key; см. `SAC_BOOTSTRAP_API_KEY` в .env |
|
||
| Нет места на диске | `df -h`, очистка journal/docker: `docker system prune` |
|
||
| Порт 8000 занят | изменить mapping в compose или остановить конфликтующий сервис |
|
||
|
||
---
|
||
|
||
## См. также
|
||
|
||
- [deployment.md](deployment.md) — архитектура, порты, эксплуатация
|
||
- [agent-integration.md](agent-integration.md) — настройка агентов после поднятия SAC
|
||
- [TZ.md](TZ.md) — требования
|