Cloudron makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server. Find out more or install now.


Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Bookmarks
  • Search
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo

Cloudron Forum

Apps | Demo | Docs | Install
  1. Cloudron Forum
  2. App Wishlist
  3. twenty - A Modern Open Source CRM

twenty - A Modern Open Source CRM

Scheduled Pinned Locked Moved App Wishlist
wishlistapp wishlist
37 Posts 16 Posters 5.7k Views 19 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • N Offline
    N Offline
    Neiluj
    wrote on last edited by
    #25

    Reaching v1.0 seems like the milestone that should bring packaging this app for Cloudron into consideration no?
    This, as a modern CRM, would be a great and worthy addition to Cloudron I feel.

    jdaviescoatesJ 1 Reply Last reply
    3
    • N Neiluj

      Reaching v1.0 seems like the milestone that should bring packaging this app for Cloudron into consideration no?
      This, as a modern CRM, would be a great and worthy addition to Cloudron I feel.

      jdaviescoatesJ Offline
      jdaviescoatesJ Offline
      jdaviescoates
      wrote on last edited by
      #26

      @Neiluj said in twenty - A Modern Open Source CRM:

      Reaching v1.0 seems like the milestone that should bring packaging this app for Cloudron into consideration no?
      This, as a modern CRM, would be a great and worthy addition to Cloudron I feel.

      💯

      This would be great to have.

      I use Cloudron with Gandi & Hetzner

      1 Reply Last reply
      3
      • N Offline
        N Offline
        Neiluj
        wrote on last edited by
        #27

        OK - Internally, this went from "looks cool" couple of days ago to "must have" a few moments ago.
        Beside with my unlimited gratitude and limited packaging skills and experience, is there any other way I can help make Twenty on Cloudron happen sooner than later?

        Z 1 Reply Last reply
        2
        • Z Offline
          Z Offline
          zonzonzon
          wrote last edited by
          #28

          Latest Releases : 1.2.0 Jul 28th

          Import Relations
          When importing records, you can now import relations between records. For example, you can import a CSV file that includes a column for related records, such as linking contacts to companies or tasks to projects.

          Any Field filter
          We’ve added an "any field search" filter that lets you search across all fields at once. For example, it can allow you to locate a customer by their phone number, whether it's stored in the "Mobile," "Office," or "Direct Line" field.

          https://twenty.com/releases

          1 Reply Last reply
          1
          • N Neiluj

            OK - Internally, this went from "looks cool" couple of days ago to "must have" a few moments ago.
            Beside with my unlimited gratitude and limited packaging skills and experience, is there any other way I can help make Twenty on Cloudron happen sooner than later?

            Z Offline
            Z Offline
            zonzonzon
            wrote last edited by
            #29

            @Neiluj
            Currently, I am installing Twenty using Docker Compose as shown below, but I don’t understand what needs to be done when switching to Cloudron. I hope Twenty will be integrated into Cloudron soon. After using it for a while, I found that this CRM is very powerful and customizable to serve different business needs within an enterprise.

            version: '3.8'
            
            services:
              change-vol-ownership:
                image: 'ubuntu:latest'
                user: root
                volumes:
                  - 'twenty-server-local-data:/tmp/server-local-data'
                  - 'twenty-docker-data:/tmp/docker-data'
                command: |
                  bash -c "
                    chown -R 1000:1000 /tmp/server-local-data && 
                    chown -R 1000:1000 /tmp/docker-data &&
                    echo 'Volume ownership changed successfully'
                  "
                restart: "no"
                networks:
                  - twenty-network
            
              db:
                image: 'twentycrm/twenty-postgres-spilo:latest'
                container_name: twenty-db
                volumes:
                  - 'twenty-db-data:/home/postgres/pgdata'
                environment:
                  PGUSER: postgres
                  POSTGRES_PASSWORD: ${PG_DATABASE_PASSWORD:-ChangeThisPassword123!}
                  POSTGRES_DB: postgres
                  SPILO_ROLE: master
                networks:
                  - twenty-network
                restart: unless-stopped
                healthcheck:
                  test: ["CMD-SHELL", "pg_isready -U postgres"]
                  interval: 30s
                  timeout: 10s
                  retries: 5
                  start_period: 60s
            
              redis:
                image: 'redis:7-alpine'
                container_name: twenty-redis
                volumes:
                  - 'twenty-redis-data:/data'
                networks:
                  - twenty-network
                restart: unless-stopped
                healthcheck:
                  test: ["CMD", "redis-cli", "ping"]
                  interval: 30s
                  timeout: 10s
                  retries: 5
                  start_period: 10s
            
              server:
                image: 'twentycrm/twenty:v1.1'
                container_name: twenty-server
                depends_on:
                  change-vol-ownership:
                    condition: service_completed_successfully
                  db:
                    condition: service_healthy
                  redis:
                    condition: service_healthy
                volumes:
                  - 'twenty-server-local-data:/app/packages/twenty-server/.local-storage'
                  - 'twenty-docker-data:/app/docker-data'
                ports:
                  - "${EXTERNAL_PORT:-3000}:3000"
                environment:
                  NODE_PORT: 3000
                  PG_DATABASE_URL: 'postgres://${PG_DATABASE_USER:-postgres}:${PG_DATABASE_PASSWORD:-ChangeThisPassword123!}@db:5432/postgres'
                  SERVER_URL: '${SERVER_URL:-http://localhost:3000}'
                  REDIS_URL: 'redis://redis:6379'
                  APP_SECRET: '${APP_SECRET:-please-change-this-secret-key}'
                  STORAGE_TYPE: '${STORAGE_TYPE:-local}'
                  STORAGE_LOCAL_PATH: '${STORAGE_LOCAL_PATH:-.local-storage}'
                  
                  # Email Configuration
                  EMAIL_DRIVER: '${EMAIL_DRIVER:-logger}'
                  EMAIL_FROM_ADDRESS: '${EMAIL_FROM_ADDRESS:-noreply@localhost}'
                  EMAIL_FROM_NAME: '${EMAIL_FROM_NAME:-Twenty CRM}'
                  EMAIL_SMTP_HOST: '${EMAIL_SMTP_HOST:-}'
                  EMAIL_SMTP_PORT: '${EMAIL_SMTP_PORT:-587}'
                  EMAIL_SMTP_USER: '${EMAIL_SMTP_USER:-}'
                  EMAIL_SMTP_PASSWORD: '${EMAIL_SMTP_PASSWORD:-}'
                  EMAIL_SYSTEM_ADDRESS: '${EMAIL_SYSTEM_ADDRESS:-admin@localhost}'
                  
                  # AI Features
                  IS_AI_ENABLED: '${IS_AI_ENABLED:-false}'
                  OPENAI_API_KEY: '${OPENAI_API_KEY:-}'
                  OPENAI_API_MODEL: '${OPENAI_API_MODEL:-gpt-4}'
                  
                  # Authentication
                  AUTH_PASSWORD_ENABLED: '${AUTH_PASSWORD_ENABLED:-true}'
                  IS_EMAIL_VERIFICATION_REQUIRED: '${IS_EMAIL_VERIFICATION_REQUIRED:-false}'
                  IS_MULTIWORKSPACE_ENABLED: '${IS_MULTIWORKSPACE_ENABLED:-false}'
                  
                  # Rate Limiting
                  API_RATE_LIMITING_LIMIT: '${API_RATE_LIMITING_LIMIT:-200}'
                  API_RATE_LIMITING_TTL: '${API_RATE_LIMITING_TTL:-60}'
                  
                  # Tokens
                  LOGIN_TOKEN_EXPIRES_IN: '${LOGIN_TOKEN_EXPIRES_IN:-30d}'
                  PASSWORD_RESET_TOKEN_EXPIRES_IN: '${PASSWORD_RESET_TOKEN_EXPIRES_IN:-5m}'
                  EMAIL_VERIFICATION_TOKEN_EXPIRES_IN: '${EMAIL_VERIFICATION_TOKEN_EXPIRES_IN:-24h}'
                  
                  # Message Queue
                  MESSAGE_QUEUE_TYPE: '${MESSAGE_QUEUE_TYPE:-bull-mq}'
                  
                  # Features
                  CALENDAR_PROVIDER_GOOGLE_ENABLED: '${CALENDAR_PROVIDER_GOOGLE_ENABLED:-false}'
                  MESSAGING_PROVIDER_GMAIL_ENABLED: '${MESSAGING_PROVIDER_GMAIL_ENABLED:-false}'
                  
                  # OAuth (Optional)
                  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:-}'
                  
                  AUTH_MICROSOFT_ENABLED: '${AUTH_MICROSOFT_ENABLED:-false}'
                  AUTH_MICROSOFT_CLIENT_ID: '${AUTH_MICROSOFT_CLIENT_ID:-}'
                  AUTH_MICROSOFT_CLIENT_SECRET: '${AUTH_MICROSOFT_CLIENT_SECRET:-}'
                  AUTH_MICROSOFT_CALLBACK_URL: '${AUTH_MICROSOFT_CALLBACK_URL:-}'
                  
                networks:
                  - twenty-network
                restart: unless-stopped
                healthcheck:
                  test: ["CMD-SHELL", "curl -f http://localhost:3000/healthz || exit 1"]
                  interval: 30s
                  timeout: 10s
                  retries: 5
                  start_period: 120s
            
              worker:
                image: 'twentycrm/twenty:v1.1'
                container_name: twenty-worker
                depends_on:
                  db:
                    condition: service_healthy
                  redis:
                    condition: service_healthy
                  server:
                    condition: service_started
                volumes:
                  - 'twenty-server-local-data:/app/packages/twenty-server/.local-storage'
                  - 'twenty-docker-data:/app/docker-data'
                environment:
                  NODE_PORT: 3000
                  PG_DATABASE_URL: 'postgres://${PG_DATABASE_USER:-postgres}:${PG_DATABASE_PASSWORD:-ChangeThisPassword123!}@db:5432/postgres'
                  SERVER_URL: '${SERVER_URL:-http://localhost:3000}'
                  REDIS_URL: 'redis://redis:6379'
                  APP_SECRET: '${APP_SECRET:-please-change-this-secret-key}'
                  STORAGE_TYPE: '${STORAGE_TYPE:-local}'
                  STORAGE_LOCAL_PATH: '${STORAGE_LOCAL_PATH:-.local-storage}'
                  
                  # Email Configuration (same as server)
                  EMAIL_DRIVER: '${EMAIL_DRIVER:-logger}'
                  EMAIL_FROM_ADDRESS: '${EMAIL_FROM_ADDRESS:-noreply@localhost}'
                  EMAIL_FROM_NAME: '${EMAIL_FROM_NAME:-Twenty CRM}'
                  EMAIL_SMTP_HOST: '${EMAIL_SMTP_HOST:-}'
                  EMAIL_SMTP_PORT: '${EMAIL_SMTP_PORT:-587}'
                  EMAIL_SMTP_USER: '${EMAIL_SMTP_USER:-}'
                  EMAIL_SMTP_PASSWORD: '${EMAIL_SMTP_PASSWORD:-}'
                  
                  # Features
                  MESSAGE_QUEUE_TYPE: '${MESSAGE_QUEUE_TYPE:-bull-mq}'
                  
                command: ["yarn", "worker:start"]
                networks:
                  - twenty-network
                restart: unless-stopped
            
            volumes:
              twenty-db-data:
                driver: local
              twenty-redis-data:
                driver: local
              twenty-server-local-data:
                driver: local
              twenty-docker-data:
                driver: local
            
            networks:
              twenty-network:
                driver: bridge
                name: twenty-network
            
            timconsidineT N 2 Replies Last reply
            0
            • Z zonzonzon

              @Neiluj
              Currently, I am installing Twenty using Docker Compose as shown below, but I don’t understand what needs to be done when switching to Cloudron. I hope Twenty will be integrated into Cloudron soon. After using it for a while, I found that this CRM is very powerful and customizable to serve different business needs within an enterprise.

              version: '3.8'
              
              services:
                change-vol-ownership:
                  image: 'ubuntu:latest'
                  user: root
                  volumes:
                    - 'twenty-server-local-data:/tmp/server-local-data'
                    - 'twenty-docker-data:/tmp/docker-data'
                  command: |
                    bash -c "
                      chown -R 1000:1000 /tmp/server-local-data && 
                      chown -R 1000:1000 /tmp/docker-data &&
                      echo 'Volume ownership changed successfully'
                    "
                  restart: "no"
                  networks:
                    - twenty-network
              
                db:
                  image: 'twentycrm/twenty-postgres-spilo:latest'
                  container_name: twenty-db
                  volumes:
                    - 'twenty-db-data:/home/postgres/pgdata'
                  environment:
                    PGUSER: postgres
                    POSTGRES_PASSWORD: ${PG_DATABASE_PASSWORD:-ChangeThisPassword123!}
                    POSTGRES_DB: postgres
                    SPILO_ROLE: master
                  networks:
                    - twenty-network
                  restart: unless-stopped
                  healthcheck:
                    test: ["CMD-SHELL", "pg_isready -U postgres"]
                    interval: 30s
                    timeout: 10s
                    retries: 5
                    start_period: 60s
              
                redis:
                  image: 'redis:7-alpine'
                  container_name: twenty-redis
                  volumes:
                    - 'twenty-redis-data:/data'
                  networks:
                    - twenty-network
                  restart: unless-stopped
                  healthcheck:
                    test: ["CMD", "redis-cli", "ping"]
                    interval: 30s
                    timeout: 10s
                    retries: 5
                    start_period: 10s
              
                server:
                  image: 'twentycrm/twenty:v1.1'
                  container_name: twenty-server
                  depends_on:
                    change-vol-ownership:
                      condition: service_completed_successfully
                    db:
                      condition: service_healthy
                    redis:
                      condition: service_healthy
                  volumes:
                    - 'twenty-server-local-data:/app/packages/twenty-server/.local-storage'
                    - 'twenty-docker-data:/app/docker-data'
                  ports:
                    - "${EXTERNAL_PORT:-3000}:3000"
                  environment:
                    NODE_PORT: 3000
                    PG_DATABASE_URL: 'postgres://${PG_DATABASE_USER:-postgres}:${PG_DATABASE_PASSWORD:-ChangeThisPassword123!}@db:5432/postgres'
                    SERVER_URL: '${SERVER_URL:-http://localhost:3000}'
                    REDIS_URL: 'redis://redis:6379'
                    APP_SECRET: '${APP_SECRET:-please-change-this-secret-key}'
                    STORAGE_TYPE: '${STORAGE_TYPE:-local}'
                    STORAGE_LOCAL_PATH: '${STORAGE_LOCAL_PATH:-.local-storage}'
                    
                    # Email Configuration
                    EMAIL_DRIVER: '${EMAIL_DRIVER:-logger}'
                    EMAIL_FROM_ADDRESS: '${EMAIL_FROM_ADDRESS:-noreply@localhost}'
                    EMAIL_FROM_NAME: '${EMAIL_FROM_NAME:-Twenty CRM}'
                    EMAIL_SMTP_HOST: '${EMAIL_SMTP_HOST:-}'
                    EMAIL_SMTP_PORT: '${EMAIL_SMTP_PORT:-587}'
                    EMAIL_SMTP_USER: '${EMAIL_SMTP_USER:-}'
                    EMAIL_SMTP_PASSWORD: '${EMAIL_SMTP_PASSWORD:-}'
                    EMAIL_SYSTEM_ADDRESS: '${EMAIL_SYSTEM_ADDRESS:-admin@localhost}'
                    
                    # AI Features
                    IS_AI_ENABLED: '${IS_AI_ENABLED:-false}'
                    OPENAI_API_KEY: '${OPENAI_API_KEY:-}'
                    OPENAI_API_MODEL: '${OPENAI_API_MODEL:-gpt-4}'
                    
                    # Authentication
                    AUTH_PASSWORD_ENABLED: '${AUTH_PASSWORD_ENABLED:-true}'
                    IS_EMAIL_VERIFICATION_REQUIRED: '${IS_EMAIL_VERIFICATION_REQUIRED:-false}'
                    IS_MULTIWORKSPACE_ENABLED: '${IS_MULTIWORKSPACE_ENABLED:-false}'
                    
                    # Rate Limiting
                    API_RATE_LIMITING_LIMIT: '${API_RATE_LIMITING_LIMIT:-200}'
                    API_RATE_LIMITING_TTL: '${API_RATE_LIMITING_TTL:-60}'
                    
                    # Tokens
                    LOGIN_TOKEN_EXPIRES_IN: '${LOGIN_TOKEN_EXPIRES_IN:-30d}'
                    PASSWORD_RESET_TOKEN_EXPIRES_IN: '${PASSWORD_RESET_TOKEN_EXPIRES_IN:-5m}'
                    EMAIL_VERIFICATION_TOKEN_EXPIRES_IN: '${EMAIL_VERIFICATION_TOKEN_EXPIRES_IN:-24h}'
                    
                    # Message Queue
                    MESSAGE_QUEUE_TYPE: '${MESSAGE_QUEUE_TYPE:-bull-mq}'
                    
                    # Features
                    CALENDAR_PROVIDER_GOOGLE_ENABLED: '${CALENDAR_PROVIDER_GOOGLE_ENABLED:-false}'
                    MESSAGING_PROVIDER_GMAIL_ENABLED: '${MESSAGING_PROVIDER_GMAIL_ENABLED:-false}'
                    
                    # OAuth (Optional)
                    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:-}'
                    
                    AUTH_MICROSOFT_ENABLED: '${AUTH_MICROSOFT_ENABLED:-false}'
                    AUTH_MICROSOFT_CLIENT_ID: '${AUTH_MICROSOFT_CLIENT_ID:-}'
                    AUTH_MICROSOFT_CLIENT_SECRET: '${AUTH_MICROSOFT_CLIENT_SECRET:-}'
                    AUTH_MICROSOFT_CALLBACK_URL: '${AUTH_MICROSOFT_CALLBACK_URL:-}'
                    
                  networks:
                    - twenty-network
                  restart: unless-stopped
                  healthcheck:
                    test: ["CMD-SHELL", "curl -f http://localhost:3000/healthz || exit 1"]
                    interval: 30s
                    timeout: 10s
                    retries: 5
                    start_period: 120s
              
                worker:
                  image: 'twentycrm/twenty:v1.1'
                  container_name: twenty-worker
                  depends_on:
                    db:
                      condition: service_healthy
                    redis:
                      condition: service_healthy
                    server:
                      condition: service_started
                  volumes:
                    - 'twenty-server-local-data:/app/packages/twenty-server/.local-storage'
                    - 'twenty-docker-data:/app/docker-data'
                  environment:
                    NODE_PORT: 3000
                    PG_DATABASE_URL: 'postgres://${PG_DATABASE_USER:-postgres}:${PG_DATABASE_PASSWORD:-ChangeThisPassword123!}@db:5432/postgres'
                    SERVER_URL: '${SERVER_URL:-http://localhost:3000}'
                    REDIS_URL: 'redis://redis:6379'
                    APP_SECRET: '${APP_SECRET:-please-change-this-secret-key}'
                    STORAGE_TYPE: '${STORAGE_TYPE:-local}'
                    STORAGE_LOCAL_PATH: '${STORAGE_LOCAL_PATH:-.local-storage}'
                    
                    # Email Configuration (same as server)
                    EMAIL_DRIVER: '${EMAIL_DRIVER:-logger}'
                    EMAIL_FROM_ADDRESS: '${EMAIL_FROM_ADDRESS:-noreply@localhost}'
                    EMAIL_FROM_NAME: '${EMAIL_FROM_NAME:-Twenty CRM}'
                    EMAIL_SMTP_HOST: '${EMAIL_SMTP_HOST:-}'
                    EMAIL_SMTP_PORT: '${EMAIL_SMTP_PORT:-587}'
                    EMAIL_SMTP_USER: '${EMAIL_SMTP_USER:-}'
                    EMAIL_SMTP_PASSWORD: '${EMAIL_SMTP_PASSWORD:-}'
                    
                    # Features
                    MESSAGE_QUEUE_TYPE: '${MESSAGE_QUEUE_TYPE:-bull-mq}'
                    
                  command: ["yarn", "worker:start"]
                  networks:
                    - twenty-network
                  restart: unless-stopped
              
              volumes:
                twenty-db-data:
                  driver: local
                twenty-redis-data:
                  driver: local
                twenty-server-local-data:
                  driver: local
                twenty-docker-data:
                  driver: local
              
              networks:
                twenty-network:
                  driver: bridge
                  name: twenty-network
              
              timconsidineT Offline
              timconsidineT Offline
              timconsidine
              App Dev
              wrote last edited by
              #30

              @zonzonzon Docker image from Dockerfile is different to using docker-compose - cannot usee docker-compose on Cloudron. Need to package Twenty in a Dockerfile

              1 Reply Last reply
              4
              • Z Offline
                Z Offline
                zonzonzon
                wrote last edited by
                #31

                Release v1.3.0

                https://github.com/twentyhq/twenty/releases/tag/v1.3.0

                1 Reply Last reply
                2
                • gobenizzleG Offline
                  gobenizzleG Offline
                  gobenizzle
                  wrote last edited by gobenizzle
                  #32

                  best open source crm I have seen so far. Miles beyond espo already now.
                  I would highly appreciate if this comes to cloudron!

                  any word on any plans?

                  1 Reply Last reply
                  3
                  • Z zonzonzon

                    @Neiluj
                    Currently, I am installing Twenty using Docker Compose as shown below, but I don’t understand what needs to be done when switching to Cloudron. I hope Twenty will be integrated into Cloudron soon. After using it for a while, I found that this CRM is very powerful and customizable to serve different business needs within an enterprise.

                    version: '3.8'
                    
                    services:
                      change-vol-ownership:
                        image: 'ubuntu:latest'
                        user: root
                        volumes:
                          - 'twenty-server-local-data:/tmp/server-local-data'
                          - 'twenty-docker-data:/tmp/docker-data'
                        command: |
                          bash -c "
                            chown -R 1000:1000 /tmp/server-local-data && 
                            chown -R 1000:1000 /tmp/docker-data &&
                            echo 'Volume ownership changed successfully'
                          "
                        restart: "no"
                        networks:
                          - twenty-network
                    
                      db:
                        image: 'twentycrm/twenty-postgres-spilo:latest'
                        container_name: twenty-db
                        volumes:
                          - 'twenty-db-data:/home/postgres/pgdata'
                        environment:
                          PGUSER: postgres
                          POSTGRES_PASSWORD: ${PG_DATABASE_PASSWORD:-ChangeThisPassword123!}
                          POSTGRES_DB: postgres
                          SPILO_ROLE: master
                        networks:
                          - twenty-network
                        restart: unless-stopped
                        healthcheck:
                          test: ["CMD-SHELL", "pg_isready -U postgres"]
                          interval: 30s
                          timeout: 10s
                          retries: 5
                          start_period: 60s
                    
                      redis:
                        image: 'redis:7-alpine'
                        container_name: twenty-redis
                        volumes:
                          - 'twenty-redis-data:/data'
                        networks:
                          - twenty-network
                        restart: unless-stopped
                        healthcheck:
                          test: ["CMD", "redis-cli", "ping"]
                          interval: 30s
                          timeout: 10s
                          retries: 5
                          start_period: 10s
                    
                      server:
                        image: 'twentycrm/twenty:v1.1'
                        container_name: twenty-server
                        depends_on:
                          change-vol-ownership:
                            condition: service_completed_successfully
                          db:
                            condition: service_healthy
                          redis:
                            condition: service_healthy
                        volumes:
                          - 'twenty-server-local-data:/app/packages/twenty-server/.local-storage'
                          - 'twenty-docker-data:/app/docker-data'
                        ports:
                          - "${EXTERNAL_PORT:-3000}:3000"
                        environment:
                          NODE_PORT: 3000
                          PG_DATABASE_URL: 'postgres://${PG_DATABASE_USER:-postgres}:${PG_DATABASE_PASSWORD:-ChangeThisPassword123!}@db:5432/postgres'
                          SERVER_URL: '${SERVER_URL:-http://localhost:3000}'
                          REDIS_URL: 'redis://redis:6379'
                          APP_SECRET: '${APP_SECRET:-please-change-this-secret-key}'
                          STORAGE_TYPE: '${STORAGE_TYPE:-local}'
                          STORAGE_LOCAL_PATH: '${STORAGE_LOCAL_PATH:-.local-storage}'
                          
                          # Email Configuration
                          EMAIL_DRIVER: '${EMAIL_DRIVER:-logger}'
                          EMAIL_FROM_ADDRESS: '${EMAIL_FROM_ADDRESS:-noreply@localhost}'
                          EMAIL_FROM_NAME: '${EMAIL_FROM_NAME:-Twenty CRM}'
                          EMAIL_SMTP_HOST: '${EMAIL_SMTP_HOST:-}'
                          EMAIL_SMTP_PORT: '${EMAIL_SMTP_PORT:-587}'
                          EMAIL_SMTP_USER: '${EMAIL_SMTP_USER:-}'
                          EMAIL_SMTP_PASSWORD: '${EMAIL_SMTP_PASSWORD:-}'
                          EMAIL_SYSTEM_ADDRESS: '${EMAIL_SYSTEM_ADDRESS:-admin@localhost}'
                          
                          # AI Features
                          IS_AI_ENABLED: '${IS_AI_ENABLED:-false}'
                          OPENAI_API_KEY: '${OPENAI_API_KEY:-}'
                          OPENAI_API_MODEL: '${OPENAI_API_MODEL:-gpt-4}'
                          
                          # Authentication
                          AUTH_PASSWORD_ENABLED: '${AUTH_PASSWORD_ENABLED:-true}'
                          IS_EMAIL_VERIFICATION_REQUIRED: '${IS_EMAIL_VERIFICATION_REQUIRED:-false}'
                          IS_MULTIWORKSPACE_ENABLED: '${IS_MULTIWORKSPACE_ENABLED:-false}'
                          
                          # Rate Limiting
                          API_RATE_LIMITING_LIMIT: '${API_RATE_LIMITING_LIMIT:-200}'
                          API_RATE_LIMITING_TTL: '${API_RATE_LIMITING_TTL:-60}'
                          
                          # Tokens
                          LOGIN_TOKEN_EXPIRES_IN: '${LOGIN_TOKEN_EXPIRES_IN:-30d}'
                          PASSWORD_RESET_TOKEN_EXPIRES_IN: '${PASSWORD_RESET_TOKEN_EXPIRES_IN:-5m}'
                          EMAIL_VERIFICATION_TOKEN_EXPIRES_IN: '${EMAIL_VERIFICATION_TOKEN_EXPIRES_IN:-24h}'
                          
                          # Message Queue
                          MESSAGE_QUEUE_TYPE: '${MESSAGE_QUEUE_TYPE:-bull-mq}'
                          
                          # Features
                          CALENDAR_PROVIDER_GOOGLE_ENABLED: '${CALENDAR_PROVIDER_GOOGLE_ENABLED:-false}'
                          MESSAGING_PROVIDER_GMAIL_ENABLED: '${MESSAGING_PROVIDER_GMAIL_ENABLED:-false}'
                          
                          # OAuth (Optional)
                          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:-}'
                          
                          AUTH_MICROSOFT_ENABLED: '${AUTH_MICROSOFT_ENABLED:-false}'
                          AUTH_MICROSOFT_CLIENT_ID: '${AUTH_MICROSOFT_CLIENT_ID:-}'
                          AUTH_MICROSOFT_CLIENT_SECRET: '${AUTH_MICROSOFT_CLIENT_SECRET:-}'
                          AUTH_MICROSOFT_CALLBACK_URL: '${AUTH_MICROSOFT_CALLBACK_URL:-}'
                          
                        networks:
                          - twenty-network
                        restart: unless-stopped
                        healthcheck:
                          test: ["CMD-SHELL", "curl -f http://localhost:3000/healthz || exit 1"]
                          interval: 30s
                          timeout: 10s
                          retries: 5
                          start_period: 120s
                    
                      worker:
                        image: 'twentycrm/twenty:v1.1'
                        container_name: twenty-worker
                        depends_on:
                          db:
                            condition: service_healthy
                          redis:
                            condition: service_healthy
                          server:
                            condition: service_started
                        volumes:
                          - 'twenty-server-local-data:/app/packages/twenty-server/.local-storage'
                          - 'twenty-docker-data:/app/docker-data'
                        environment:
                          NODE_PORT: 3000
                          PG_DATABASE_URL: 'postgres://${PG_DATABASE_USER:-postgres}:${PG_DATABASE_PASSWORD:-ChangeThisPassword123!}@db:5432/postgres'
                          SERVER_URL: '${SERVER_URL:-http://localhost:3000}'
                          REDIS_URL: 'redis://redis:6379'
                          APP_SECRET: '${APP_SECRET:-please-change-this-secret-key}'
                          STORAGE_TYPE: '${STORAGE_TYPE:-local}'
                          STORAGE_LOCAL_PATH: '${STORAGE_LOCAL_PATH:-.local-storage}'
                          
                          # Email Configuration (same as server)
                          EMAIL_DRIVER: '${EMAIL_DRIVER:-logger}'
                          EMAIL_FROM_ADDRESS: '${EMAIL_FROM_ADDRESS:-noreply@localhost}'
                          EMAIL_FROM_NAME: '${EMAIL_FROM_NAME:-Twenty CRM}'
                          EMAIL_SMTP_HOST: '${EMAIL_SMTP_HOST:-}'
                          EMAIL_SMTP_PORT: '${EMAIL_SMTP_PORT:-587}'
                          EMAIL_SMTP_USER: '${EMAIL_SMTP_USER:-}'
                          EMAIL_SMTP_PASSWORD: '${EMAIL_SMTP_PASSWORD:-}'
                          
                          # Features
                          MESSAGE_QUEUE_TYPE: '${MESSAGE_QUEUE_TYPE:-bull-mq}'
                          
                        command: ["yarn", "worker:start"]
                        networks:
                          - twenty-network
                        restart: unless-stopped
                    
                    volumes:
                      twenty-db-data:
                        driver: local
                      twenty-redis-data:
                        driver: local
                      twenty-server-local-data:
                        driver: local
                      twenty-docker-data:
                        driver: local
                    
                    networks:
                      twenty-network:
                        driver: bridge
                        name: twenty-network
                    
                    N Offline
                    N Offline
                    Neiluj
                    wrote last edited by
                    #33

                    @zonzonzon the good word of @ekevu123 in a different thread:

                    The biggest issue is that the deployment needs to happen in one docker container only.

                    For postgres, you use this: https://docs.cloudron.io/packaging/addons/#postgresql

                    For local storage, this:
                    https://docs.cloudron.io/packaging/addons/#localstorage

                    If you don't know how to use these add-ons, go here: https://docs.cloudron.io/packaging/manifest/

                    But essentially, if you can package it in one dockerfile only, creating the cloudron manifest is piece of cake.

                    Hopefully this helps a bit.

                    marcusquinnM 1 Reply Last reply
                    3
                    • N Neiluj

                      @zonzonzon the good word of @ekevu123 in a different thread:

                      The biggest issue is that the deployment needs to happen in one docker container only.

                      For postgres, you use this: https://docs.cloudron.io/packaging/addons/#postgresql

                      For local storage, this:
                      https://docs.cloudron.io/packaging/addons/#localstorage

                      If you don't know how to use these add-ons, go here: https://docs.cloudron.io/packaging/manifest/

                      But essentially, if you can package it in one dockerfile only, creating the cloudron manifest is piece of cake.

                      Hopefully this helps a bit.

                      marcusquinnM Offline
                      marcusquinnM Offline
                      marcusquinn
                      wrote last edited by marcusquinn
                      #34

                      Does look nice, and Typescript does seem to be the future for web apps.

                      Screenshots:

                      60c2a682-694c-43a9-a53e-1d4543d49406-image.png

                      b669c3d9-c25f-482f-9095-61cf949429c2-image.png

                      d53950bf-8722-4565-95a2-934ac9d1535a-image.png

                      5b77c5ea-66b3-447f-b1b7-eca1b962ff31-image.png

                      55454ffe-1a4e-4ba3-89ba-a0ea8ce96e60-image.png

                      4ed811b8-ef16-485b-b100-3eee20beb0c2-image.png

                      63331663-e053-44ae-a13a-4d0a75ed4c6d-image.png

                      46f9339b-3070-4c21-b0e9-edfbfeb06422-image.png

                      a18d8f58-0bf6-4320-af23-375febe7918b-image.png

                      Web Design https://www.evergreen.je
                      Development https://brandlight.org
                      Life https://marcusquinn.com

                      marcusquinnM 1 Reply Last reply
                      3
                      • marcusquinnM marcusquinn

                        Does look nice, and Typescript does seem to be the future for web apps.

                        Screenshots:

                        60c2a682-694c-43a9-a53e-1d4543d49406-image.png

                        b669c3d9-c25f-482f-9095-61cf949429c2-image.png

                        d53950bf-8722-4565-95a2-934ac9d1535a-image.png

                        5b77c5ea-66b3-447f-b1b7-eca1b962ff31-image.png

                        55454ffe-1a4e-4ba3-89ba-a0ea8ce96e60-image.png

                        4ed811b8-ef16-485b-b100-3eee20beb0c2-image.png

                        63331663-e053-44ae-a13a-4d0a75ed4c6d-image.png

                        46f9339b-3070-4c21-b0e9-edfbfeb06422-image.png

                        a18d8f58-0bf6-4320-af23-375febe7918b-image.png

                        marcusquinnM Offline
                        marcusquinnM Offline
                        marcusquinn
                        wrote last edited by marcusquinn
                        #35

                        Few open-source apps say to me; "these guys get it". This is definitely one of those that does.

                        Giving this my seal of approval as a high-value app to have on Cloudron, and for attracting people to Cloudron.

                        Web Design https://www.evergreen.je
                        Development https://brandlight.org
                        Life https://marcusquinn.com

                        1 Reply Last reply
                        3
                        • Z Offline
                          Z Offline
                          zonzonzon
                          wrote last edited by
                          #36

                          I’m trying out Twenty and really looking forward to seeing it available on Cloudron soon. Its interface is friendly and modern, and the recent updates have significantly improved loading speed. Its API is very easy to integrate with external apps. Another standout point is its data model, which lets us freely customize and create objects and fields, making it simple to tailor deeply to a company’s operations.

                          1 Reply Last reply
                          3
                          • D Offline
                            D Offline
                            david.opalia
                            wrote last edited by
                            #37

                            We hope to see this app available soon. We are already using it in a self-hosted setup on our systems, but for convenience we would like to migrate it to Cloudron.
                            How can we help you make this happen?

                            1 Reply Last reply
                            1
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • Bookmarks
                            • Search