new version

This commit is contained in:
ZOMBIIIIIII
2026-04-14 20:22:51 +03:00
parent 37146f7375
commit 89cb6174b7
144 changed files with 1710 additions and 17258 deletions

130
README.md Normal file
View File

@@ -0,0 +1,130 @@
# CryptoWallet API — Production Deploy Bundle
Самодостаточная папка для деплоя на Linux-сервер. Содержит всё нужное для сборки и запуска продакшн-версии API.
## Состав
```
deployserver/
├── Dockerfile # Multi-stage production build
├── docker-compose.yml # PostgreSQL + API
├── .env.example # Шаблон переменных окружения
├── .dockerignore
├── start.sh # Автоматический deploy скрипт
├── apps/api/ # Исходник API
│ ├── src/
│ ├── package.json
│ ├── tsconfig.json
│ ├── swagger.json
│ └── .eslintrc.json
├── package.json # Монорепо root
├── pnpm-workspace.yaml
└── pnpm-lock.yaml
```
## Требования
- Ubuntu 20.04+ / Debian 11+ / любой Linux с Docker 24+
- Docker Compose plugin (`docker compose` команда)
- Исходящий HTTPS на Vault (`corp.vault.elcsa.ru:443`)
## Быстрый старт
```bash
# 1. Скопировать папку на сервер (или git clone и cd deployserver)
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. Запустить
chmod +x start.sh
./start.sh
# 5. Открыть порт наружу
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`
## Порты
| Порт | Назначение | Открыть наружу? |
|------|-----------|-----------------|
| 3001 | API HTTP | ✅ да (`ufw allow 3001`) |
| 5432 | PostgreSQL | ❌ нет (только docker network) |
| 443 (out) | Vault | исходящий, обычно открыт |
## Управление
```bash
docker compose logs -f api # смотреть логи
docker compose restart api # рестарт
docker compose down # остановить
docker compose down -v # + удалить БД (ОСТОРОЖНО)
docker compose ps # статус
docker compose exec postgres psql -U postgres cryptowallet_v2 # подключиться к БД
```
## Обновление
```bash
# Скопировать новую версию deployserver/
docker compose build --pull api
docker compose up -d
```
Миграции применятся автоматически при старте API.
## Безопасность Dockerfile
- **Non-root user** (uid 1001) — контейнер не работает от root
- **tini** как PID 1 — корректная обработка `SIGTERM` / `SIGKILL`
- **Multi-stage build** — в финальный образ попадают только production deps + компилированный dist
- **Alpine base** — минимальный образ (~150 MB)
- **Healthcheck** — Docker рестартит контейнер если API упал
- **Log rotation** — max 5×20MB логов, не забьёт диск
## Troubleshooting
**`Vault AppRole login failed`**
- Проверь 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`
**Port 3001 занят**
- `sudo lsof -i :3001`
- Измени порт: в `docker-compose.yml` `"3002:3001"` и в `ufw allow 3002`
**Нет места на диске**
- `docker system prune -a` — удалит старые образы
- `docker compose logs --tail=0 --no-log-prefix > /dev/null` — логи ротейтятся автоматически
## Автозапуск при reboot
Restart policy `unless-stopped` уже настроен. Убедись что Docker стартует:
```bash
sudo systemctl enable docker
```