mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-04-29 23:39:35 -05:00
156 lines
6.3 KiB
YAML
156 lines
6.3 KiB
YAML
---
|
|
services:
|
|
traefik:
|
|
image: traefik:v2.9.1
|
|
networks:
|
|
opencloud-net:
|
|
aliases:
|
|
- ${OC_DOMAIN:-cloud.opencloud.test}
|
|
- ${KEYCLOAK_DOMAIN:-keycloak.opencloud.test}
|
|
command:
|
|
- "--log.level=${TRAEFIK_LOG_LEVEL:-ERROR}"
|
|
# letsencrypt configuration
|
|
- "--certificatesResolvers.http.acme.email=${TRAEFIK_ACME_MAIL:-example@example.org}"
|
|
- "--certificatesResolvers.http.acme.storage=/certs/acme.json"
|
|
- "--certificatesResolvers.http.acme.httpChallenge.entryPoint=http"
|
|
- "--certificatesResolvers.http.acme.caserver=${TRAEFIK_ACME_CASERVER:-https://acme-v02.api.letsencrypt.org/directory}"
|
|
# enable dashboard
|
|
- "--api.dashboard=true"
|
|
# define entrypoints
|
|
- "--entryPoints.http.address=:80"
|
|
- "--entryPoints.http.http.redirections.entryPoint.to=https"
|
|
- "--entryPoints.http.http.redirections.entryPoint.scheme=https"
|
|
- "--entryPoints.https.address=:443"
|
|
# docker provider (get configuration from container labels)
|
|
- "--providers.docker.endpoint=unix:///var/run/docker.sock"
|
|
- "--providers.docker.exposedByDefault=false"
|
|
# access log
|
|
- "--accessLog=true"
|
|
- "--accessLog.format=json"
|
|
- "--accessLog.fields.headers.names.X-Request-Id=keep"
|
|
ports:
|
|
- "80:80"
|
|
- "443:443"
|
|
volumes:
|
|
- "${DOCKER_SOCKET_PATH:-/var/run/docker.sock}:/var/run/docker.sock:ro"
|
|
- "certs:/certs"
|
|
labels:
|
|
- "traefik.enable=${TRAEFIK_DASHBOARD:-false}"
|
|
- "traefik.http.middlewares.traefik-auth.basicauth.users=${TRAEFIK_BASIC_AUTH_USERS:-admin:$$apr1$$4vqie50r$$YQAmQdtmz5n9rEALhxJ4l.}" # defaults to admin:admin
|
|
- "traefik.http.routers.traefik.entrypoints=https"
|
|
- "traefik.http.routers.traefik.rule=Host(`${TRAEFIK_DOMAIN:-traefik.opencloud.test}`)"
|
|
- "traefik.http.routers.traefik.middlewares=traefik-auth"
|
|
- "traefik.http.routers.traefik.tls.certresolver=http"
|
|
- "traefik.http.routers.traefik.service=api@internal"
|
|
logging:
|
|
driver: ${LOG_DRIVER:-local}
|
|
restart: always
|
|
|
|
opencloud:
|
|
image: ${OC_DOCKER_IMAGE:-opencloudeu/opencloud-rolling}:${OC_DOCKER_TAG:-latest}
|
|
networks:
|
|
opencloud-net:
|
|
entrypoint:
|
|
- /bin/sh
|
|
# run OpenCloud init to initialize a configuration file with random secrets
|
|
# it will fail on subsequent runs, because the config file already exists
|
|
# therefore we ignore the error and then start the OpenCloud server
|
|
command: ["-c", "opencloud init || true; opencloud server"]
|
|
environment:
|
|
# Keycloak IDP specific configuration
|
|
PROXY_AUTOPROVISION_ACCOUNTS: "true"
|
|
PROXY_ROLE_ASSIGNMENT_DRIVER: "oidc"
|
|
OC_OIDC_ISSUER: https://${KEYCLOAK_DOMAIN:-keycloak.opencloud.test}/realms/${KEYCLOAK_REALM:-openCloud}
|
|
PROXY_OIDC_REWRITE_WELLKNOWN: "true"
|
|
WEB_OIDC_CLIENT_ID: ${OC_OIDC_CLIENT_ID:-web}
|
|
# general config
|
|
OC_URL: https://${OC_DOMAIN:-cloud.opencloud.test}
|
|
OC_LOG_LEVEL: ${OC_LOG_LEVEL:-info}
|
|
OC_LOG_COLOR: "${OC_LOG_COLOR:-false}"
|
|
PROXY_TLS: "false" # do not use SSL between Traefik and OpenCloud
|
|
PROXY_USER_OIDC_CLAIM: "preferred_username"
|
|
PROXY_USER_CS3_CLAIM: "username"
|
|
# INSECURE: needed if OpenCloud / Traefik is using self generated certificates
|
|
OC_INSECURE: "${INSECURE:-false}"
|
|
OC_ADMIN_USER_ID: ""
|
|
OC_EXCLUDE_RUN_SERVICES: "idp"
|
|
GRAPH_ASSIGN_DEFAULT_USER_ROLE: "false"
|
|
GRAPH_USERNAME_MATCH: "none"
|
|
# password policies
|
|
OC_PASSWORD_POLICY_BANNED_PASSWORDS_LIST: "banned-password-list.txt"
|
|
PROXY_CSP_CONFIG_FILE_LOCATION: /etc/opencloud/csp.yaml
|
|
KEYCLOAK_DOMAIN: ${KEYCLOAK_DOMAIN:-keycloak.opencloud.test}
|
|
STORAGE_SYSTEM_DRIVER: "posix"
|
|
STORAGE_USERS_DRIVER: "posix"
|
|
STORAGE_USERS_ID_CACHE_STORE: "nats-js-kv"
|
|
volumes:
|
|
- ./config/opencloud/banned-password-list.txt:/etc/opencloud/banned-password-list.txt
|
|
- ./config/opencloud/csp.yaml:/etc/opencloud/csp.yaml
|
|
- opencloud-config:/etc/opencloud
|
|
- opencloud-data:/var/lib/opencloud
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.opencloud.entrypoints=https"
|
|
- "traefik.http.routers.opencloud.rule=Host(`${OC_DOMAIN:-cloud.opencloud.test}`)"
|
|
- "traefik.http.routers.opencloud.tls.certresolver=http"
|
|
- "traefik.http.routers.opencloud.service=opencloud"
|
|
- "traefik.http.services.opencloud.loadbalancer.server.port=9200"
|
|
logging:
|
|
driver: ${LOG_DRIVER:-local}
|
|
restart: always
|
|
|
|
postgres:
|
|
image: postgres:alpine
|
|
networks:
|
|
opencloud-net:
|
|
volumes:
|
|
- keycloak_postgres_data:/var/lib/postgresql/data
|
|
environment:
|
|
POSTGRES_DB: keycloak
|
|
POSTGRES_USER: keycloak
|
|
POSTGRES_PASSWORD: keycloak
|
|
logging:
|
|
driver: ${LOG_DRIVER:-local}
|
|
restart: always
|
|
|
|
keycloak:
|
|
image: quay.io/keycloak/keycloak:25.0.0
|
|
networks:
|
|
opencloud-net:
|
|
command: ["start", "--proxy=edge", "--spi-connections-http-client-default-disable-trust-manager=${INSECURE:-false}", "--import-realm"]
|
|
entrypoint: ["/bin/sh", "/opt/keycloak/bin/docker-entrypoint-override.sh"]
|
|
volumes:
|
|
- "./config/keycloak/docker-entrypoint-override.sh:/opt/keycloak/bin/docker-entrypoint-override.sh"
|
|
- "./config/keycloak/opencloud-realm.dist.json:/opt/keycloak/data/import-dist/opencloud-realm.json"
|
|
environment:
|
|
OC_DOMAIN: ${OC_DOMAIN:-cloud.opencloud.test}
|
|
KC_HOSTNAME: ${KEYCLOAK_DOMAIN:-keycloak.opencloud.test}
|
|
KC_DB: postgres
|
|
KC_DB_URL: "jdbc:postgresql://postgres:5432/keycloak"
|
|
KC_DB_USERNAME: keycloak
|
|
KC_DB_PASSWORD: keycloak
|
|
KC_FEATURES: impersonation
|
|
KEYCLOAK_ADMIN: ${KEYCLOAK_ADMIN_USER:-admin}
|
|
KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD:-admin}
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.keycloak.entrypoints=https"
|
|
- "traefik.http.routers.keycloak.rule=Host(`${KEYCLOAK_DOMAIN:-keycloak.opencloud.test}`)"
|
|
- "traefik.http.routers.keycloak.tls.certresolver=http"
|
|
- "traefik.http.routers.keycloak.service=keycloak"
|
|
- "traefik.http.services.keycloak.loadbalancer.server.port=8080"
|
|
depends_on:
|
|
- postgres
|
|
logging:
|
|
driver: ${LOG_DRIVER:-local}
|
|
restart: always
|
|
|
|
volumes:
|
|
certs:
|
|
opencloud-config:
|
|
opencloud-data:
|
|
keycloak_postgres_data:
|
|
|
|
networks:
|
|
opencloud-net:
|