Skip to content

Instantly share code, notes, and snippets.

@flomero
Last active August 31, 2025 17:15
Show Gist options
  • Save flomero/05b0dc85463f6b0b2fdea5901d29eb11 to your computer and use it in GitHub Desktop.
Save flomero/05b0dc85463f6b0b2fdea5901d29eb11 to your computer and use it in GitHub Desktop.
Twenty x Coolify using Docker Compose
name: twenty
services:
server:
image: 'twentycrm/twenty:${TAG:-latest}'
volumes:
- 'server-local-data:/app/packages/twenty-server/.local-storage'
ports:
- '3000:3000'
environment:
SERVICE_FQDN_SERVER_3000: null
NODE_PORT: 3000
PG_DATABASE_URL: 'postgres://$SERVICE_USER_POSTGRES:$SERVICE_PASSWORD_POSTGRES@${PG_DATABASE_HOST:-db}:${PG_DATABASE_PORT:-5432}/default'
SERVER_URL: $SERVICE_FQDN_SERVER
FRONTEND_URL: $SERVICE_FQDN_SERVER
REDIS_URL: '${REDIS_URL:-redis://redis:6379}'
DISABLE_DB_MIGRATIONS: '${DISABLE_DB_MIGRATIONS}'
DISABLE_CRON_JOBS_REGISTRATION: '${DISABLE_CRON_JOBS_REGISTRATION}'
STORAGE_TYPE: '${STORAGE_TYPE:-local}'
STORAGE_S3_REGION: '${STORAGE_S3_REGION}'
STORAGE_S3_NAME: '${STORAGE_S3_NAME}'
STORAGE_S3_ENDPOINT: '${STORAGE_S3_ENDPOINT}'
APP_SECRET: $SERVICE_BASE64_SERVER
AUTH_GOOGLE_ENABLED: '${AUTH_GOOGLE_ENABLED:-false}'
AUTH_GOOGLE_CLIENT_ID: $AUTH_GOOGLE_CLIENT_ID
AUTH_GOOGLE_CLIENT_SECRET: $AUTH_GOOGLE_CLIENT_SECRET
AUTH_GOOGLE_CALLBACK_URL: $AUTH_GOOGLE_CALLBACK_URL
# MESSAGING_PROVIDER_GMAIL_ENABLED: ${MESSAGING_PROVIDER_GMAIL_ENABLED}
# CALENDAR_PROVIDER_GOOGLE_ENABLED: ${CALENDAR_PROVIDER_GOOGLE_ENABLED}
# AUTH_GOOGLE_APIS_CALLBACK_URL: ${AUTH_GOOGLE_APIS_CALLBACK_URL}
# CALENDAR_PROVIDER_MICROSOFT_ENABLED: ${CALENDAR_PROVIDER_MICROSOFT_ENABLED}
# MESSAGING_PROVIDER_MICROSOFT_ENABLED: ${MESSAGING_PROVIDER_MICROSOFT_ENABLED}
# AUTH_MICROSOFT_ENABLED: ${AUTH_MICROSOFT_ENABLED}
# AUTH_MICROSOFT_CLIENT_ID: ${AUTH_MICROSOFT_CLIENT_ID}
# AUTH_MICROSOFT_CLIENT_SECRET: ${AUTH_MICROSOFT_CLIENT_SECRET}
# AUTH_MICROSOFT_CALLBACK_URL: ${AUTH_MICROSOFT_CALLBACK_URL}
# AUTH_MICROSOFT_APIS_CALLBACK_URL: ${AUTH_MICROSOFT_APIS_CALLBACK_URL}
EMAIL_FROM_ADDRESS: ${EMAIL_FROM_ADDRESS:[email protected]}
EMAIL_FROM_NAME: ${EMAIL_FROM_NAME:-"John from YourDomain"}
EMAIL_SYSTEM_ADDRESS: ${EMAIL_SYSTEM_ADDRESS:[email protected]}
EMAIL_DRIVER: ${EMAIL_DRIVER:-smtp}
EMAIL_SMTP_HOST: ${EMAIL_SMTP_HOST:-smtp.gmail.com}
EMAIL_SMTP_PORT: ${EMAIL_SMTP_PORT:-465}
EMAIL_SMTP_USER: ${EMAIL_SMTP_USER:-}
EMAIL_SMTP_PASSWORD: ${EMAIL_SMTP_PASSWORD:-}
depends_on:
db:
condition: service_healthy
healthcheck:
test: 'curl --fail http://localhost:3000/healthz'
interval: 5s
timeout: 5s
retries: 20
restart: always
worker:
image: 'twentycrm/twenty:${TAG:-latest}'
volumes:
- 'server-local-data:/app/packages/twenty-server/.local-storage'
command:
- yarn
- 'worker:prod'
environment:
PG_DATABASE_URL: 'postgres://$SERVICE_USER_POSTGRES:$SERVICE_PASSWORD_POSTGRES@${PG_DATABASE_HOST:-db}:${PG_DATABASE_PORT:-5432}/default'
SERVER_URL: $SERVICE_FQDN_SERVER
REDIS_URL: '${REDIS_URL:-redis://redis:6379}'
DISABLE_DB_MIGRATIONS: 'true'
DISABLE_CRON_JOBS_REGISTRATION: 'true'
STORAGE_TYPE: '${STORAGE_TYPE:-local}'
STORAGE_S3_REGION: '${STORAGE_S3_REGION}'
STORAGE_S3_NAME: '${STORAGE_S3_NAME}'
STORAGE_S3_ENDPOINT: '${STORAGE_S3_ENDPOINT}'
APP_SECRET: $SERVICE_BASE64_SERVER
depends_on:
db:
condition: service_healthy
server:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "pgrep -f 'worker:prod'"]
interval: 30s
timeout: 10s
retries: 5
restart: always
db:
image: 'postgres:16'
volumes:
- 'db-data:/var/lib/postgresql/data'
environment:
POSTGRES_USER: $SERVICE_USER_POSTGRES
POSTGRES_PASSWORD: $SERVICE_PASSWORD_POSTGRES
healthcheck:
test: 'pg_isready -U $SERVICE_USER_POSTGRES -h localhost -d postgres'
interval: 5s
timeout: 5s
retries: 10
restart: always
redis:
image: redis
restart: always
command:
- '--maxmemory-policy'
- noeviction
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 5s
retries: 10
volumes:
db-data: null
server-local-data: null
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment