--- name: portalbrasil-devsite services: traefik: image: traefik:v2.11 ports: - 80:80 labels: - traefik.enable=true - traefik.constraint-label=public - traefik.http.routers.traefik-public-http.rule=Host(`traefik.${STACK_HOSTNAME:-devsite.localhost}`) - traefik.http.routers.traefik-public-http.entrypoints=http - traefik.http.routers.traefik-public-http.service=api@internal - traefik.http.services.traefik-public.loadbalancer.server.port=8000 # GENERIC MIDDLEWARES - traefik.http.middlewares.gzip.compress=true - traefik.http.middlewares.gzip.compress.excludedcontenttypes=image/png, image/jpeg, font/woff2 volumes: - /var/run/docker.sock:/var/run/docker.sock:ro command: - --providers.docker - --providers.docker.constraints=Label(`traefik.constraint-label`, `public`) - --providers.docker.exposedbydefault=false - --entrypoints.http.address=:80 - --accesslog - --log - --api frontend: image: ghcr.io/portal-br/devsite-frontend:${DEVSITE_VERSION:-1.0.0a1} platform: linux/amd64 environment: RAZZLE_INTERNAL_API_PATH: http://backend:8080/Plone depends_on: - backend labels: - traefik.enable=true - traefik.constraint-label=public # Service - traefik.http.services.svc-frontend.loadbalancer.server.port=3000 # Routers ## / - traefik.http.routers.rt-frontend.rule=Host(`${STACK_HOSTNAME:-devsite.localhost}`) - traefik.http.routers.rt-frontend.entrypoints=http - traefik.http.routers.rt-frontend.service=svc-frontend - traefik.http.routers.rt-frontend.middlewares=gzip backend: image: ghcr.io/portal-br/devsite-backend:${DEVSITE_VERSION:-1.0.0a1} platform: linux/amd64 environment: RELSTORAGE_DSN: "dbname='${DB_NAME:-plone}' user='${DB_USER:-plone}' host='${DB_HOST:-db}' password='${DB_PASSWORD:-HxfQYJgHCtjM}' port='${DB_PORT:-5432}'" ZOPE_FORM_MEMORY_LIMIT: 250MB HONEYPOT_FIELD: your_email labels: - traefik.enable=true - traefik.constraint-label=public # Services - traefik.http.services.svc-backend.loadbalancer.server.port=8080 # Middlewares ## VHM rewrite /++api++/ - "traefik.http.middlewares.mw-backend-vhm-api.replacepathregex.regex=^/\\+\\+api\\+\\+($$|/.*)" - "traefik.http.middlewares.mw-backend-vhm-api.replacepathregex.replacement=/VirtualHostBase/http/${STACK_HOSTNAME:-devsite.localhost}/Plone/++api++/VirtualHostRoot$$1" ## VHM rewrite /ClassicUI/ - "traefik.http.middlewares.mw-backend-vhm-classic.replacepathregex.regex=^/ClassicUI($$|/.*)" - "traefik.http.middlewares.mw-backend-vhm-classic.replacepathregex.replacement=/VirtualHostBase/http/${STACK_HOSTNAME:-devsite.localhost}/Plone/VirtualHostRoot/_vh_ClassicUI$$1" ## Basic Authentication ### Note: all dollar signs in the hash need to be doubled for escaping. ### To create user:password pair, it's possible to use this command: ### echo $(htpasswd -nb user password) | sed -e s/\\$/\\$\\$/g ### Defaults to admin:admin - traefik.http.middlewares.mw-backend-auth.basicauth.headerField=X-Auth-ClassicUI - traefik.http.middlewares.mw-backend-auth.basicauth.users=admin:$$apr1$$uZPT5Fgu$$AmlIdamxT5ipBvPlsdfD70 # Routers - traefik.http.routers.rt-backend-api.rule=Host(`${STACK_HOSTNAME:-devsite.localhost}`) && (PathPrefix(`/++api++`)) - traefik.http.routers.rt-backend-api.entrypoints=http - traefik.http.routers.rt-backend-api.service=svc-backend - traefik.http.routers.rt-backend-api.middlewares=gzip,mw-backend-vhm-api ## /ClassicUI - traefik.http.routers.rt-backend-classic.rule=Host(`${STACK_HOSTNAME:-devsite.localhost}`) && PathPrefix(`/ClassicUI`) - traefik.http.routers.rt-backend-classic.entrypoints=http - traefik.http.routers.rt-backend-classic.service=svc-backend - traefik.http.routers.rt-backend-classic.middlewares=gzip,mw-backend-auth,mw-backend-vhm-classic ## admin - traefik.http.routers.rt-backend-admin.rule=Host(`admin.${STACK_HOSTNAME:-devsite.localhost}`) - traefik.http.routers.rt-backend-admin.entrypoints=http - traefik.http.routers.rt-backend-admin.service=svc-backend - traefik.http.routers.rt-backend-admin.middlewares=gzip,mw-backend-auth db: image: postgres:14 environment: POSTGRES_USER: ${DB_USER:-plone} POSTGRES_PASSWORD: ${DB_PASSWORD:-HxfQYJgHCtjM} POSTGRES_DB: ${DB_NAME:-plone} volumes: - vol-site-data:/var/lib/postgresql/data volumes: vol-site-data: {}