chore: initial deploy bundle
This commit is contained in:
70
README.md
70
README.md
@@ -11,8 +11,6 @@ deployserver/
|
||||
├── .env.example # Шаблон переменных окружения
|
||||
├── .dockerignore
|
||||
├── start.sh # Автоматический deploy скрипт
|
||||
├── db/
|
||||
│ └── schema.sql # DDL таблиц (users, wallets, sessions) — идемпотентный
|
||||
├── apps/api/ # Исходник API
|
||||
│ ├── src/
|
||||
│ ├── package.json
|
||||
@@ -30,48 +28,7 @@ deployserver/
|
||||
- Docker Compose plugin (`docker compose` команда)
|
||||
- Исходящий HTTPS на Vault (`corp.vault.elcsa.ru:443`)
|
||||
- Сетевой доступ к PostgreSQL (адрес приходит из Vault)
|
||||
|
||||
## Быстрый старт
|
||||
|
||||
```bash
|
||||
# 1. Скопировать папку на сервер
|
||||
scp -r deployserver user@server:/opt/cryptowallet
|
||||
ssh user@server
|
||||
cd /opt/cryptowallet
|
||||
|
||||
# 2. Установить Docker (если нет)
|
||||
curl -fsSL https://get.docker.com | sudo sh
|
||||
sudo usermod -aG docker $USER
|
||||
newgrp docker
|
||||
|
||||
# 3. Настроить .env
|
||||
cp .env.example .env
|
||||
nano .env # заполнить VAULT_ROLE_ID, VAULT_SECRET_ID
|
||||
|
||||
# 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
|
||||
|
||||
# 6. Открыть порт наружу
|
||||
sudo ufw allow 22/tcp
|
||||
sudo ufw allow 3001/tcp
|
||||
sudo ufw enable
|
||||
```
|
||||
|
||||
## Проверка
|
||||
|
||||
```bash
|
||||
curl http://localhost:3001/api/health
|
||||
# → {"success":true,"data":{"status":"ok"}}
|
||||
|
||||
curl http://<server-ip>:3001/api/health # извне
|
||||
```
|
||||
|
||||
Swagger UI: `http://<server-ip>:3001/api/docs`
|
||||
- БД должна быть **инициализирована отдельно** (таблицы `users`, `wallets`, `sessions` — создаются вручную DBA)
|
||||
|
||||
## Порты
|
||||
|
||||
@@ -85,22 +42,12 @@ Swagger UI: `http://<server-ip>:3001/api/docs`
|
||||
|
||||
```bash
|
||||
docker compose logs -f api # смотреть логи
|
||||
docker compose restart api # рестарт (например после смены .env)
|
||||
docker compose restart api # рестарт (после смены .env)
|
||||
docker compose down # остановить
|
||||
docker compose ps # статус
|
||||
docker compose up -d --build # пересобрать и запустить (после обновления кода)
|
||||
docker compose up -d --build # пересобрать и запустить
|
||||
```
|
||||
|
||||
## Обновление
|
||||
|
||||
```bash
|
||||
# Скопировать новую версию deployserver/ (или git pull)
|
||||
docker compose build --pull api
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Схема БД не применяется автоматически — если добавились новые таблицы/колонки, выполни `schema.sql` вручную (он идемпотентный, безопасно запускать повторно).
|
||||
|
||||
## Ротация ключей
|
||||
|
||||
JWT public keys и CSRF secret читаются из Vault при старте и **каждый час** обновляются автоматически (см. `key-rotation.service.ts`). При ошибках Vault сервис продолжает работать со старыми ключами — в логах будет `ERROR: Failed to refresh ...`.
|
||||
@@ -120,20 +67,13 @@ JWT public keys и CSRF secret читаются из Vault при старте
|
||||
- Проверь VAULT_ROLE_ID / VAULT_SECRET_ID в .env
|
||||
- Проверь доступ: `curl -v https://corp.vault.elcsa.ru/v1/sys/health`
|
||||
|
||||
**`password authentication failed for user "postgres_user"`**
|
||||
- Креды в `.env` не совпадают с тем что в Vault (или с реальной БД)
|
||||
- Решение: либо подставь пароль из Vault в `.env`, либо оставь пустыми — Vault перекроет при логине
|
||||
|
||||
**Таблицы не существуют (relation does not exist)**
|
||||
- Не применён `db/schema.sql` — см. шаг 4 в Quick Start
|
||||
**`relation "users" does not exist`**
|
||||
- БД не инициализирована — попроси DBA создать таблицы (`users`, `wallets`, `sessions`)
|
||||
|
||||
**Port 3001 занят**
|
||||
- `sudo lsof -i :3001`
|
||||
- Измени порт: в `docker-compose.yml` `"3002:3001"` и в `ufw allow 3002`
|
||||
|
||||
**Нет места на диске**
|
||||
- `docker system prune -a` — удалит старые образы
|
||||
|
||||
## Автозапуск при reboot
|
||||
|
||||
Restart policy `unless-stopped` уже настроен. Убедись что Docker стартует:
|
||||
|
||||
Reference in New Issue
Block a user