Add production docker compose and deploy guide
This commit is contained in:
parent
337c48b0f0
commit
8600e31797
|
|
@ -0,0 +1,20 @@
|
|||
# Backend
|
||||
ASPNETCORE_ENVIRONMENT=Production
|
||||
APP_USE_HTTPS_REDIRECTION=false
|
||||
|
||||
# JWT
|
||||
JWT_KEY=CHANGE_ME_TO_A_LONG_RANDOM_SECRET
|
||||
JWT_ISSUER=LineGestao
|
||||
JWT_AUDIENCE=LineGestao
|
||||
|
||||
# Seed admin (first login)
|
||||
SEED_ADMIN_EMAIL=admin@seu-dominio.com
|
||||
SEED_ADMIN_PASSWORD=CHANGE_ME_TO_A_STRONG_PASSWORD
|
||||
|
||||
# PostgreSQL
|
||||
POSTGRES_DB=linegestao
|
||||
POSTGRES_USER=linegestao_app
|
||||
POSTGRES_PASSWORD=CHANGE_ME_TO_A_STRONG_PASSWORD
|
||||
|
||||
# Front-end URL used by CORS
|
||||
FRONTEND_PUBLIC_URL=https://seu-dominio.com
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
# Deploy rápido (API + Postgres)
|
||||
|
||||
## Erro: `no configuration file provided: not found`
|
||||
Esse erro acontece quando o `docker compose` é executado em uma pasta sem `docker-compose.yml`.
|
||||
|
||||
Este repositório agora inclui `docker-compose.yml` na raiz do projeto.
|
||||
|
||||
## Passo a passo
|
||||
|
||||
1. Entre na pasta da API:
|
||||
|
||||
```bash
|
||||
cd ~/apps/line-gestao-api
|
||||
```
|
||||
|
||||
2. Crie o `.env` a partir do exemplo:
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
nano .env
|
||||
```
|
||||
|
||||
3. Suba os containers:
|
||||
|
||||
```bash
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
4. Verifique o status e logs:
|
||||
|
||||
```bash
|
||||
docker compose ps
|
||||
docker compose logs -f --tail=200
|
||||
```
|
||||
|
||||
5. Teste healthcheck da API:
|
||||
|
||||
```bash
|
||||
curl -I http://SEU_SERVIDOR:4000/health
|
||||
```
|
||||
|
||||
## Observações
|
||||
- O Postgres **não é exposto** para fora do Docker (sem `5432:5432`).
|
||||
- A API sobe na porta `4000` do host (`4000:8080`).
|
||||
- Defina valores fortes para `JWT_KEY`, `SEED_ADMIN_PASSWORD` e `POSTGRES_PASSWORD`.
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
services:
|
||||
db:
|
||||
image: postgres:16-alpine
|
||||
container_name: linegestao-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_DB: ${POSTGRES_DB:-linegestao}
|
||||
POSTGRES_USER: ${POSTGRES_USER:-linegestao_app}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required}
|
||||
volumes:
|
||||
- pg_data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-linegestao_app} -d ${POSTGRES_DB:-linegestao}"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
|
||||
api:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
container_name: linegestao-api
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
ports:
|
||||
- "4000:8080"
|
||||
environment:
|
||||
ASPNETCORE_ENVIRONMENT: ${ASPNETCORE_ENVIRONMENT:-Production}
|
||||
App__UseHttpsRedirection: ${APP_USE_HTTPS_REDIRECTION:-false}
|
||||
ConnectionStrings__Default: Host=db;Port=5432;Database=${POSTGRES_DB:-linegestao};Username=${POSTGRES_USER:-linegestao_app};Password=${POSTGRES_PASSWORD}
|
||||
Jwt__Key: ${JWT_KEY:?JWT_KEY is required}
|
||||
Jwt__Issuer: ${JWT_ISSUER:-LineGestao}
|
||||
Jwt__Audience: ${JWT_AUDIENCE:-LineGestao}
|
||||
Seed__AdminEmail: ${SEED_ADMIN_EMAIL:?SEED_ADMIN_EMAIL is required}
|
||||
Seed__AdminPassword: ${SEED_ADMIN_PASSWORD:?SEED_ADMIN_PASSWORD is required}
|
||||
Cors__AllowedOrigins__0: ${FRONTEND_PUBLIC_URL:?FRONTEND_PUBLIC_URL is required}
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--spider", "-q", "http://localhost:8080/health"]
|
||||
interval: 20s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
start_period: 20s
|
||||
|
||||
volumes:
|
||||
pg_data:
|
||||
Loading…
Reference in New Issue