Deploying n8n to Virtuozzo Application Platform
Virtuozzo Application Platform providers (such as Ruk-Com's PaaS) allows easy deployment of Docker images. What I like about Virtuozzo's offerings are:
- Pay-per-use pricing model - Unlike traditional VPS providers where you pay for reserved resources (i.e. pay for the limits) regardless of usage, with Virtuozzo "you do not pay for unused resources" as you "pay for the usage."
- Resources are measured in cloudlets (128MB RAM + 400MHz CPU)
- A cloudlet is cheap. Pricing depends on providers. For my instance, a cloudlet on Ruk-Com costs approximately THB 50 (USD ~1.5) per month
- Applications with lower resource requirements result in lower hosting costs
- You can set the “scaling limit” for each service to control spending
- Free subdomain and SSL included with every deployment
- You only need to make sure your container listens on port 8080, and Virtuozzo will set up a Shared Load Balancer to securely route traffic to your container and takes care of SSL/HTTPS for you
- Intuitive management interface - The control panel provides easy access to:
- Service management
- Application logs
- File system browser
- Deployment configuration
- Prepaid account balance system - No bill shock concerns as you simply top up your account in advance and services consume from that balance
- Multi-region flexibility - Easy migration of environments between geographical regions when your provider operates in multiple locations
Observations
These are my observations from about 2 weeks of running n8n on Virtuozzo PaaS:
Resource usage: At idle, n8n consumes about 2~3 cloudlets, which is about 100~150 THB per month. However, you should set a high scaling limit (such as 8~12 cloudlets) so that the system can scale up when needed, and so that n8n can handle spikes in memory usage when running workflows. Otherwise, n8n may crash when it runs out of memory. If you want to save cost, then you will need to learn how to optimize n8n's memory usage.
No crash recovery by default: If your n8n instance crashes on its own, by default, it will not automatically restart. You will need to manually restart the node from the control panel. I worked around this by configuring Node.js RAM limit to 8GB (
--max_old_space_size=8000
), which is way larger than the scaling limit. This way, the platform’s OOM killer will kill the n8n process before Node.js crashes on its own, and the platform will automatically restart the n8n process.Compatibility: While most features work very well (Webhooks, Schedule Trigger, etc.), the MCP Trigger doesn’t seem to work well with Shared Load Balancer (SLB), so if you plan to integrate n8n with your AI agent (MCP clients), this set up may not be suitable for you.
Setting up n8n
Start by clicking New Environment:
In the New Environment window, select a Custom container for the Application Server then click on Select Image:
In the Select Container screen, search for n8n, select n8nio/n8n and then click Next:
Configure the following:
- Set your own Environment Name and note the domain name
- Ensure Access via SLB is turned on.
- Adjust the number of Cloudlets to your needs, which will affect the cost
- Then, click on Variables, which will take you to the next screen
Configure the following Environment Variables:
Name | Value |
---|---|
GENERIC_TIMEZONE | Asia/Bangkok |
WEBHOOK_URL | https://<your-subdomain>/ |
N8N_PROTOCOL | https |
N8N_HOST | <your-subdomain> |
N8N_PORT | 8080 |
NODE_OPTIONS | --max_old_space_size=8000 |
On the same window, go to Volumes and add a Local Filesystem volume at /home/node/.n8n
, then click Apply.
Then, go to SSL and enable Built-in SSL. Finally, click Create to deploy the environment:
After creation, you can access your n8n instance and create an admin user.