Update infrastructure to use external PostgreSQL server instead of Docker container. Modify .env.example and documentation to reflect new connection settings and deployment instructions.
This commit is contained in:
+3
-7
@@ -2,13 +2,9 @@
|
|||||||
# Скопируй в .env и заполни значения. Ключи вида Section__Key биндятся в IOptions<T> ASP.NET Core.
|
# Скопируй в .env и заполни значения. Ключи вида Section__Key биндятся в IOptions<T> ASP.NET Core.
|
||||||
# ВСЕ значения-секреты ниже обязательно заменить перед запуском (особенно *_PASSWORD, *SigningKey).
|
# ВСЕ значения-секреты ниже обязательно заменить перед запуском (особенно *_PASSWORD, *SigningKey).
|
||||||
|
|
||||||
# ── PostgreSQL (контейнер db) ─────────────────────────────────────────────
|
# ── PostgreSQL (внешний сервер, не в compose) ─────────────────────────────
|
||||||
POSTGRES_DB=telewave
|
# База и пользователь создаются заранее на самом сервере БД (см. README — раздел "Развёртывание").
|
||||||
POSTGRES_USER=telewave
|
ConnectionStrings__Default=Host=10.10.1.134;Port=5432;Database=telewave;Username=telewave;Password=change-me-strong-db-password
|
||||||
POSTGRES_PASSWORD=change-me-strong-db-password
|
|
||||||
|
|
||||||
# Строка подключения приложения (host = имя сервиса БД в docker-compose)
|
|
||||||
ConnectionStrings__Default=Host=db;Port=5432;Database=telewave;Username=telewave;Password=change-me-strong-db-password
|
|
||||||
|
|
||||||
# ── JWT ───────────────────────────────────────────────────────────────────
|
# ── JWT ───────────────────────────────────────────────────────────────────
|
||||||
Jwt__Issuer=TeleWave
|
Jwt__Issuer=TeleWave
|
||||||
|
|||||||
@@ -23,7 +23,8 @@
|
|||||||
Маппинг DTO вручную. OpenAPI — нативный `Microsoft.AspNetCore.OpenApi` + Scalar UI.
|
Маппинг DTO вручную. OpenAPI — нативный `Microsoft.AspNetCore.OpenApi` + Scalar UI.
|
||||||
- **Frontend**: React 19 + Vite + TS, TanStack Query/Router, shadcn-стиль поверх Radix + Tailwind
|
- **Frontend**: React 19 + Vite + TS, TanStack Query/Router, shadcn-стиль поверх Radix + Tailwind
|
||||||
v4, Zustand (только auth+тема), react-hook-form + zod. pnpm, oxlint.
|
v4, Zustand (только auth+тема), react-hook-form + zod. pnpm, oxlint.
|
||||||
- **Инфра**: единый Docker-образ (API + статика SPA) + PostgreSQL в docker-compose.
|
- **Инфра**: единый Docker-образ (API + статика SPA); PostgreSQL — **внешний сервер**, не в
|
||||||
|
compose (в отличие от PnvPanel).
|
||||||
|
|
||||||
## Архитектура — жёсткие правила
|
## Архитектура — жёсткие правила
|
||||||
|
|
||||||
@@ -83,8 +84,11 @@
|
|||||||
runtime. Никакого gosu/root-drop и Data Protection key-ring — секретов на диске пока нет
|
runtime. Никакого gosu/root-drop и Data Protection key-ring — секретов на диске пока нет
|
||||||
(JWT-ключ — обычная конфигурация, не шифруемый секрет at-rest); если появятся зашифрованные
|
(JWT-ключ — обычная конфигурация, не шифруемый секрет at-rest); если появятся зашифрованные
|
||||||
данные (например API-ключи внешних сервисов) — добавлять Data Protection по образцу PnvPanel.
|
данные (например API-ключи внешних сервисов) — добавлять Data Protection по образцу PnvPanel.
|
||||||
- docker-compose: `app` + `db` (PostgreSQL). Миграции применяются авто на старте
|
- docker-compose: только `app` — PostgreSQL живёт вне compose (внешний сервер/хост, адрес и
|
||||||
(`ApplyMigrationsAsync` в `Program.cs`).
|
креды — в `ConnectionStrings__Default` из `.env`; база и пользователь на нём создаются
|
||||||
|
заранее вручную, приложение их не сидит). Миграции применяются авто на старте
|
||||||
|
(`ApplyMigrationsAsync` в `Program.cs`) — прав `CREATEDB` не требуется, только DDL/DML в
|
||||||
|
уже существующей базе.
|
||||||
- Не вводи отдельный nginx-контейнер для статики — ломает требование единого контейнера.
|
- Не вводи отдельный nginx-контейнер для статики — ломает требование единого контейнера.
|
||||||
- **TLS — внешний**; `app` отдаёт HTTP + доверяет `X-Forwarded-*` (`ForwardedHeaders`).
|
- **TLS — внешний**; `app` отдаёт HTTP + доверяет `X-Forwarded-*` (`ForwardedHeaders`).
|
||||||
|
|
||||||
@@ -121,7 +125,7 @@ pnpm lint && pnpm typecheck
|
|||||||
|
|
||||||
Инфраструктура:
|
Инфраструктура:
|
||||||
```bash
|
```bash
|
||||||
docker compose up -d --build # api + postgres
|
docker compose up -d --build # только api; postgres — внешний, см. ConnectionStrings__Default
|
||||||
```
|
```
|
||||||
|
|
||||||
> Окружение: Windows, основная оболочка — **PowerShell**. Для POSIX-скриптов есть Bash-инструмент.
|
> Окружение: Windows, основная оболочка — **PowerShell**. Для POSIX-скриптов есть Bash-инструмент.
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
> Текущее состояние — **база**: вход/регистрация, роли, пользователи, минимальная админка,
|
> Текущее состояние — **база**: вход/регистрация, роли, пользователи, минимальная админка,
|
||||||
> приветственная главная страница. Каталог каналов и раздача видео — следующий этап, пока не
|
> приветственная главная страница. Каталог каналов и раздача видео — следующий этап, пока не
|
||||||
> реализованы. Приложение (фронт + бек) поставляется **единым Docker-образом**; PostgreSQL —
|
> реализованы. Приложение (фронт + бек) поставляется **единым Docker-образом**; PostgreSQL —
|
||||||
> отдельным контейнером в compose.
|
> **внешний**, не поднимается через compose.
|
||||||
|
|
||||||
## Стек
|
## Стек
|
||||||
|
|
||||||
@@ -16,19 +16,28 @@
|
|||||||
| БД | PostgreSQL (Npgsql) |
|
| БД | PostgreSQL (Npgsql) |
|
||||||
| Auth | ASP.NET Core Identity + JWT (access + refresh, ротация) |
|
| Auth | ASP.NET Core Identity + JWT (access + refresh, ротация) |
|
||||||
| Frontend | React 19 + Vite + TypeScript, TanStack Query/Router, shadcn/ui + Tailwind v4 (ретро-CRT тема) |
|
| Frontend | React 19 + Vite + TypeScript, TanStack Query/Router, shadcn/ui + Tailwind v4 (ретро-CRT тема) |
|
||||||
| Упаковка | Единый Docker-образ (API + статика SPA) + PostgreSQL в docker-compose |
|
| Упаковка | Единый Docker-образ (API + статика SPA); PostgreSQL — внешний сервер |
|
||||||
|
|
||||||
## Быстрый старт
|
## Развёртывание
|
||||||
|
|
||||||
Единый Docker-образ + PostgreSQL:
|
Postgres не входит в compose — база и пользователь создаются заранее на внешнем сервере БД:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- на сервере БД (psql -h <хост БД> -U postgres)
|
||||||
|
CREATE USER telewave WITH PASSWORD 'change-me-strong-db-password';
|
||||||
|
CREATE DATABASE telewave OWNER telewave;
|
||||||
|
```
|
||||||
|
|
||||||
|
Затем на хосте с приложением:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp .env.example .env # заполнить AdminSeed__Password, Jwt__SigningKey и т.д.
|
cp .env.example .env
|
||||||
|
# заполнить ConnectionStrings__Default (хост/база/юзер/пароль БД), Jwt__SigningKey, AdminSeed__*
|
||||||
docker compose up -d --build
|
docker compose up -d --build
|
||||||
# → http://localhost:8085 (админ — логин/пароль из .env, AdminSeed__Username/Password)
|
# → http://localhost:8085 (админ — логин/пароль из .env, AdminSeed__Username/Password)
|
||||||
```
|
```
|
||||||
|
|
||||||
Локальная разработка (без Docker для приложения — только `db`):
|
## Локальная разработка
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# backend, из backend/
|
# backend, из backend/
|
||||||
|
|||||||
+1
-29
@@ -1,39 +1,14 @@
|
|||||||
services:
|
services:
|
||||||
db:
|
|
||||||
image: postgres:17-alpine
|
|
||||||
environment:
|
|
||||||
POSTGRES_DB: ${POSTGRES_DB:-telewave}
|
|
||||||
POSTGRES_USER: ${POSTGRES_USER:-telewave}
|
|
||||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-telewave}
|
|
||||||
volumes:
|
|
||||||
- pgdata:/var/lib/postgresql/data
|
|
||||||
healthcheck:
|
|
||||||
test: ['CMD-SHELL', 'pg_isready -U ${POSTGRES_USER:-telewave} -d ${POSTGRES_DB:-telewave}']
|
|
||||||
interval: 5s
|
|
||||||
timeout: 5s
|
|
||||||
retries: 10
|
|
||||||
restart: unless-stopped
|
|
||||||
logging:
|
|
||||||
driver: json-file
|
|
||||||
options:
|
|
||||||
max-size: '10m'
|
|
||||||
max-file: '3'
|
|
||||||
|
|
||||||
app:
|
app:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
depends_on:
|
# Postgres — внешний (не в compose), см. ConnectionStrings__Default в .env.
|
||||||
db:
|
|
||||||
condition: service_healthy
|
|
||||||
# Секреты (Jwt__SigningKey, AdminSeed__Password, ...) — из .env, см. .env.example.
|
|
||||||
# ConnectionStrings__Default ниже переопределяет .env: адрес БД внутри сети compose всегда 'db'.
|
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
ASPNETCORE_ENVIRONMENT: Production
|
ASPNETCORE_ENVIRONMENT: Production
|
||||||
ASPNETCORE_HTTP_PORTS: '8085'
|
ASPNETCORE_HTTP_PORTS: '8085'
|
||||||
ConnectionStrings__Default: 'Host=db;Port=5432;Database=${POSTGRES_DB:-telewave};Username=${POSTGRES_USER:-telewave};Password=${POSTGRES_PASSWORD:-telewave}'
|
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ['CMD', 'curl', '-f', 'http://localhost:8085/health']
|
test: ['CMD', 'curl', '-f', 'http://localhost:8085/health']
|
||||||
interval: 15s
|
interval: 15s
|
||||||
@@ -48,6 +23,3 @@ services:
|
|||||||
options:
|
options:
|
||||||
max-size: '10m'
|
max-size: '10m'
|
||||||
max-file: '3'
|
max-file: '3'
|
||||||
|
|
||||||
volumes:
|
|
||||||
pgdata:
|
|
||||||
|
|||||||
Reference in New Issue
Block a user