Self host and own your customer data with Twenty CRM

screenshot of self hosted Twenty
screenshot of self hosted Twenty

Twenty is a modern, self-hosted platform designed to help you manage your customer relationships and own your CRM. Let’s see how a small business like Formable, which provides managed hosting services, can use Twenty to keep track of leads, clients, and internal workflows—all in one place.

Whether you’re tracking leads, managing companies, or automating follow-ups, Twenty helps you stay organized and responsive as you grow. Formable can help you manage and integrate Twenty with other self hosted solutions, just ask us about an integration plan using n8n or custom coded integrations.

screencast of self hosted Twenty

Formable's Twenty Portainer stack docker-compose.yml

services:
  server:
    image: twentycrm/twenty:${TAG:-latest}
    volumes:
      - server-local-data:/app/packages/twenty-server/.local-storage
    ports:
      - 20000:3000
    logging:
      driver: "json-file"
      options:
        max-size: "50m"
        max-file: "10"
    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}
      IS_MULTIWORKSPACE_ENABLED: ${IS_MULTIWORKSPACE_ENABLED}
      APP_SECRET: ${APP_SECRET:-replace_me_with_a_random_string}
    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"]
    logging:
      driver: "json-file"
      options:
        max-size: "50m"
        max-file: "10"
    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
    depends_on:
      db:
        condition: service_healthy
      server:
        condition: service_healthy
    restart: always

  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
    logging:
      driver: "json-file"
      options:
        max-size: "50m"
        max-file: "10"
    restart: always

  redis:
    image: redis
    restart: always
    logging:
      driver: "json-file"
      options:
        max-size: "50m"
        max-file: "10"
    command: ["--maxmemory-policy", "noeviction"]

volumes:
  db-data:
  server-local-data:

Managed Self Hosted Twenty

Formable sets up, monitors and updates your cloud applications.

💡
Formable installs Twenty at your own subdomain, for example: crm.formable.app
🔒
Free Let's Encrypt certificate setup and renewal with certbot.
📡
We monitor your application subdomain with Formable's Uptime Kuma server.
⚙️
Formable updates your application and checks for any breaking changes.
💾
Formable configures Kopia to take incremental snapshots of your application data and files to AWS S3.
✉️
Formable starts you on our Mailgun SMTP server for email notification delivery. We can then get you setup with your own Mailgun account and subdomain, so you can track deliverability.
🚨
Formable resolves any application downtime issues and supports your team.
Mastodon