Files
security-alert-center/docs/install-ubuntu-24.04.md
T
PapaTramp 69a232d08a feat: backend ingest API, Docker Compose, Ubuntu install guide
- 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)
2026-05-26 20:21:31 +10:00

278 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Подготовка сервера 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) — требования