# Подготовка сервера 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) — требования