services: # Note: MariaDB is external service. You can find more information about the configuration here: # https://hub.docker.com/_/mariadb db: # Note: Check the recommend version here: https://docs.nextcloud.com/server/latest/admin_manual/installation/system_requirements.html#server image: docker.io/library/mariadb:lts@sha256:ae6119716edac6998ae85508431b3d2e666530ddf4e94c61a10710caec9b0f71 restart: always command: --transaction-isolation=READ-COMMITTED volumes: - db:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=password - MYSQL_PASSWORD=password - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud # Note: Redis is an external service. You can find more information about the configuration here: # https://hub.docker.com/_/redis redis: image: docker.io/library/redis:alpine@sha256:59b6e694653476de2c992937ebe1c64182af4728e54bb49e9b7a6c26614d8933 restart: always app: image: docker.io/library/nextcloud:32.0.0@sha256:f9bec5c77a8d5603354b990550a4d24487deae6e589dd20ce870e43e28460e18 restart: always ports: - 0.0.0.0:8080:80 depends_on: - redis - db volumes: - nextcloud:/var/www/html - ./app-hooks/post-installation:/docker-entrypoint-hooks.d/post-installation:ro # Mount OIDC development directory outside /var/www/html to avoid rsync conflicts # The post-installation hook will register /opt/apps as an additional app directory - ./third_party/oidc:/opt/apps/oidc:ro environment: - NEXTCLOUD_TRUSTED_DOMAINS=app - NEXTCLOUD_ADMIN_USER=admin - NEXTCLOUD_ADMIN_PASSWORD=admin - MYSQL_PASSWORD=password - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MYSQL_HOST=db - REDIS_HOST=redis recipes: image: docker.io/library/nginx:alpine@sha256:61e01287e546aac28a3f56839c136b31f590273f3b41187a36f46f6a03bbfe22 restart: always volumes: - ./tests/fixtures/test_recipe.html:/usr/share/nginx/html/test_recipe.html:ro - ./tests/fixtures/nginx.conf:/etc/nginx/nginx.conf:ro mcp: build: . command: ["--transport", "streamable-http"] restart: always depends_on: - app ports: - 127.0.0.1:8000:8000 environment: - NEXTCLOUD_HOST=http://app:80 - NEXTCLOUD_USERNAME=admin - NEXTCLOUD_PASSWORD=admin mcp-oauth: build: . command: ["--transport", "streamable-http", "--oauth", "--port", "8001"] restart: always depends_on: - app ports: - 127.0.0.1:8001:8001 environment: - NEXTCLOUD_HOST=http://app:80 - NEXTCLOUD_MCP_SERVER_URL=http://localhost:8001 - NEXTCLOUD_PUBLIC_ISSUER_URL=http://localhost:8080 - NEXTCLOUD_OIDC_CLIENT_STORAGE=/app/.oauth/nextcloud_oauth_client.json - NEXTCLOUD_OIDC_SCOPES=openid profile email nc:read nc:write # No USERNAME/PASSWORD - will use OAuth with Dynamic Client Registration # Client credentials will be registered and stored in volume on first startup volumes: - oauth-client-storage:/app/.oauth mcp-oauth-jwt: build: . command: ["--transport", "streamable-http", "--oauth", "--port", "8002"] restart: always depends_on: - app ports: - 127.0.0.1:8002:8002 environment: - NEXTCLOUD_HOST=http://app:80 - NEXTCLOUD_MCP_SERVER_URL=http://localhost:8002 - NEXTCLOUD_PUBLIC_ISSUER_URL=http://localhost:8080 - NEXTCLOUD_OIDC_CLIENT_STORAGE=/app/.oauth-jwt/nextcloud_oauth_client.json - NEXTCLOUD_OIDC_SCOPES=openid profile email nc:read nc:write - NEXTCLOUD_OIDC_TOKEN_TYPE=jwt # No USERNAME/PASSWORD - will use OAuth with Dynamic Client Registration (DCR) # Client will be registered with token_type=JWT on first startup volumes: - oauth-jwt-client-storage:/app/.oauth-jwt volumes: nextcloud: db: oauth-client-storage: oauth-jwt-client-storage: