services: traefik: image: traefik:v3.6 command: - "--api.dashboard=true" - "--api.insecure=false" - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--certificatesresolvers.letsencrypt.acme.email=contact@mota-thomas.com" - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json" - "--certificatesresolvers.letsencrypt.acme.httpchallenge=true" - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web" environment: DOCKER_HOST: unix:///var/run/docker.sock DOCKER_API_VERSION: "1.54" ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - traefik_letsencrypt:/letsencrypt gitea-db: image: postgres:15 environment: POSTGRES_USER: gitea POSTGRES_PASSWORD: ${GITEA_DB_PASSWORD} POSTGRES_DB: gitea volumes: - gitea_db_data:/var/lib/postgresql/data gitea: image: gitea/gitea:latest depends_on: - gitea-db environment: GITEA__database__DB_TYPE: postgres GITEA__database__HOST: gitea-db:5432 GITEA__database__NAME: gitea GITEA__database__USER: gitea GITEA__database__PASSWD: ${GITEA_DB_PASSWORD} GITEA__server__ROOT_URL: https://gitea.mota-thomas.com/ volumes: - gitea_data:/data labels: - "traefik.enable=true" - "traefik.http.routers.gitea.rule=Host(`gitea.mota-thomas.com`)" - "traefik.http.routers.gitea.entrypoints=websecure" - "traefik.http.routers.gitea.tls.certresolver=letsencrypt" - "traefik.http.services.gitea.loadbalancer.server.port=3000" keycloak-db: image: postgres:15 environment: POSTGRES_DB: keycloak POSTGRES_USER: keycloak POSTGRES_PASSWORD: ${KEYCLOAK_DB_PASSWORD} volumes: - keycloak_db_data:/var/lib/postgresql/data keycloak: image: quay.io/keycloak/keycloak:24.0 command: start-dev environment: KC_DB: postgres KC_DB_URL_HOST: keycloak-db KC_DB_URL_DATABASE: keycloak KC_DB_USERNAME: keycloak KC_DB_PASSWORD: ${KEYCLOAK_DB_PASSWORD} KEYCLOAK_ADMIN: admin KEYCLOAK_ADMIN_PASSWORD: admin KC_HTTP_RELATIVE_PATH: /auth KC_PROXY_HEADERS: xforwarded KC_HOSTNAME_STRICT: false KC_HTTP_ENABLED: true depends_on: - keycloak-db labels: - "traefik.enable=true" - "traefik.http.routers.keycloak.rule=Host(`keycloak.mota-thomas.com`)" - "traefik.http.routers.keycloak.entrypoints=websecure" - "traefik.http.routers.keycloak.tls.certresolver=letsencrypt" - "traefik.http.services.keycloak.loadbalancer.server.port=8080" volumes: gitea_db_data: gitea_data: keycloak_db_data: traefik_letsencrypt: