Self host and own your customer data with Twenty CRM

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.