- 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)
7.8 KiB
Подготовка сервера Ubuntu 24.04 для Security Alert Center
Пошаговое руководство: установка софта на чистый или обновлённый хост перед развёртыванием SAC.
Целевой способ запуска — Docker Compose (рекомендуется). В конце — проверка и ссылка на deployment.md.
0. Исходные данные
Запишите до начала:
| Параметр | Пример |
|---|---|
| FQDN | sac.kalinin.example |
| IP | 10.0.0.50 |
| Пользователь sudo | deploy |
| Каталог установки | /opt/security-alert-center |
1. Базовая настройка ОС
sudo apt update
sudo apt upgrade -y
sudo timedatectl set-timezone Europe/Moscow # или ваша IANA-зона
timedatectl status
Опционально — hostname:
sudo hostnamectl set-hostname sac-01
1.1. Firewall (ufw)
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 оставьте только с доверенных подсетей, если политика безопасности требует:
# пример: только внутренняя сеть
# sudo ufw allow from 10.0.0.0/8 to any port 22
2. Установка Git
sudo apt install -y git
git --version
Клонирование (после доступа к репозиторию):
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):
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 (перелогиниться после):
sudo usermod -aG docker "$USER"
Проверка:
docker --version
docker compose version
sudo docker run --rm hello-world
4. Каталоги данных и конфигурации
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
Права на секреты:
sudo chmod 750 /etc/security-alert-center
5. Конфигурация SAC (.env)
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 32SAC_PUBLIC_URL— публичный URL, напримерhttps://sac.kalinin.exampleSAC_ADMIN_PASSWORD— пароль первого admin (только первый запуск)
Симлинк для compose (удобно):
ln -sf /etc/security-alert-center/.env /opt/security-alert-center/deploy/.env
6. Первый запуск SAC
cd /opt/security-alert-center/deploy
docker compose build
docker compose up -d --build
docker compose run --rm migrate
docker compose ps
Проверка health (пока без TLS — с хоста):
curl -sS http://127.0.0.1:8000/health | jq .
Ожидается JSON с "status": "ok" и "database": "ok".
Тест ingest (подставьте ключ из .env — SAC_BOOTSTRAP_API_KEY или созданный в UI):
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
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 — сервисы поднимутся сами.
Проверка:
sudo reboot
# после входа:
docker compose -f /opt/security-alert-center/deploy/docker-compose.yml ps
9. Резервное копирование PostgreSQL
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
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 600docker compose up— все контейнеры healthyGET /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 — архитектура, порты, эксплуатация
- agent-integration.md — настройка агентов после поднятия SAC
- TZ.md — требования