services: database: image: ${MULTIFORUM_NEO4J_IMAGE:-neo4j:2026.10} restart: unless-stopped ports: - '${MULTIFORUM_BIND_ADDRESS:-127.0.0.1}:7474:7474' - '${MULTIFORUM_BIND_ADDRESS:-127.0.0.1}:7687:7687' environment: NEO4J_AUTH: 'neo4j/${NEO4J_PASSWORD:-multiforum-local-neo4j}' NEO4J_PLUGINS: '["apoc"]' NEO4J_dbms_security_procedures_unrestricted: 'apoc.*' NEO4J_dbms_default__database: neo4j NEO4J_dbms_logs_debug_level: INFO NEO4J_dbms_logs_query_enabled: 'OFF' NEO4J_dbms_memory_pagecache_size: 256M NEO4J_dbms_memory_heap_initial__size: 256M NEO4J_dbms_memory_heap_max__size: 512M volumes: - neo4j-data:/data - neo4j-logs:/logs - neo4j-import:/import - neo4j-plugins:/plugins healthcheck: test: [ 'CMD', 'cypher-shell', '-u', 'neo4j', '-p', '${NEO4J_PASSWORD:-multiforum-local-neo4j}', 'RETURN 1', ] interval: 10s timeout: 10s retries: 20 start_period: 30s networks: - multiforum-network backend: image: ${MULTIFORUM_BACKEND_IMAGE:-ghcr.io/gennit-project/multiforum-backend:edge} pull_policy: ${MULTIFORUM_BACKEND_PULL_POLICY:-always} restart: unless-stopped ports: - '${MULTIFORUM_BIND_ADDRESS:-127.0.0.1}:4000:4000' depends_on: database: condition: service_healthy environment: NODE_ENV: development ENVIRONMENT: local MULTIFORUM_AUTH_PROVIDER: local-dev MULTIFORUM_AUTO_PROVISION: 'true' MULTIFORUM_BOOTSTRAP_EMAIL: ${MULTIFORUM_BOOTSTRAP_EMAIL:-admin@multiforum.local} MULTIFORUM_BOOTSTRAP_USERNAME: ${MULTIFORUM_BOOTSTRAP_USERNAME:-admin} MULTIFORUM_BOOTSTRAP_PASSWORD: ${MULTIFORUM_BOOTSTRAP_PASSWORD:-multiforum-local-admin} SUPERADMIN_EMAIL: ${MULTIFORUM_BOOTSTRAP_EMAIL:-admin@multiforum.local} SERVER_CONFIG_NAME: ${MULTIFORUM_INSTANCE_NAME:-My Multiforum} NEO4J_URI: bolt://database:7687 NEO4J_USER: neo4j NEO4J_PASSWORD: ${NEO4J_PASSWORD:-multiforum-local-neo4j} AUTH0_DOMAIN: '' AUTH0_CLIENT_ID: '' GCS_BUCKET_NAME: '' GOOGLE_APPLICATION_CREDENTIALS: '' GOOGLE_CREDENTIALS_BASE64: '' SLACK_WEBHOOK_URL: '' healthcheck: test: [ 'CMD', 'node', '-e', "require('net').connect(4000, '127.0.0.1').on('connect', () => process.exit(0)).on('error', () => process.exit(1))", ] interval: 10s timeout: 5s retries: 30 start_period: 60s networks: - multiforum-network frontend: image: ${MULTIFORUM_FRONTEND_IMAGE:-ghcr.io/gennit-project/multiforum-nuxt:edge} pull_policy: ${MULTIFORUM_FRONTEND_PULL_POLICY:-always} restart: unless-stopped ports: - '${MULTIFORUM_BIND_ADDRESS:-127.0.0.1}:3000:3000' depends_on: backend: condition: service_healthy environment: - NUXT_PUBLIC_AUTH_PROVIDER=local-dev - NUXT_PUBLIC_BASE_URL=${MULTIFORUM_PUBLIC_FRONTEND_URL:-http://localhost:3000} - NUXT_PUBLIC_ENVIRONMENT=development - NUXT_PUBLIC_SERVER_NAME=${MULTIFORUM_INSTANCE_NAME:-My Multiforum} - NUXT_PUBLIC_SERVER_DISPLAY_NAME=${MULTIFORUM_INSTANCE_NAME:-My Multiforum} - NUXT_BACKEND_GRAPHQL_URL=http://backend:4000 - NUXT_LOCAL_AUTH_TOKEN_ENDPOINT=http://backend:4000/auth/local-dev/token # Optional instance branding, passed through only when the operator sets # it. These use the bare passthrough form deliberately: with # `KEY: ${VAR:-}` Compose would inject an empty string, and an empty # branding value means "hide this link" rather than "not configured", so # every deployment would silently lose its documentation and source # links. Unset variables are omitted entirely, leaving the application # defaults in place. See docs/frontend-runtime-configuration.md. - NUXT_PUBLIC_BRANDING_LOGO_URL - NUXT_PUBLIC_BRANDING_LOGO_DARK_URL - NUXT_PUBLIC_BRANDING_LOGO_ALT - NUXT_PUBLIC_BRANDING_FAVICON_URL - NUXT_PUBLIC_BRANDING_PRIMARY_COLOR - NUXT_PUBLIC_BRANDING_PRODUCT_NAME - NUXT_PUBLIC_BRANDING_DOCS_URL - NUXT_PUBLIC_BRANDING_SOURCE_URL - NUXT_PUBLIC_BRANDING_ISSUES_URL - NUXT_PUBLIC_BRANDING_SUPPORT_EMAIL - NUXT_PUBLIC_BRANDING_SHOW_UPSTREAM_LINKS - NUXT_PUBLIC_BRANDING_CUSTOM_FOOTER_LINKS - NUXT_PUBLIC_BRANDING_LOCKED healthcheck: test: [ 'CMD', 'node', '-e', "fetch('http://127.0.0.1:3000').then(response => process.exit(response.ok ? 0 : 1)).catch(() => process.exit(1))", ] interval: 10s timeout: 5s retries: 12 start_period: 30s logging: driver: json-file options: max-size: 10m max-file: '3' networks: - multiforum-network networks: multiforum-network: driver: bridge volumes: neo4j-data: neo4j-logs: neo4j-import: neo4j-plugins: