# Cameleer Server (standalone) # Loaded in standalone deployment mode services: cameleer-traefik: volumes: - ./traefik-dynamic.yml:/etc/traefik/dynamic.yml:ro cameleer-postgres: image: postgres:16-alpine environment: POSTGRES_DB: ${POSTGRES_DB:-cameleer} healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER:-cameleer} -d $${POSTGRES_DB:-cameleer}"] cameleer-server: image: ${SERVER_IMAGE:-gitea.siegeln.net/cameleer/cameleer-server}:${VERSION:-latest} container_name: cameleer-server restart: unless-stopped depends_on: cameleer-postgres: condition: service_healthy environment: CAMELEER_SERVER_TENANT_ID: default SPRING_DATASOURCE_URL: jdbc:postgresql://cameleer-postgres:5432/${POSTGRES_DB:-cameleer}?currentSchema=tenant_default SPRING_DATASOURCE_USERNAME: ${POSTGRES_USER:-cameleer} SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD} CAMELEER_SERVER_CLICKHOUSE_URL: jdbc:clickhouse://cameleer-clickhouse:8123/cameleer CAMELEER_SERVER_CLICKHOUSE_USERNAME: default CAMELEER_SERVER_CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD} CAMELEER_SERVER_SECURITY_BOOTSTRAPTOKEN: ${BOOTSTRAP_TOKEN:?BOOTSTRAP_TOKEN must be set in .env} CAMELEER_SERVER_SECURITY_JWTSECRET: ${CAMELEER_SERVER_SECURITY_JWTSECRET:?CAMELEER_SERVER_SECURITY_JWTSECRET must be set in .env} CAMELEER_SERVER_SECURITY_UIUSER: ${SERVER_ADMIN_USER:-admin} CAMELEER_SERVER_SECURITY_UIPASSWORD: ${SERVER_ADMIN_PASS:?SERVER_ADMIN_PASS must be set in .env} CAMELEER_SERVER_SECURITY_CORSALLOWEDORIGINS: ${PUBLIC_PROTOCOL:-https}://${PUBLIC_HOST:-localhost} CAMELEER_SERVER_RUNTIME_ENABLED: "true" CAMELEER_SERVER_RUNTIME_SERVERURL: http://cameleer-server:8081 CAMELEER_SERVER_RUNTIME_ROUTINGDOMAIN: ${PUBLIC_HOST:-localhost} CAMELEER_SERVER_RUNTIME_ROUTINGMODE: path CAMELEER_SERVER_RUNTIME_JARSTORAGEPATH: /data/jars CAMELEER_SERVER_RUNTIME_DOCKERNETWORK: cameleer-apps CAMELEER_SERVER_RUNTIME_JARDOCKERVOLUME: cameleer-jars CAMELEER_SERVER_RUNTIME_BASEIMAGE: gitea.siegeln.net/cameleer/cameleer-runtime-base:${VERSION:-latest} labels: - traefik.enable=true - traefik.http.routers.server-api.rule=PathPrefix(`/api`) - traefik.http.routers.server-api.entrypoints=websecure - traefik.http.routers.server-api.tls=true - traefik.http.services.server-api.loadbalancer.server.port=8081 - traefik.docker.network=cameleer-traefik healthcheck: test: ["CMD-SHELL", "curl -sf http://localhost:8081/api/v1/health || exit 1"] interval: 10s timeout: 5s retries: 30 start_period: 30s volumes: - jars:/data/jars - cameleer-certs:/certs:ro - ${DOCKER_SOCKET:-/var/run/docker.sock}:/var/run/docker.sock group_add: - "${DOCKER_GID:-0}" networks: - cameleer - cameleer-traefik - cameleer-apps - monitoring cameleer-server-ui: image: ${SERVER_UI_IMAGE:-gitea.siegeln.net/cameleer/cameleer-server-ui}:${VERSION:-latest} restart: unless-stopped depends_on: cameleer-server: condition: service_healthy environment: CAMELEER_API_URL: http://cameleer-server:8081 BASE_PATH: "" labels: - traefik.enable=true - traefik.http.routers.ui.rule=PathPrefix(`/`) - traefik.http.routers.ui.priority=1 - traefik.http.routers.ui.entrypoints=websecure - traefik.http.routers.ui.tls=true - traefik.http.services.ui.loadbalancer.server.port=80 - traefik.docker.network=cameleer-traefik networks: - cameleer-traefik - monitoring volumes: jars: name: cameleer-jars networks: cameleer-apps: name: cameleer-apps driver: bridge monitoring: name: cameleer-monitoring-noop