init2121212

This commit is contained in:
ZOMBIIIIIII
2026-05-28 14:01:10 +03:00
parent e86ff7c063
commit a636bd573a
3 changed files with 271 additions and 9 deletions

View File

@@ -28,28 +28,55 @@ vault kv put dev-secrets/jwt/kids/<kid-from-bitok> \
⚠️ **Master-key менять нельзя** — все existing `encrypted_mnemonic` станут нерасшифровываемыми. API на старте делает self-test: пытается декриптить любой существующий mnemonic и фейлится если ключ не подошёл.
## Deploy
## Deploy (через docker compose)
```bash
# Залить bundle на сервер
# 1. Залить bundle на сервер
scp -P 2222 -r deployserver/ server@<host>:~/cryptowallet/
# На сервере: заполнить .env, поднять
# 2. На сервере: заполнить .env
ssh server@<host> -p 2222
cd ~/cryptowallet
cd ~/cryptowallet/deployserver
cp .env.example .env
chmod 600 .env
nano .env # заполни VAULT_*, JWT_*, CORS_ORIGINS
./start.sh
nano .env # заполни VAULT_*, JWT_*, REDIS_PASSWORD, POSTGRES_PASSWORD, CORS_ORIGINS
# 3. Поднять stack (api + postgres + keydb)
docker compose up -d --build
# 4. Проверить
docker compose ps
docker compose logs -f api
curl http://localhost:3001/api/health
```
В `.env` **обязательны**: `VAULT_ADDR`, `VAULT_ROLE_ID`, `VAULT_SECRET_ID`, `JWT_ISSUER=bitok`, `JWT_AUDIENCE`, `CORS_ORIGINS`.
В `.env` **обязательны**: `VAULT_ADDR`, `VAULT_ROLE_ID`, `VAULT_SECRET_ID`, `JWT_ISSUER=bitok`, `JWT_AUDIENCE`, `CORS_ORIGINS`, `POSTGRES_PASSWORD`, `REDIS_PASSWORD`.
**Что в compose:**
- `api` — наш Node API из multi-stage Dockerfile (read-only fs, uid 1001, port 127.0.0.1:3001)
- `postgres` — хранилище (internal only, без exposed ports)
- `keydb` — Redis-compatible для idempotency + asset map cache (internal only)
**Чего НЕТ в compose** (production не использует — оператор настраивает отдельно):
- HashiCorp Vault — production использует HA cluster (URL в `VAULT_ADDR`)
- JWT issuer — production принимает JWT от bitok external service
- Web UI — frontend деплоится отдельно (Vercel / nginx / CDN)
- Nginx reverse proxy + TLS — оператор сам ставит перед `127.0.0.1:3001`
**Если используешь managed Postgres** (e.g. AWS RDS):
- Раскомментируй `DATABASE_URL` в `.env`
- Закомментируй `postgres` service в `docker-compose.yml` + убери `depends_on.postgres` из `api`
## Update / Rebuild
```bash
scp -P 2222 -r deployserver/apps server@<host>:~/cryptowallet/
ssh server@<host> -p 2222 'cd cryptowallet && docker compose up -d --build'
# Только app (postgres/keydb остаются — данные не теряются)
scp -P 2222 -r deployserver/apps deployserver/Dockerfile deployserver/docker-compose.yml \
server@<host>:~/cryptowallet/deployserver/
ssh server@<host> -p 2222 'cd cryptowallet/deployserver && docker compose up -d --build api'
# Полный rebuild
ssh server@<host> -p 2222 'cd cryptowallet/deployserver && docker compose up -d --build --force-recreate'
```
## Endpoints