version: '3.8' services: canva-connector-db: image: postgres:16-alpine environment: - POSTGRES_USER=canva - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-change-me} - POSTGRES_DB=canva_connector ports: - "5432:5432" volumes: - canva-connector-db:/var/lib/postgresql/data restart: unless-stopped canva-connector-dev: build: context: . dockerfile: Dockerfile.dev ports: - "3000:3000" command: ["sh", "-c", "cd frontend && pnpm dev --host"] volumes: - ./frontend:/home/node/app/frontend - /home/node/app/frontend/node_modules environment: - CI=true - NODE_ENV=development - VITE_CANVA_CLIENT_ID=${CANVA_CLIENT_ID:-} - VITE_CANVA_CLIENT_SECRET=${CANVA_CLIENT_SECRET:-} - VITE_AUTH0_DOMAIN=${VITE_AUTH0_DOMAIN:-} - VITE_AUTH0_CLIENT_ID=${VITE_AUTH0_CLIENT_ID:-} - VITE_AUTH0_AUDIENCE=${VITE_AUTH0_AUDIENCE:-} - VITE_AUTH0_REDIRECT_URI=${VITE_AUTH0_REDIRECT_URI:-http://localhost:3000/callback} stdin_open: true tty: true restart: unless-stopped healthcheck: test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:3000/').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"] interval: 30s timeout: 5s retries: 5 working_dir: /home/node/app canva-app-dev: build: context: . dockerfile: Dockerfile.dev ports: - "8081:8080" command: ["sh", "-c", "cd canva-app && if [ ! -f node_modules/vite/bin/vite.js ]; then pnpm install --shamefully-hoist --no-frozen-lockfile; fi; pnpm dev --host 0.0.0.0 --port 8080"] volumes: - ./canva-app:/home/node/app/canva-app - /home/node/app/canva-app/node_modules environment: - CI=true - NODE_ENV=development stdin_open: true tty: true restart: unless-stopped working_dir: /home/node/app canva-connector-api: build: context: . dockerfile: Dockerfile.api.dev network_mode: host volumes: # Mount source code for live reloading - ./server-go:/app/server-go # Persist session store between container restarts - canva-connector-api-data:/app/data environment: - CANVA_CLIENT_ID=${CANVA_CLIENT_ID:-} - CANVA_CLIENT_SECRET=${CANVA_CLIENT_SECRET:-} - CANVA_REDIRECT_URI=${CANVA_REDIRECT_URI:-http://127.0.0.1:4000/auth/canva/callback} - FRONTEND_SUCCESS_URL=${FRONTEND_SUCCESS_URL:-http://localhost:3000/connect} - FRONTEND_SETTINGS_URL=${FRONTEND_SETTINGS_URL:-http://localhost:3000/settings} - CANVA_SCOPES - CANVA_SCOPES_MIN=${CANVA_SCOPES_MIN:-} - CANVA_SCOPE_DEFAULT=${CANVA_SCOPE_DEFAULT:-full} - AUTH_JWT_SECRET=${AUTH_JWT_SECRET:-} - AUTH_JWT_TTL_HOURS=${AUTH_JWT_TTL_HOURS:-24} - AUTH_USER_STORE_PATH=${AUTH_USER_STORE_PATH:-/app/data/users.json} - YT_CLIENT_ID=${YT_CLIENT_ID:-} - YT_CLIENT_SECRET=${YT_CLIENT_SECRET:-} - YT_REFRESH_TOKEN=${YT_REFRESH_TOKEN:-} - YT_REDIRECT_URI=${YT_REDIRECT_URI:-http://127.0.0.1:4000/auth/youtube/callback} - YT_SCOPES=${YT_SCOPES:-} - X_BEARER_TOKEN=${X_BEARER_TOKEN:-} - AUTH0_DOMAIN=${AUTH0_DOMAIN:-} - AUTH0_AUDIENCE=${AUTH0_AUDIENCE:-} - AUTH_JWT_SECRET=${AUTH_JWT_SECRET:-} - AUTH_JWT_TTL_HOURS=${AUTH_JWT_TTL_HOURS:-24} - AUTH_USER_STORE_PATH=${AUTH_USER_STORE_PATH:-data/users.json} - USER_SETTINGS_STORE_PATH=${USER_SETTINGS_STORE_PATH:-data/user_settings.json} - ALLOW_SESSION_AUTH=${ALLOW_SESSION_AUTH:-true} - DATABASE_URL=${DATABASE_URL:-postgres://canva:${POSTGRES_PASSWORD:-change-me}@127.0.0.1:5432/canva_connector?sslmode=disable} - ENCRYPTION_KEY=${ENCRYPTION_KEY:-} - X_USER_ACCESS_TOKEN=${X_USER_ACCESS_TOKEN:-} - X_CLIENT_ID=${X_CLIENT_ID:-} - X_CLIENT_SECRET=${X_CLIENT_SECRET:-} - X_REDIRECT_URI=${X_REDIRECT_URI:-http://127.0.0.1:4000/auth/x/callback} - X_SCOPES=${X_SCOPES:-} - TIKTOK_ACCESS_TOKEN=${TIKTOK_ACCESS_TOKEN:-} - TIKTOK_OPEN_ID=${TIKTOK_OPEN_ID:-} - TIKTOK_PUBLISH_URL=${TIKTOK_PUBLISH_URL:-https://open.tiktokapis.com/v2/post/publish/video/init/} - TIKTOK_PUBLISH_STATUS_URL=${TIKTOK_PUBLISH_STATUS_URL:-https://open.tiktokapis.com/v2/post/publish/status/fetch/} - TIKTOK_CLIENT_KEY=${TIKTOK_CLIENT_KEY:-} - TIKTOK_CLIENT_SECRET=${TIKTOK_CLIENT_SECRET:-} - TIKTOK_REDIRECT_URI=${TIKTOK_REDIRECT_URI:-http://127.0.0.1:4000/auth/tiktok/callback} - TIKTOK_SCOPES=${TIKTOK_SCOPES:-} - FB_APP_ID=${FB_APP_ID:-} - FB_APP_SECRET=${FB_APP_SECRET:-} - FB_REDIRECT_URI=${FB_REDIRECT_URI:-http://127.0.0.1:4000/auth/facebook/callback} - FB_SCOPES=${FB_SCOPES:-} - FB_GRAPH_VERSION=${FB_GRAPH_VERSION:-v19.0} - FB_PAGE_ID=${FB_PAGE_ID:-} - FB_PAGE_ACCESS_TOKEN=${FB_PAGE_ACCESS_TOKEN:-} - IG_USER_ID=${IG_USER_ID:-} - IG_ACCESS_TOKEN=${IG_ACCESS_TOKEN:-} - IG_GRAPH_VERSION=${IG_GRAPH_VERSION:-v19.0} - SESSION_STORE_PATH=/app/data/sessions.json depends_on: - canva-connector-db restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://127.0.0.1:4000/ready"] interval: 30s timeout: 5s retries: 5 volumes: canva-connector-api-data: canva-connector-db: