Skip to main content

Latest blog: Installing Twenty CRM with Nuon

Guides

Installing Salesforce alternative Twenty with Nuon

Learn how to setup an app config of open-source CRM and Salesforce alternative, Twenty, with the Nuon platform

Mark Milligan portrait

Mark Milligan

VP of Revenue

10 min read
Banner for blog post on installing open-source CRM and Salesforce alternative - Twenty - with Nuon

This is another post in our series where we show how to install a software vendor’s product with Nuon in a Bring Your Own Cloud (BYOC) way for stronger security and and a SaaS experience.

Twenty is a modern open-source CRM alternative to proprietary CRMs like Salesforce, HubSpot, Microsoft Dynamics 365, SAP, Oracle and Zoho. Think of Twenty as a more nimble, developer-friendly CRM option — one that leans into flexibility and lower cost.

Creating a revenue opportunity record with Twenty

The App Config almost entirely uses Kubernetes Manifests to deploy the Twenty app. Manifests are located in this GitHub repository and are maintained by the community.

What does Nuon do?

Nuon gives you a workflow to package your application, deploy it into customer accounts and make it feel like SaaS. With Nuon, you can continuously push updates, monitor and debug your application. We have designed Nuon with security first, and a zero-access model so your customer never has to grant you direct access to their account.

The Install Runner is in a VM deployed alongside your application

We deploy a runner alongside your application in a VM which powers the functionality of our platform. The runner is responsible for:

  • Setting up and provisioning your application.
  • Managing updates.
  • Monitoring your application and letting you run debug scripts when things go wrong.

Nuon then gives you a control plane where you can push updates, debug when things go wrong, and proactively monitor for issues. You can offer a secure, automated experience without direct access to the customer account and toggle-able permissions for your customer.

Creating the App Config

An App Config is basically a collection of TOML files, Helm charts and Terraform to define the underlying infrastructure e.g., Kubernetes, and the Components to deploy an Application.

The Twenty App Config is in our example-app-configs GitHub repository.

Twenty Components and Architecture

The Twenty App Config in the Nuon dashboard

Core Application Stack

Database Tier:

  • PostgreSQL Database (twentycrm-db): Uses the specialized twentycrm/twenty-postgres-spilo image with persistent storage, configured with custom superuser credentials and optimized for CRM workloads.

Application Tier:

  • Twenty Server (twentycrm-server): The main web application running on port 3000, using the official Twenty CRM Docker image with configurable release versions.
  • Worker Process (twentycrm-worker): Background job processor for asynchronous tasks, sharing the same image but running in worker mode.
  • Redis Cache (twentycrm-redis): In-memory data store for session management and caching.

Load Balancing & SSL:

  • Application Load Balancer (ALB): AWS-managed load balancer with SSL termination using automatically provisioned certificates.
  • Certificate Management: Automated SSL/TLS certificate provisioning for secure HTTPS access.

Infrastructure Configuration

Compute Resources:

  • Configurable Kubernetes Nodes: Default setup uses t3a.medium instances with 4 desired to accommodate Twenty’s application and database pods.
  • Resource Allocation: Each service has defined CPU/memory limits (256Mi-1024Mi RAM, 250m-1000m CPU).
kubectl command output in a terminal showing the Twenty pods

Storage:

  • Persistent Volumes: Separate persistent storage for database, server files, and Docker data.
  • Local File Storage: Twenty CRM configured for local file storage within the Kubernetes cluster.
The Components that make up the Twenty App Config in Nuon

Security & Configuration Management

Secrets Management:

  • Kubernetes Secrets: Secure storage of application secrets, database credentials, and JWT signing keys.
  • Environment-based Configuration: Configurable PostgreSQL credentials, application secrets, and token expiration settings.

Network Security:

  • Internal Service Communication: Services communicate within the twentycrm namespace using Kubernetes DNS.
  • External Access: Only the ALB exposes the application publicly via HTTPS.
The Health Status of the Twenty infrastructure - seen from Twenty's dashboard

Traffic Flow Architecture

Internet → AWS ALB → Kubernetes Service → Pod

Public Internet Traffic arrives at the AWS Application Load Balancer

ALB terminates SSL/TLS and forwards HTTP traffic to the Kubernetes cluster

Kubernetes Ingress routes traffic to the internal twentycrm-server service

ClusterIP Service distributes traffic to the Twenty CRM server pods

The dependencies of Twenty's Components

Operational Features

Health Monitoring:

  • Health Check Actions: Automated ALB health check validation to ensure application availability.
Workflow results of a Nuon Action that reports 🟢 or 🔴 on the health of ALB

Installing Twenty in a Customer Cloud

The Twenty App Config and their TOML files are validated and uploaded to your Nuon control plane using the Nuon CLI.

git clone https://github.com/nuonco/example-app-configs
cd ~/example-app-configs/twenty
nuon login
nuon apps create -n twenty
nuon apps sync

The components are built as OCI artifacts and placed in a cloud container registry.

Through the Nuon web dashboard, an Install is kicked off and inputs provide defaults for the target installation.

Inputs are dynamic variables specific to each Install like Twenty version, number of Kubernetes nodes, AWS region

A cloud provider stack is shared with the target cloud account profile which creates a VPC and a VM with the Nuon runner which phones home to get instructions or steps from the App Config to install the Twenty app.

Audit logs from one installation step - deploying the Twenty server with a Kubernetes manifest

Enterprise features include an Approvals workflow that asks the operator permission to proceed with an Apply step for each component in the App Config.

Every execution step is a Workflow and they can centrally reviewed including their audit logs

Once the installation is complete, the public URL is included in the Install’s README markdown in the Nuon dashboard and can be shared with the target cloud account user base to start using the Twenty application.

The completed Install with an interpolated Access URL to open Twenty in a browser
Creating the first user in Twenty
The Account view in Twenty

Conclusion

Software vendors like Twenty can invest in Nuon to unlock new revenue streams with customers who want a SaaS experience of instant access and no upgrade hassles while retaining their data in their cloud accounts.

Global 2000 companies and government agencies can invest in Nuon to package up and deploy all of their vendor and in-house developed apps for easier DevOps management, stronger security, and a SaaS-like multi-cloud experience.

Ready to get started?

Newsletter

Subscribe to our newsletter

Too much email? Subscribe via RSS feed