# Руководство по установке

## 1. Требования

| Ресурс | Минимум | Рекомендуется |
|---|---|---|
| Процессор | 4 ядра x86-64 | 8 ядер |
| Память | 8 ГБ | 16 ГБ |
| Диск | 50 ГБ SSD | 200 ГБ SSD |
| ОС | Astra Linux SE 1.8, РЕД ОС 8, Альт Сервер 10 или другая Linux x86-64 | — |
| ПО | Docker Engine 24+, Docker Compose v2, Git | — |

Сеть: входящий порт 443 (HTTPS). Внешний доступ в интернет на работу программы не влияет: все компоненты, справочники и тайлы карты можно разместить в контуре заказчика.

## 2. Установка

1. Установить Docker из репозитория ОС:
   - Astra Linux: `sudo apt install docker.io docker-compose-v2`
   - РЕД ОС: `sudo dnf install docker-ce docker-compose`
2. Получить дистрибутив (архив исходного кода или образы контейнеров) у правообладателя и распаковать в каталог `/opt/fabrika`.
3. Создать файл `/opt/fabrika/.env` по образцу `.env.example`: домен `APP_HOST`, параметры СУБД PostgreSQL 16 (`DB_HOST`, `DB_NAME`, `DB_USER`, `DB_PASSWORD`), секрет `JWT_SECRET` (случайная строка от 32 символов), e-mail первого администратора `ADMIN_EMAILS` и параметры почтового сервера для писем регистрации.
4. Запустить: `docker compose -f docker-compose.production.yml up -d --build`. При старте серверная часть сама применяет миграции схемы данных (`alembic upgrade head`).
5. Открыть в браузере `https://<домен>` и зарегистрироваться с e-mail из `ADMIN_EMAILS` — пользователь получит права администратора. Выдать права другому пользователю: `docker compose exec api python -m app.cli make-admin <email>`.

## 3. Загрузка нормативной базы

В разделе «НСИ» администратор загружает файлы ФСНБ-2022 в формате XML, опубликованные в ФГИС ЦС. Загрузка идёт в фоне, ход виден на странице импорта.

## 4. Обновление

1. Получить новую версию у правообладателя.
2. `docker compose -f docker-compose.production.yml up -d --build` — миграции применяются автоматически при старте.

Обновление не устанавливается само: его запускает администратор заказчика.

## 5. Резервное копирование

`pg_dump -h $DB_HOST -U $DB_USER $DB_NAME > backup.sql` — ежедневно по расписанию cron; файлы моделей и чертежей — тома Docker серверной части.
