chore: initial deploy bundle

This commit is contained in:
ZOMBIIIIIII
2026-04-20 17:39:38 +03:00
parent 5f7c098f0b
commit 9329b76e9b
16 changed files with 386 additions and 303 deletions

View File

@@ -7,10 +7,12 @@
```
deployserver/
├── Dockerfile # Multi-stage production build
├── docker-compose.yml # PostgreSQL + API
├── docker-compose.yml # Только API (БД внешняя, из Vault)
├── .env.example # Шаблон переменных окружения
├── .dockerignore
├── start.sh # Автоматический deploy скрипт
├── db/
│ └── schema.sql # DDL таблиц (users, wallets, sessions) — идемпотентный
├── apps/api/ # Исходник API
│ ├── src/
│ ├── package.json
@@ -27,11 +29,12 @@ deployserver/
- Ubuntu 20.04+ / Debian 11+ / любой Linux с Docker 24+
- Docker Compose plugin (`docker compose` команда)
- Исходящий HTTPS на Vault (`corp.vault.elcsa.ru:443`)
- Сетевой доступ к PostgreSQL (адрес приходит из Vault)
## Быстрый старт
```bash
# 1. Скопировать папку на сервер (или git clone и cd deployserver)
# 1. Скопировать папку на сервер
scp -r deployserver user@server:/opt/cryptowallet
ssh user@server
cd /opt/cryptowallet
@@ -45,11 +48,15 @@ newgrp docker
cp .env.example .env
nano .env # заполнить VAULT_ROLE_ID, VAULT_SECRET_ID
# 4. Запустить
# 4. Применить схему БД (один раз, на пустой БД)
sudo apt install -y postgresql-client
PGPASSWORD=<пароль_из_Vault> psql -h <host> -U <user> -d <db> -f db/schema.sql
# 5. Запустить
chmod +x start.sh
./start.sh
# 5. Открыть порт наружу
# 6. Открыть порт наружу
sudo ufw allow 22/tcp
sudo ufw allow 3001/tcp
sudo ufw enable
@@ -71,29 +78,32 @@ Swagger UI: `http://<server-ip>:3001/api/docs`
| Порт | Назначение | Открыть наружу? |
|------|-----------|-----------------|
| 3001 | API HTTP | ✅ да (`ufw allow 3001`) |
| 5432 | PostgreSQL | ❌ нет (только docker network) |
| 443 (out) | Vault | исходящий, обычно открыт |
| 5432 (out) | PostgreSQL | исходящий к внешнему адресу БД |
## Управление
```bash
docker compose logs -f api # смотреть логи
docker compose restart api # рестарт
docker compose restart api # рестарт (например после смены .env)
docker compose down # остановить
docker compose down -v # + удалить БД (ОСТОРОЖНО)
docker compose ps # статус
docker compose exec postgres psql -U postgres cryptowallet_v2 # подключиться к БД
docker compose up -d --build # пересобрать и запустить (после обновления кода)
```
## Обновление
```bash
# Скопировать новую версию deployserver/
# Скопировать новую версию deployserver/ (или git pull)
docker compose build --pull api
docker compose up -d
```
Миграции применятся автоматически при старте API.
Схема БД не применяется автоматически — если добавились новые таблицы/колонки, выполни `schema.sql` вручную (он идемпотентный, безопасно запускать повторно).
## Ротация ключей
JWT public keys и CSRF secret читаются из Vault при старте и **каждый час** обновляются автоматически (см. `key-rotation.service.ts`). При ошибках Vault сервис продолжает работать со старыми ключами — в логах будет `ERROR: Failed to refresh ...`.
## Безопасность Dockerfile
@@ -110,9 +120,12 @@ docker compose up -d
- Проверь VAULT_ROLE_ID / VAULT_SECRET_ID в .env
- Проверь доступ: `curl -v https://corp.vault.elcsa.ru/v1/sys/health`
**API рестартуется в цикле**
- `docker compose logs api` — смотри ошибку
- Скорее всего БД не поднялась: `docker compose logs postgres`
**`password authentication failed for user "postgres_user"`**
- Креды в `.env` не совпадают с тем что в Vault (или с реальной БД)
- Решение: либо подставь пароль из Vault в `.env`, либо оставь пустыми — Vault перекроет при логине
**Таблицы не существуют (relation does not exist)**
- Не применён `db/schema.sql` — см. шаг 4 в Quick Start
**Port 3001 занят**
- `sudo lsof -i :3001`
@@ -120,7 +133,6 @@ docker compose up -d
**Нет места на диске**
- `docker system prune -a` — удалит старые образы
- `docker compose logs --tail=0 --no-log-prefix > /dev/null` — логи ротейтятся автоматически
## Автозапуск при reboot