Files
security-alert-center/docs/install-ubuntu-24.04.md
T
PTah 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

7.8 KiB
Raw Blame History

Подготовка сервера 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_SECRETopenssl rand -hex 32
  • SAC_PUBLIC_URL — публичный URL, например https://sac.kalinin.example
  • SAC_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 (подставьте ключ из .envSAC_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 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 — архитектура, порты, эксплуатация
  • agent-integration.md — настройка агентов после поднятия SAC
  • TZ.md — требования