docs: prod status, sac-deploy.sh; update install and deployment guides

This commit is contained in:
PTah
2026-05-26 22:03:10 +10:00
parent bdfc7016e6
commit a4bbc14448
9 changed files with 217 additions and 28 deletions
+3 -3
View File
@@ -12,9 +12,9 @@
## Статус проекта
**Фаза 1B:** ingest на prod (`sac.kalinamall.ru`)готово.
**Фаза 1C (в работе):** Vue UI (события, хосты), JWT-вход.
**Фаза 1A (в работе):** `UseSAC` / `--check-sac` в [ssh-monitor](https://git.kalinamall.ru/PapaTramp/ssh-monitor).
**Prod:** `https://sac.kalinamall.ru`ingest, UI (события/хосты), JWT.
**Деплой:** `sudo /opt/sac-deploy.sh` (см. `deploy/sac-deploy.sh`).
**Дальше:** Problems/Telegram (1C), `UseSAC=dual` на ssh-monitor (1A).
**Подготовка сервера Ubuntu:** [docs/install-ubuntu-24.04-native.md](docs/install-ubuntu-24.04-native.md)
+7
View File
@@ -7,6 +7,13 @@
3. `deploy/systemd/sac-api.service``/etc/systemd/system/`
4. `deploy/nginx/sac.conf.tls.example``/etc/nginx/sites-available/sac` (wildcard TLS)
или `sac.conf.example` — только HTTP / отладка
5. `deploy/sac-deploy.sh``/opt/sac-deploy.sh` — полное обновление после `git pull`
```bash
sudo cp deploy/sac-deploy.sh /opt/sac-deploy.sh
sudo chmod 755 /opt/sac-deploy.sh
sudo /opt/sac-deploy.sh
```
## Альтернатива: Docker
+89
View File
@@ -0,0 +1,89 @@
#!/usr/bin/env bash
# Полное обновление SAC на сервере (native).
# Установка: sudo cp /opt/security-alert-center/deploy/sac-deploy.sh /opt/sac-deploy.sh
# sudo chmod 755 /opt/sac-deploy.sh
# Запуск: sudo /opt/sac-deploy.sh
#
# Выполняет от пользователя sac: git pull, pip, alembic, npm build.
# От root: systemctl restart sac-api.
set -euo pipefail
APP_ROOT="${SAC_APP_ROOT:-/opt/security-alert-center}"
APP_USER="${SAC_APP_USER:-sac}"
SERVICE_NAME="${SAC_SERVICE:-sac-api}"
CONFIG_FILE="${SAC_CONFIG_FILE:-${APP_ROOT}/config/sac-api.env}"
log() { printf '[sac-deploy] %s\n' "$*"; }
die() { printf '[sac-deploy] ERROR: %s\n' "$*" >&2; exit 1; }
if [ "$(id -u)" -ne 0 ]; then
die "Запускайте от root: sudo /opt/sac-deploy.sh"
fi
id "$APP_USER" &>/dev/null || die "Пользователь ${APP_USER} не существует"
if [ ! -d "${APP_ROOT}/.git" ]; then
die "Не найден git-репозиторий: ${APP_ROOT}"
fi
log "Выравнивание владельца ${APP_ROOT}${APP_USER}:${APP_USER}"
chown -R "${APP_USER}:${APP_USER}" "${APP_ROOT}"
log "git pull"
sudo -u "${APP_USER}" git -C "${APP_ROOT}" pull --ff-only
if [ ! -f "${CONFIG_FILE}" ]; then
die "Нет конфига: ${CONFIG_FILE}"
fi
VENV="${APP_ROOT}/backend/.venv"
if [ ! -x "${VENV}/bin/pip" ]; then
die "Нет venv: ${VENV} — сначала установите по install-ubuntu-24.04-native.md"
fi
log "pip install -r requirements.txt"
sudo -u "${APP_USER}" "${VENV}/bin/pip" install -q -r "${APP_ROOT}/backend/requirements.txt"
log "alembic upgrade head"
sudo -u "${APP_USER}" bash -c "
set -a
# shellcheck source=/dev/null
source '${CONFIG_FILE}'
set +a
cd '${APP_ROOT}/backend' && '${VENV}/bin/alembic' upgrade head
"
if [ -f "${APP_ROOT}/frontend/package.json" ]; then
if ! command -v npm >/dev/null 2>&1; then
log "npm не найден — пропуск сборки UI (apt install nodejs npm)"
else
log "frontend: npm ci / build"
sudo -u "${APP_USER}" bash -c "
cd '${APP_ROOT}/frontend'
if [ -f package-lock.json ]; then npm ci; else npm install; fi
npm run build
"
if [ ! -f "${APP_ROOT}/frontend/dist/index.html" ]; then
die "Сборка UI не создала frontend/dist/index.html"
fi
fi
fi
if [ -f "${APP_ROOT}/deploy/systemd/${SERVICE_NAME}.service" ]; then
log "systemd unit (при необходимости скопируйте вручную в /etc/systemd/system/)"
fi
log "systemctl restart ${SERVICE_NAME}"
systemctl daemon-reload 2>/dev/null || true
systemctl restart "${SERVICE_NAME}"
systemctl is-active --quiet "${SERVICE_NAME}" || die "${SERVICE_NAME} не active"
sleep 1
if curl -sf "http://127.0.0.1:8000/health" >/dev/null 2>&1; then
log "health: OK (http://127.0.0.1:8000/health)"
else
log "WARN: локальный /health не ответил — проверьте journalctl -u ${SERVICE_NAME}"
fi
log "Готово."
+2 -1
View File
@@ -13,7 +13,8 @@
| [install-ubuntu-24.04-docker.md](install-ubuntu-24.04-docker.md) | Подготовка сервера (Docker, альтернатива) |
| [install-ubuntu-24.04.md](install-ubuntu-24.04.md) | Указатель |
| [ssl-certificate.md](ssl-certificate.md) | Wildcard TLS: формат, scp, пути `/etc/ssl/sac/` |
| [deployment.md](deployment.md) | Эксплуатация, backup, TLS |
| [deployment.md](deployment.md) | Эксплуатация, backup, TLS, `sac-deploy.sh` |
| [operations-prod-status.md](operations-prod-status.md) | **Статус prod** и следующие шаги |
| [workspace-three-repos.md](workspace-three-repos.md) | Cursor multi-root |
## Порядок чтения
+13 -6
View File
@@ -16,9 +16,15 @@
deploy/
env.native.example → /opt/security-alert-center/config/sac-api.env
systemd/sac-api.service → /etc/systemd/system/
nginx/sac.conf.example → /etc/nginx/sites-available/sac
nginx/sac.conf.example → /etc/nginx/sites-available/sac (HTTP)
nginx/sac.conf.tls.example → HTTPS + wildcard
sac-deploy.sh → /opt/sac-deploy.sh (полное обновление)
```
**Production URL:** `https://sac.kalinamall.ru`
**Конфиг:** `/opt/security-alert-center/config/sac-api.env` (владелец `sac:sac`, chmod 600).
**UI:** статика `frontend/dist`, раздаётся через FastAPI (после `npm run build`).
---
## 1. Требования к серверу
@@ -51,7 +57,7 @@ deploy/
| PostgreSQL 16 | `apt`, БД `sac` |
| SAC API | Python 3.12 venv, **systemd** `sac-api` |
| TLS / proxy | **nginx** |
| UI (позже) | static в `/var/www/sac/` |
| UI | `frontend/dist`, сборка `npm run build`, раздача из API |
Полная инструкция: **[install-ubuntu-24.04-native.md](install-ubuntu-24.04-native.md)**.
@@ -104,12 +110,13 @@ curl -sS https://sac.kalinamall.ru/health
## 8. Обновление (native)
```bash
cd /opt/security-alert-center && sudo -u sac git pull
sudo -u sac backend/.venv/bin/pip install -r backend/requirements.txt
sudo -u sac bash -c 'set -a; source /opt/security-alert-center/config/sac-api.env; set +a; cd backend && .venv/bin/alembic upgrade head'
sudo systemctl restart sac-api
sudo /opt/sac-deploy.sh
```
Установка скрипта (один раз): `sudo cp /opt/security-alert-center/deploy/sac-deploy.sh /opt/sac-deploy.sh && sudo chmod 755 /opt/sac-deploy.sh`
Подробности: [install-ubuntu-24.04-native.md §13](install-ubuntu-24.04-native.md#13-обновление-sac-деплой).
---
## См. также
+38 -5
View File
@@ -360,16 +360,44 @@ EOF
---
## 13. Обновление SAC
## 13. Обновление SAC (деплой)
### Рекомендуется: скрипт `/opt/sac-deploy.sh`
После первой установки один раз:
```bash
cd /opt/security-alert-center
sudo -u sac git pull
sudo -u sac backend/.venv/bin/pip install -r backend/requirements.txt
sudo -u sac bash -c 'set -a; source /opt/security-alert-center/config/sac-api.env; set +a; cd backend && .venv/bin/alembic upgrade head'
sudo cp /opt/security-alert-center/deploy/sac-deploy.sh /opt/sac-deploy.sh
sudo chmod 755 /opt/sac-deploy.sh
```
Каждое обновление с git:
```bash
sudo /opt/sac-deploy.sh
```
Скрипт: `chown sac:sac``git pull` (от **sac**) → `pip``alembic``npm run build``systemctl restart sac-api` → проверка `/health`.
### Вручную (если без скрипта)
```bash
sudo chown -R sac:sac /opt/security-alert-center
sudo -u sac git -C /opt/security-alert-center pull
cd /opt/security-alert-center/frontend && sudo -u sac npm ci && sudo -u sac npm run build
sudo -u sac /opt/security-alert-center/backend/.venv/bin/pip install -r /opt/security-alert-center/backend/requirements.txt
sudo -u sac bash -c 'set -a; source /opt/security-alert-center/config/sac-api.env; set +a; cd /opt/security-alert-center/backend && .venv/bin/alembic upgrade head'
sudo systemctl restart sac-api
```
### Git: только от пользователя `sac`
Не выполняйте `sudo git pull` в `/opt/security-alert-center``.git` станет root и появится:
`error: cannot open '.git/FETCH_HEAD': Permission denied`
Исправление: `sudo chown -R sac:sac /opt/security-alert-center`.
---
## 14. Чеклист
@@ -399,6 +427,11 @@ sudo systemctl restart sac-api
| 401 ingest | ключ в `Authorization: Bearer`; проверить `SAC_BOOTSTRAP_API_KEY` |
| 502 от nginx | API не слушает: `ss -lntp \| grep 8000`, `systemctl restart sac-api` |
| Schema errors 422 | путь `EVENT_SCHEMA_PATH`, наличие файла schema |
| `FETCH_HEAD: Permission denied` | `sudo chown -R sac:sac /opt/security-alert-center`; далее `sudo -u sac git pull` |
| UI 404 / пустая главная | `cd frontend && sudo -u sac npm run build`; `restart sac-api` |
| 503 на `/auth/login` | задать `SAC_ADMIN_PASSWORD` в `config/sac-api.env` |
| `test -r privkey.pem` без вывода | каталог `/etc/ssl/sac``root:ssl-cert`, `www-data` в группе `ssl-cert` — [ssl-certificate.md](ssl-certificate.md) §3 |
| PFX `RC2-40-CBC unsupported` | `openssl pkcs12 -legacy` — [ssl-certificate.md](ssl-certificate.md) §4.4 |
---
+50
View File
@@ -0,0 +1,50 @@
# SAC production — текущий статус (KalinaMall)
Ориентир для продолжения работ. Обновляйте при смене этапа.
**Сервер:** Ubuntu 24.04, FQDN `sac.kalinamall.ru`
**Каталог:** `/opt/security-alert-center`
**Пользователь сервиса:** `sac` (git, venv, npm — только от него)
**Конфиг:** `/opt/security-alert-center/config/sac-api.env`
---
## Что уже работает (2026-05-26)
| Компонент | Статус |
|-----------|--------|
| PostgreSQL + Alembic | ✅ |
| `POST /api/v1/events` (ingest 202) | ✅ |
| `GET /health` | ✅ |
| nginx + wildcard TLS (`/etc/ssl/sac/`) | ✅ |
| JWT UI: Events, Hosts | ✅ |
| `SAC_ADMIN_PASSWORD` + вход в браузере | ✅ |
---
## Деплой обновлений
```bash
sudo /opt/sac-deploy.sh
```
См. `deploy/sac-deploy.sh`, [install-ubuntu-24.04-native.md §13](install-ubuntu-24.04-native.md#13-обновление-sac-деплой).
**Не делать:** `sudo git pull` в каталоге приложения (ломает права `.git` для `sac`).
---
## Следующие шаги
1. **1A** — ssh-monitor на тестовом Linux: `UseSAC=dual`, `SAC_API_KEY`, `--check-sac`
2. **1C** — Problems, Telegram из SAC, dashboard
3. **1A** — маппинг всех типов событий через `notify_or_sac`
4. RDP-login-monitor — аналог UseSAC
---
## Ссылки
- [agent-integration.md](agent-integration.md)
- [ssl-certificate.md](ssl-certificate.md)
- [work-plan.md](work-plan.md)
+2 -2
View File
@@ -8,8 +8,8 @@
**Цель:** ingest на сервере; агенты в `dual` по мере готовности фазы 1A.
- Ingest API + PostgreSQL (**в работе — фаза 1B**)
- Events, Hosts, базовый UI
- Ingest API + PostgreSQL (**prod**)
- Events, Hosts, базовый UI (**prod**)
- Problems (2 правила)
- Telegram из SAC
- 3 виджета dashboard
+13 -11
View File
@@ -31,17 +31,17 @@
---
## Фаза 1B. SAC — минимальный ingest (текущая разработка)
## Фаза 1B. SAC — минимальный ingest ✅ (prod)
| # | Задача | Статус |
|---|--------|--------|
| 1B.1 | Scaffold backend FastAPI | ✅ |
| 1B.2 | PostgreSQL + Alembic (hosts, events, api_keys) | ✅ |
| 1B.3 | `POST /api/v1/events`, `GET /health` | ✅ (prod) |
| 1B.4 | systemd + nginx + [install-ubuntu-24.04-native.md](install-ubuntu-24.04-native.md) | ✅ |
| 1B.3 | `POST /api/v1/events`, `GET /health` | ✅ prod `sac.kalinamall.ru` |
| 1B.4 | systemd + nginx + TLS | ✅ |
| 1B.5 | Валидация JSON Schema v1 | ✅ |
**Выход:** сервер Ubuntu принимает события от curl и от агентов в `dual`.
**Выход:** ingest с curl и UI на prod — достигнут.
---
@@ -49,11 +49,11 @@
| # | Задача | Статус |
|---|--------|--------|
| 1C.1 | Frontend Vue: Events, Hosts | 🔄 |
| 1C.2 | Auth JWT, admin bootstrap | 🔄 |
| 1C.3 | Problems (базовые правила) |
| 1C.4 | Telegram из SAC |
| 1C.5 | Dashboard (3 виджета), SSE |
| 1C.1 | Frontend Vue: Events, Hosts | ✅ prod |
| 1C.2 | Auth JWT, admin bootstrap | ✅ prod |
| 1C.3 | Problems (базовые правила) | ⏳ |
| 1C.4 | Telegram из SAC | ⏳ |
| 1C.5 | Dashboard (3 виджета), SSE | ⏳ |
**Выход:** тег `v0.1.0-mvp`.
@@ -86,8 +86,9 @@ gantt
section Документы
Фаза 0 :done, 2026-05-26, 1d
section SAC
1B ingest+deploy :active, 2026-05-26, 7d
1C UI+notify :2026-06-02, 14d
1B ingest+deploy :done, 2026-05-26, 1d
1C UI базовый :done, 2026-05-26, 1d
1C notify+dash :active, 2026-05-27, 14d
section Агенты
1A UseSAC dual :2026-05-26, 10d
section Prod
@@ -99,5 +100,6 @@ gantt
## См. также
- [install-ubuntu-24.04.md](install-ubuntu-24.04.md) — подготовка сервера
- [operations-prod-status.md](operations-prod-status.md) — статус prod и деплой
- [roadmap.md](roadmap.md)
- [TZ.md](TZ.md)