rtrips-online/docker-compose.yml

90 lines
3.1 KiB
YAML

services:
rtrips:
build:
context: ..
dockerfile: rtrips-online/Dockerfile
container_name: rtrips-online
restart: unless-stopped
environment:
- DATABASE_URL=postgresql://rtrips:${DB_PASSWORD}@rtrips-postgres:5432/rtrips
- LITELLM_URL=${LITELLM_URL:-http://litellm:4000}
- LITELLM_API_KEY=${LITELLM_API_KEY}
- GEMINI_API_KEY=${GEMINI_API_KEY:-}
- NEXT_PUBLIC_RSPACE_URL=${NEXT_PUBLIC_RSPACE_URL:-https://rspace.online}
- RSPACE_INTERNAL_URL=${RSPACE_INTERNAL_URL:-http://rspace-online:3000}
- NEXT_PUBLIC_ENCRYPTID_SERVER_URL=${NEXT_PUBLIC_ENCRYPTID_SERVER_URL:-https://auth.ridentity.online}
- RNOTES_INTERNAL_URL=${RNOTES_INTERNAL_URL:-http://rnotes-online:3000}
- RVOTE_INTERNAL_URL=${RVOTE_INTERNAL_URL:-http://rvote-online-rvote-1:3000}
- RCART_INTERNAL_URL=${RCART_INTERNAL_URL:-http://rcart-online:3000}
- ORS_BASE_URL=${ORS_BASE_URL:-https://routing.jeffemmett.com}
- ORS_PUBLIC_URL=${ORS_PUBLIC_URL:-https://api.openrouteservice.org}
- ORS_PUBLIC_KEY=${ORS_PUBLIC_KEY:-}
- NEXT_PUBLIC_BASE_PATH=/rtrips
labels:
- "traefik.enable=true"
# Primary: serve app at rspace.online/rtrips (basePath handles prefix)
- "traefik.http.routers.rtrips.rule=Host(`rspace.online`) && PathPrefix(`/rtrips`)"
- "traefik.http.routers.rtrips.priority=115"
- "traefik.http.services.rtrips.loadbalancer.server.port=3000"
# Redirect: rtrips.online → rspace.online/rtrips
- "traefik.http.routers.rtrips-redirect.rule=Host(`rtrips.online`) || Host(`www.rtrips.online`)"
- "traefik.http.routers.rtrips-redirect.priority=130"
- "traefik.http.routers.rtrips-redirect.middlewares=rtrips-to-rspace"
- "traefik.http.routers.rtrips-redirect.service=rtrips"
- "traefik.http.middlewares.rtrips-to-rspace.redirectregex.regex=^https?://(?:www\\.)?rtrips\\.online(.*)"
- "traefik.http.middlewares.rtrips-to-rspace.redirectregex.replacement=https://rspace.online/rtrips$${1}"
- "traefik.http.middlewares.rtrips-to-rspace.redirectregex.permanent=true"
networks:
- traefik-public
- rtrips-internal
- ai-internal
depends_on:
rtrips-postgres:
condition: service_healthy
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
read_only: true
tmpfs:
- /tmp
- /home/nextjs/.npm
rtrips-postgres:
image: postgres:16-alpine
container_name: rtrips-postgres
restart: unless-stopped
environment:
- POSTGRES_USER=rtrips
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_DB=rtrips
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- rtrips-internal
healthcheck:
test: ["CMD-SHELL", "pg_isready -U rtrips -d rtrips"]
interval: 5s
timeout: 5s
retries: 5
cap_drop:
- ALL
cap_add:
- DAC_OVERRIDE
- FOWNER
- SETGID
- SETUID
security_opt:
- no-new-privileges:true
networks:
traefik-public:
external: true
ai-internal:
external: true
rtrips-internal:
internal: true
volumes:
postgres_data: