services: migrator: image: ghcr.io/kanbn/kan-migrate:latest container_name: ${MIGRATOR_CONTAINER_NAME:-kan-migrate} build: context: .. dockerfile: apps/web/Dockerfile target: migrate networks: - dokploy-network environment: - POSTGRES_URL=${POSTGRES_URL} restart: "no" web: image: ghcr.io/kanbn/kan:latest container_name: ${CONTAINER_NAME:-kan-web} ports: - "${WEB_PORT:-3000}:3000" networks: - dokploy-network build: context: .. dockerfile: apps/web/Dockerfile target: web args: APP_VERSION: ${APP_VERSION:-} env_file: - .env restart: unless-stopped environment: - KAN_ADMIN_API_KEY=${KAN_ADMIN_API_KEY} - NEXT_PUBLIC_KAN_ENV=${NEXT_PUBLIC_KAN_ENV} - NEXT_PUBLIC_BASE_URL=${NEXT_PUBLIC_BASE_URL} - BETTER_AUTH_SECRET=${BETTER_AUTH_SECRET} - POSTGRES_URL=${POSTGRES_URL} - NEXT_PUBLIC_USE_STANDALONE_OUTPUT=${NEXT_PUBLIC_USE_STANDALONE_OUTPUT} - REDIS_URL=${REDIS_URL} # Logging (optional - debug, info, warn, error; defaults to debug in dev, info in prod) - LOG_LEVEL=${LOG_LEVEL} - AXIOM_TOKEN=${AXIOM_TOKEN} - AXIOM_DATASET=${AXIOM_DATASET} # Stripe - STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY} - STRIPE_WEBHOOK_SECRET=${STRIPE_WEBHOOK_SECRET} - STRIPE_WEBHOOK_SECRET_LEGACY=${STRIPE_WEBHOOK_SECRET_LEGACY} - STRIPE_TEAM_PLAN_MONTHLY_PRICE_ID=${STRIPE_TEAM_PLAN_MONTHLY_PRICE_ID} - STRIPE_TEAM_PLAN_YEARLY_PRICE_ID=${STRIPE_TEAM_PLAN_YEARLY_PRICE_ID} - STRIPE_PRO_PLAN_MONTHLY_PRICE_ID=${STRIPE_PRO_PLAN_MONTHLY_PRICE_ID} - STRIPE_PRO_PLAN_YEARLY_PRICE_ID=${STRIPE_PRO_PLAN_YEARLY_PRICE_ID} # Email - SMTP_HOST=${SMTP_HOST} - SMTP_PORT=${SMTP_PORT} - SMTP_USER=${SMTP_USER} - SMTP_PASSWORD=${SMTP_PASSWORD} - SMTP_SECURE=${SMTP_SECURE} - EMAIL_FROM=${EMAIL_FROM} - SMTP_REJECT_UNAUTHORIZED=${SMTP_REJECT_UNAUTHORIZED} # Notifications - SUBSCRIBER_API_URL=${SUBSCRIBER_API_URL} - SUBSCRIBER_API_KEY=${SUBSCRIBER_API_KEY} - SUBSCRIBER_ENVIRONMENT_ID=${SUBSCRIBER_ENVIRONMENT_ID} # S3 storage - S3_ACCESS_KEY_ID=${S3_ACCESS_KEY_ID} - S3_SECRET_ACCESS_KEY=${S3_SECRET_ACCESS_KEY} - S3_REGION=${S3_REGION} - S3_ENDPOINT=${S3_ENDPOINT} - S3_FORCE_PATH_STYLE=${S3_FORCE_PATH_STYLE} - S3_AVATAR_UPLOAD_LIMIT=${S3_AVATAR_UPLOAD_LIMIT} - NEXT_PUBLIC_STORAGE_URL=${NEXT_PUBLIC_STORAGE_URL} - NEXT_PUBLIC_AVATAR_BUCKET_NAME=${NEXT_PUBLIC_AVATAR_BUCKET_NAME} - NEXT_PUBLIC_ATTACHMENTS_BUCKET_NAME=${NEXT_PUBLIC_ATTACHMENTS_BUCKET_NAME} - NEXT_PUBLIC_STORAGE_DOMAIN=${NEXT_PUBLIC_STORAGE_DOMAIN} - NEXT_PUBLIC_USE_VIRTUAL_HOSTED_URLS=${NEXT_PUBLIC_USE_VIRTUAL_HOSTED_URLS} # Auth config (optional) - NEXT_PUBLIC_ALLOW_CREDENTIALS=${NEXT_PUBLIC_ALLOW_CREDENTIALS} - NEXT_PUBLIC_DISABLE_SIGN_UP=${NEXT_PUBLIC_DISABLE_SIGN_UP} # API configuration (optional) - NEXT_API_BODY_SIZE_LIMIT=${NEXT_API_BODY_SIZE_LIMIT} # Integration providers - TRELLO_APP_API_KEY=${TRELLO_APP_API_KEY} - TRELLO_APP_SECRET=${TRELLO_APP_SECRET} # OAuth providers (optional) - BETTER_AUTH_TRUSTED_ORIGINS=${BETTER_AUTH_TRUSTED_ORIGINS} - GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID} - GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET} - BETTER_AUTH_ALLOWED_DOMAINS=${BETTER_AUTH_ALLOWED_DOMAINS} # Analytics - NEXT_PUBLIC_UMAMI_ID=${NEXT_PUBLIC_UMAMI_ID} - NEXT_PUBLIC_POSTHOG_KEY=${NEXT_PUBLIC_POSTHOG_KEY} - NEXT_PUBLIC_POSTHOG_HOST=${NEXT_PUBLIC_POSTHOG_HOST} # Partner config (optional) - NEXT_PUBLIC_PARTNER_NAME=${NEXT_PUBLIC_PARTNER_NAME} - PARTNER_CLIENT_ID=${PARTNER_CLIENT_ID} - PARTNER_CLIENT_SECRET=${PARTNER_CLIENT_SECRET} - PARTNER_REDIRECT_URL=${PARTNER_REDIRECT_URL} - PARTNER_TOKEN_URL=${PARTNER_TOKEN_URL} - PARTNER_OAUTH_LICENSE_URL=${PARTNER_OAUTH_LICENSE_URL} - PARTNER_LICENSE_API_URL=${PARTNER_LICENSE_API_URL} - PARTNER_API_KEY=${PARTNER_API_KEY} - PARTNER_API_KEY_HEADER=${PARTNER_API_KEY_HEADER} - PARTNER_SIGNATURE_HEADER=${PARTNER_SIGNATURE_HEADER} - PARTNER_TIMESTAMP_HEADER=${PARTNER_TIMESTAMP_HEADER} depends_on: migrator: condition: service_completed_successfully networks: dokploy-network: external: true #bump