From 374c93186d4d9bbded2341b73e72570b5e8f2a38 Mon Sep 17 00:00:00 2001 From: James Turland Date: Thu, 3 Jul 2025 10:28:22 +0100 Subject: [PATCH] twenty --- Twenty/.env | 18 +++++ Twenty/docker-compose.yaml | 155 +++++++++++++++++++++++++++++++++++++ 2 files changed, 173 insertions(+) create mode 100644 Twenty/.env create mode 100644 Twenty/docker-compose.yaml diff --git a/Twenty/.env b/Twenty/.env new file mode 100644 index 0000000..891d2e5 --- /dev/null +++ b/Twenty/.env @@ -0,0 +1,18 @@ +TAG=latest + +#PG_DATABASE_USER=postgres +PG_DATABASE_PASSWORD=fce184f90775eed9fb451e2fab23bc00a81e2fb6819002ae48a27f0719b7baaa +#PG_DATABASE_HOST=db +#PG_DATABASE_PORT=5432 +#REDIS_URL=redis://redis:6379 + +SERVER_URL=https://twenty.jimsgarage.co.uk + +# Use openssl rand -base64 32 for each secret +APP_SECRET=xjwtdYVQo4l/ce1LDF5qhmvYx4Zzhb7l2k0YL704EvM= + +STORAGE_TYPE=local + +# STORAGE_S3_REGION=eu-west3 +# STORAGE_S3_NAME=my-bucket +# STORAGE_S3_ENDPOINT= \ No newline at end of file diff --git a/Twenty/docker-compose.yaml b/Twenty/docker-compose.yaml new file mode 100644 index 0000000..2400562 --- /dev/null +++ b/Twenty/docker-compose.yaml @@ -0,0 +1,155 @@ +name: twenty + +services: + server: + image: twentycrm/twenty:${TAG:-latest} + volumes: + - server-local-data:/app/packages/twenty-server/.local-storage + ports: + - "3000:3000" + environment: + NODE_PORT: 3000 + PG_DATABASE_URL: postgres://${PG_DATABASE_USER:-postgres}:${PG_DATABASE_PASSWORD:-postgres}@${PG_DATABASE_HOST:-db}:${PG_DATABASE_PORT:-5432}/default + SERVER_URL: ${SERVER_URL} + 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} + STORAGE_S3_REGION: ${STORAGE_S3_REGION} + STORAGE_S3_NAME: ${STORAGE_S3_NAME} + STORAGE_S3_ENDPOINT: ${STORAGE_S3_ENDPOINT} + + APP_SECRET: ${APP_SECRET:-replace_me_with_a_random_string} + # MESSAGING_PROVIDER_GMAIL_ENABLED: ${MESSAGING_PROVIDER_GMAIL_ENABLED} + # CALENDAR_PROVIDER_GOOGLE_ENABLED: ${CALENDAR_PROVIDER_GOOGLE_ENABLED} + # AUTH_GOOGLE_CLIENT_ID: ${AUTH_GOOGLE_CLIENT_ID} + # AUTH_GOOGLE_CLIENT_SECRET: ${AUTH_GOOGLE_CLIENT_SECRET} + # AUTH_GOOGLE_CALLBACK_URL: ${AUTH_GOOGLE_CALLBACK_URL} + # 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:-contact@yourdomain.com} + # EMAIL_FROM_NAME: ${EMAIL_FROM_NAME:-"John from YourDomain"} + # EMAIL_SYSTEM_ADDRESS: ${EMAIL_SYSTEM_ADDRESS:-system@yourdomain.com} + # 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 + networks: + - proxy + - twenty + labels: + - "traefik.enable=true" + - "traefik.docker.network=proxy" + - "traefik.http.routers.twenty.entrypoints=http" + - "traefik.http.routers.twenty.rule=Host(`twenty.jimsgarage.co.uk`)" + - "traefik.http.middlewares.twenty-https-redirect.redirectscheme.scheme=https" + - "traefik.http.routers.twenty.middlewares=twenty-https-redirect" + - "traefik.http.routers.twenty-secure.entrypoints=https" + - "traefik.http.routers.twenty-secure.rule=Host(`twenty.jimsgarage.co.uk`)" + - "traefik.http.routers.twenty-secure.tls=true" + - "traefik.http.routers.twenty-secure.tls.certresolver=cloudflare" + - "traefik.http.routers.twenty-secure.service=twenty" + - "traefik.http.services.twenty.loadbalancer.server.port=3000" + + 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://${PG_DATABASE_USER:-postgres}:${PG_DATABASE_PASSWORD:-postgres}@${PG_DATABASE_HOST:-db}:${PG_DATABASE_PORT:-5432}/default + SERVER_URL: ${SERVER_URL} + REDIS_URL: ${REDIS_URL:-redis://redis:6379} + DISABLE_DB_MIGRATIONS: "true" # it already runs on the server + DISABLE_CRON_JOBS_REGISTRATION: "true" # it already runs on the server + + STORAGE_TYPE: ${STORAGE_TYPE} + STORAGE_S3_REGION: ${STORAGE_S3_REGION} + STORAGE_S3_NAME: ${STORAGE_S3_NAME} + STORAGE_S3_ENDPOINT: ${STORAGE_S3_ENDPOINT} + + APP_SECRET: ${APP_SECRET:-replace_me_with_a_random_string} + # MESSAGING_PROVIDER_GMAIL_ENABLED: ${MESSAGING_PROVIDER_GMAIL_ENABLED} + # CALENDAR_PROVIDER_GOOGLE_ENABLED: ${CALENDAR_PROVIDER_GOOGLE_ENABLED} + # AUTH_GOOGLE_CLIENT_ID: ${AUTH_GOOGLE_CLIENT_ID} + # AUTH_GOOGLE_CLIENT_SECRET: ${AUTH_GOOGLE_CLIENT_SECRET} + # AUTH_GOOGLE_CALLBACK_URL: ${AUTH_GOOGLE_CALLBACK_URL} + # 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:-contact@yourdomain.com} + # EMAIL_FROM_NAME: ${EMAIL_FROM_NAME:-"John from YourDomain"} + # EMAIL_SYSTEM_ADDRESS: ${EMAIL_SYSTEM_ADDRESS:-system@yourdomain.com} + # 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 + server: + condition: service_healthy + restart: always + networks: + - twenty + + db: + image: postgres:16 + volumes: + - db-data:/var/lib/postgresql/data + environment: + POSTGRES_USER: ${PG_DATABASE_USER:-postgres} + POSTGRES_PASSWORD: ${PG_DATABASE_PASSWORD:-postgres} + healthcheck: + test: pg_isready -U ${PG_DATABASE_USER:-postgres} -h localhost -d postgres + interval: 5s + timeout: 5s + retries: 10 + restart: always + networks: + - twenty + + redis: + image: redis + restart: always + command: ["--maxmemory-policy", "noeviction"] + networks: + - twenty + +volumes: + db-data: + server-local-data: + +networks: + twenty: + proxy: + external: true \ No newline at end of file