feat: add infrastructure container definitions and update documentation

This commit is contained in:
Tiago Yamamoto 2026-02-14 12:23:56 -06:00
parent 975557e10c
commit 6529b5cd8b
11 changed files with 214 additions and 0 deletions

View file

@ -0,0 +1,12 @@
[Unit]
Description=GoHorseJobs Backend Dev
After=network-online.target
[Service]
Restart=always
ExecStartPre=-/usr/bin/podman rm -f gohorsejobs-backend-dev
ExecStart=/usr/bin/podman run --name gohorsejobs-backend-dev --rm --network web_proxy -v /mnt/data/gohorsejobs/backend:/app:Z -w /app -p 8080:8080 -e PORT=8080 -e DB_HOST=postgres-main -e DB_PORT=5432 -e DB_USER=saveinmed -e DB_PASSWORD=4J4ZTLY4Ks34geDVvjOiLWKor8n4J4 -e DB_NAME=gohorsejobs -e DB_SSLMODE=disable --label traefik.enable=true --label "traefik.http.routers.gohorse-backend.rule=Host(`api-local.gohorsejobs.com`)" --label traefik.http.routers.gohorse-backend.entrypoints=websecure --label traefik.http.routers.gohorse-backend.tls.certresolver=main --label traefik.http.services.gohorse-backend.loadbalancer.server.port=8080 golang:1.24 go run ./cmd/api/main.go
ExecStop=/usr/bin/podman stop -t 10 gohorsejobs-backend-dev
[Install]
WantedBy=multi-user.target

View file

@ -0,0 +1,12 @@
[Unit]
Description=GoHorseJobs Backoffice Dev
After=network-online.target
[Service]
Restart=always
ExecStartPre=-/usr/bin/podman rm -f gohorsejobs-backoffice-dev
ExecStart=/usr/bin/podman run --name gohorsejobs-backoffice-dev --rm --network web_proxy -v /mnt/data/gohorsejobs/backoffice:/app:Z -w /app -p 3001:3001 -e PORT=3001 -e DATABASE_URL=postgresql://saveinmed:4J4ZTLY4Ks34geDVvjOiLWKor8n4J4@postgres-main:5432/gohorsejobs --label traefik.enable=true --label "traefik.http.routers.gohorse-backoffice.rule=Host(`b-local.gohorsejobs.com`)" --label traefik.http.routers.gohorse-backoffice.entrypoints=websecure --label traefik.http.routers.gohorse-backoffice.tls.certresolver=main --label traefik.http.services.gohorse-backoffice.loadbalancer.server.port=3001 node:20 npm run start:dev
ExecStop=/usr/bin/podman stop -t 10 gohorsejobs-backoffice-dev
[Install]
WantedBy=multi-user.target

View file

@ -0,0 +1,12 @@
[Unit]
Description=GoHorseJobs Frontend Dev
After=network-online.target
[Service]
Restart=always
ExecStartPre=-/usr/bin/podman rm -f gohorsejobs-frontend-dev
ExecStart=/usr/bin/podman run --name gohorsejobs-frontend-dev --rm --network web_proxy -v /mnt/data/gohorsejobs/frontend:/app:Z -w /app -p 3000:3000 --label traefik.enable=true --label "traefik.http.routers.gohorse-frontend.rule=Host(`dev-local.gohorsejobs.com`)" --label traefik.http.routers.gohorse-frontend.entrypoints=websecure --label traefik.http.routers.gohorse-frontend.tls.certresolver=main --label traefik.http.services.gohorse-frontend.loadbalancer.server.port=3000 node:20 npm run dev
ExecStop=/usr/bin/podman stop -t 10 gohorsejobs-frontend-dev
[Install]
WantedBy=multi-user.target

View file

@ -0,0 +1,29 @@
[Unit]
Description=PostgreSQL Database (NC2)
After=network-online.target
[Container]
ContainerName=postgres
Image=docker.io/library/postgres:16-alpine
Environment=POSTGRES_USER=admin
Environment=POSTGRES_PASSWORD=sua_senha_segura
Environment=POSTGRES_DB=app_db
# Existing volume on NC2
Volume=/mnt/postgres/data:/var/lib/postgresql/data:Z
Network=web_proxy
NetworkAlias=postgres
# External Access via Traefik (TCP Over TLS)
Label=traefik.enable=true
Label=traefik.tcp.routers.postgres-nc2.rule=HostSNI(`db.nc2.rede5.com.br`)
Label=traefik.tcp.routers.postgres-nc2.entrypoints=websecure
Label=traefik.tcp.routers.postgres-nc2.tls=true
Label=traefik.tcp.routers.postgres-nc2.tls.certresolver=myresolver
Label=traefik.tcp.services.postgres-nc2.loadbalancer.server.port=5432
Label=traefik.docker.network=web_proxy
[Install]
WantedBy=multi-user.target

View file

@ -0,0 +1,28 @@
[Unit]
Description=PostgreSQL Main Database
After=network-online.target
[Container]
ContainerName=postgres-main
Image=docker.io/library/postgres:17-alpine
Environment=POSTGRES_USER=saveinmed
Environment=POSTGRES_PASSWORD=ZTLY4Ks34geDVvjOiLWKor8n4J4
Environment=POSTGRES_DB=saveinmed
Volume=/mnt/data/postgres:/var/lib/postgresql/data:Z
Network=web_proxy
NetworkAlias=postgres-main
# External Access via Traefik (TCP Over TLS)
Label=traefik.enable=true
Label=traefik.tcp.routers.postgres-main.rule=HostSNI(`db.nc1.rede5.com.br`)
Label=traefik.tcp.routers.postgres-main.entrypoints=websecure
Label=traefik.tcp.routers.postgres-main.tls=true
Label=traefik.tcp.routers.postgres-main.tls.certresolver=myresolver
Label=traefik.tcp.services.postgres-main.loadbalancer.server.port=5432
Label=traefik.docker.network=web_proxy
[Install]
WantedBy=multi-user.target

View file

@ -0,0 +1,15 @@
[Unit]
Description=Q1-Total Backend Dev
After=network-online.target
[Container]
Image=docker.io/python:3.12
Volume=/mnt/data/q1-total-dev/backend:/app:z
PodmanArgs=--publish=8001:8000 --env=PORT=8000
Exec=sh -c "cd /app && pip install uv && uv sync && uv run uvicorn app.main:app --host 0.0.0.0 --port 8000"
Label=traefik.enable=true
Label=traefik.http.routers.q1-backend-dev.rule=Host('api-dev.q1-total.com.br')
Label=traefik.http.services.q1-backend-dev.loadbalancer.server.port=8000
[Service]
Restart=always

View file

@ -0,0 +1,15 @@
[Unit]
Description=Q1-Total Dashboard Dev
After=network-online.target
[Container]
Image=docker.io/node:20
Volume=/mnt/data/q1-total-dev/dashboard:/app:z
PodmanArgs=--publish=3002:5173 --env=PORT=5173
Exec=sh -c "cd /app && npm install && npm run dev -- --host 0.0.0.0"
Label=traefik.enable=true
Label=traefik.http.routers.q1-dashboard-dev.rule=Host('dashboard-dev.q1-total.com.br')
Label=traefik.http.services.q1-dashboard-dev.loadbalancer.server.port=5173
[Service]
Restart=always

View file

@ -0,0 +1,15 @@
[Unit]
Description=Traefik Service
After=network-online.target
[Container]
Image=docker.io/library/traefik:latest
PublishPort=80:80
PublishPort=443:443
Volume=/run/podman/podman.sock:/var/run/docker.sock:Z
Volume=/opt/traefik/letsencrypt:/letsencrypt:Z
Network=web_proxy
Exec=--providers.docker=true --providers.docker.exposedbydefault=false --entrypoints.web.address=:80 --entrypoints.websecure.address=:443 --certificatesresolvers.main.acme.email=saveinmed@gmail.com --certificatesresolvers.main.acme.storage=/letsencrypt/acme.json --certificatesresolvers.main.acme.httpchallenge.entrypoint=web
[Install]
WantedBy=multi-user.target

View file

@ -0,0 +1,14 @@
[Unit]
Description=Uptime Kuma
After=network-online.target
[Container]
Image=louislam/uptime-kuma:1
Volume=/mnt/data/uptime-kuma:/app/data:Z
PublishPort=3005:3001
[Service]
Restart=always
[Install]
WantedBy=multi-user.target

View file

@ -0,0 +1,25 @@
[Unit]
Description=Vaultwarden Password Manager
After=network-online.target postgres.service
[Service]
Restart=always
[Container]
Image=docker.io/vaultwarden/server:latest
ContainerName=vaultwarden
Volume=/mnt/data/vaultwarden:/data:Z
Environment=DATABASE_URL=postgresql://saveinmed:ZTLYe7OIBQDVvjOiLWKor8n4J4Ks34ge@postgres-main:5432/vaultwarden
Environment=DOMAIN=https://vault.rede5.com.br
Environment=SIGNUPS_ALLOWED=true
Environment=ADMIN_TOKEN=
PublishPort=8090:80
Network=web_proxy
Label=traefik.enable=true
Label=traefik.http.routers.vaultwarden.rule=Host(`vault.rede5.com.br`)
Label=traefik.http.routers.vaultwarden.entrypoints=websecure
Label=traefik.http.routers.vaultwarden.tls.certresolver=myresolver
Label=traefik.http.services.vaultwarden.loadbalancer.server.port=80
[Install]
WantedBy=multi-user.target

View file

@ -0,0 +1,37 @@
[Unit]
Description=Virtual Fashion MinIO
After=network-online.target
[Container]
Image=docker.io/minio/minio:latest
AutoUpdate=registry
Environment=MINIO_ROOT_USER=virtual_fashion_admin
Environment=MINIO_ROOT_PASSWORD=VF_m1n10_s3cur3_p@ssw0rd_2025
Environment=MINIO_BROWSER_REDIRECT_URL=https://minio-console.virtualfashion.com.br
Volume=/mnt/data/virtual-fashion/minio:/data:Z
Exec=server /data --console-address ":9001"
Network=web_proxy
NetworkAlias=minio
# Traefik (API)
Label=traefik.enable=true
Label=traefik.http.routers.virtual-fashion-minio.rule=Host(`minio.virtualfashion.com.br`) || Host(`minio-dev.virtualfashion.com.br`)
Label=traefik.http.routers.virtual-fashion-minio.entrypoints=websecure
Label=traefik.http.routers.virtual-fashion-minio.tls.certresolver=myresolver
Label=traefik.http.routers.virtual-fashion-minio.service=virtual-fashion-minio-api
Label=traefik.http.services.virtual-fashion-minio-api.loadbalancer.server.port=9000
# Traefik (Console)
Label=traefik.http.routers.virtual-fashion-minio-console.rule=Host(`minio-console.virtualfashion.com.br`) || Host(`minio-console-dev.virtualfashion.com.br`)
Label=traefik.http.routers.virtual-fashion-minio-console.entrypoints=websecure
Label=traefik.http.routers.virtual-fashion-minio-console.tls.certresolver=myresolver
Label=traefik.http.routers.virtual-fashion-minio-console.service=virtual-fashion-minio-console
Label=traefik.http.services.virtual-fashion-minio-console.loadbalancer.server.port=9001
Label=traefik.docker.network=web_proxy
[Install]
WantedBy=multi-user.target