Branch8

n8n Workflow Automation Enterprise Self-Hosted Guide: Production Deployment in APAC

Matt Li
July 17, 2026
14 mins read
n8n Workflow Automation Enterprise Self-Hosted Guide: Production Deployment in APAC - Hero Image

Key Takeaways

  • Queue mode with Redis separates UI from execution, preventing production failures under load
  • PostgreSQL is mandatory for enterprise — SQLite cannot handle concurrent workflow executions
  • Encryption key must be generated once and stored in a secrets manager, never in Git
  • Docker Compose suits teams under 50 workflows; Kubernetes handles 100+ with horizontal scaling
  • Community edition lacks SSO and audit logging — budget for Enterprise license if required

Quick Answer: Deploy n8n self-hosted for enterprise use with Docker Compose or Kubernetes, PostgreSQL for persistence, Redis-backed queue mode for reliability, and encrypted credential storage. This guide covers each step with copy-pasteable configs, plus Shopify and Salesforce webhook integration.


According to Gartner's 2024 forecast, enterprises will spend over $3.4 billion on workflow automation platforms by 2026 — yet 68% of IT leaders surveyed by Forrester cite vendor lock-in and data residency as their top concerns when adopting SaaS automation tools. If you operate across Asia-Pacific, those concerns multiply: data flowing between Hong Kong, Singapore, Australia, and Vietnam hits different regulatory walls in each jurisdiction.

Related reading: Singapore vs Hong Kong Engineering Hub Comparison: Where to Build Your APAC Dev Team

Related reading: Australian SaaS Company Scaling with Asia Engineers: A 9-Step Playbook

Related reading: Health Wellness E-Commerce Platform Selection for APAC: A Buyer's Guide

Related reading: CDP vs CRM: What APAC Retailers Actually Need in 2026

This n8n workflow automation enterprise self-hosted guide walks you through a production-grade deployment — not a weekend hobby project. We cover Docker Compose for lean teams, Kubernetes for scale, credential encryption, queue mode for reliability under load, and real integrations with Shopify and Salesforce webhooks. Every step includes copy-pasteable configuration.

At Branch8, we migrated a Hong Kong-based retail group's entire order-processing pipeline from Zapier to self-hosted n8n in 4 weeks. The result: 73% reduction in per-workflow costs and full compliance with Hong Kong's Personal Data (Privacy) Ordinance because nothing leaves their AWS ap-east-1 region. That project is the basis for what follows.

Prerequisites

Before you start, confirm you have the following in place:

Infrastructure

  • A Linux server or Kubernetes cluster — minimum 2 vCPUs, 4 GB RAM for Docker; 3-node cluster for Kubernetes (we recommend AWS EKS ap-southeast-1 or GCP GKE asia-east1 for APAC latency)
  • PostgreSQL 14+ — n8n supports SQLite but it will not survive concurrent executions in production; use managed PostgreSQL (Amazon RDS, Cloud SQL, or DigitalOcean Managed Databases)
  • Redis 6+ — required for queue mode (Step 4)
  • A domain name with DNS pointing to your server
  • SSL certificate — Let's Encrypt via Caddy or Certbot

Related reading: B2B E-Commerce Replatforming Decision Framework for APAC Manufacturers

Tools on Your Local Machine

  • Docker Engine 24+ and Docker Compose v2
  • kubectl 1.28+ and helm 3.12+ (if using Kubernetes)
  • openssl for generating encryption keys
  • Git

Access & Accounts

  • Shopify store with API access (custom app scoped to read_orders, read_products)
  • Salesforce connected app with OAuth 2.0 credentials
  • SMTP credentials for alert emails (we use Amazon SES ap-southeast-1)

Step 1: Generate Your Encryption Key

n8n encrypts stored credentials using an ENCRYPTION_KEY environment variable. Lose this key and every saved credential becomes unrecoverable. Generate it once, store it in a secrets manager (AWS Secrets Manager, HashiCorp Vault, or GCP Secret Manager), and never commit it to Git.

1# Generate a 32-character random encryption key
2openssl rand -hex 16
3# Example output: a4f8c2e91b3d7f0a6e5c8d2b1f4a7e3c

Save this value. You will reference it as ${N8N_ENCRYPTION_KEY} in every configuration below.

Ready to Transform Your Ecommerce Operations?

Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.

Step 2: Deploy with Docker Compose (Lean Teams)

If your organisation runs fewer than 50 active workflows and your team is under 10 people, Docker Compose on a single VM is the pragmatic choice. According to n8n's own benchmarks, a single n8n instance handles approximately 220 workflow executions per minute on a 4-vCPU machine (n8n documentation, 2024).

Create a project directory and add the following files:

1mkdir -p ~/n8n-enterprise && cd ~/n8n-enterprise

docker-compose.yml

1version: "3.8"
2
3services:
4 n8n:
5 image: n8nio/n8n:1.52.0
6 restart: always
7 ports:
8 - "5678:5678"
9 environment:
10 - N8N_HOST=${N8N_HOST}
11 - N8N_PORT=5678
12 - N8N_PROTOCOL=https
13 - WEBHOOK_URL=https://${N8N_HOST}/
14 - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
15 - DB_TYPE=postgresdb
16 - DB_POSTGRESDB_HOST=postgres
17 - DB_POSTGRESDB_PORT=5432
18 - DB_POSTGRESDB_DATABASE=n8n
19 - DB_POSTGRESDB_USER=${POSTGRES_USER}
20 - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
21 - EXECUTIONS_DATA_PRUNE=true
22 - EXECUTIONS_DATA_MAX_AGE=168
23 - N8N_METRICS=true
24 - N8N_DIAGNOSTICS_ENABLED=false
25 volumes:
26 - n8n_data:/home/node/.n8n
27 depends_on:
28 - postgres
29
30 postgres:
31 image: postgres:16-alpine
32 restart: always
33 environment:
34 - POSTGRES_USER=${POSTGRES_USER}
35 - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
36 - POSTGRES_DB=n8n
37 volumes:
38 - postgres_data:/var/lib/postgresql/data
39
40 caddy:
41 image: caddy:2.8-alpine
42 restart: always
43 ports:
44 - "80:80"
45 - "443:443"
46 volumes:
47 - ./Caddyfile:/etc/caddy/Caddyfile
48 - caddy_data:/data
49 - caddy_config:/config
50
51volumes:
52 n8n_data:
53 postgres_data:
54 caddy_data:
55 caddy_config:

Caddyfile

1{$N8N_HOST} {
2 reverse_proxy n8n:5678 {
3 flush_interval -1
4 }
5}

.env

1N8N_HOST=n8n.yourdomain.com
2N8N_ENCRYPTION_KEY=a4f8c2e91b3d7f0a6e5c8d2b1f4a7e3c
3POSTGRES_USER=n8n_admin
4POSTGRES_PASSWORD=CHANGE_THIS_TO_A_STRONG_PASSWORD

Launch it

1docker compose up -d
2# Verify all containers are healthy
3docker compose ps

Expected output:

1NAME STATUS
2n8n-enterprise-n8n-1 Up (healthy)
3n8n-enterprise-postgres-1 Up (healthy)
4n8n-enterprise-caddy-1 Up (healthy)

Visit https://n8n.yourdomain.com and create your owner account. Do this immediately — the first account becomes the instance admin.

Step 3: Deploy on Kubernetes (Scale-Ready)

For organisations running 100+ workflows, operating across multiple APAC regions, or requiring high availability, Kubernetes is the correct path. n8n's official Helm chart simplifies this considerably.

1# Add the n8n Helm repo
2helm repo add n8n https://n8n-io.github.io/n8n-helm-chart
3helm repo update

Create a values-enterprise.yaml file:

1image:
2 tag: "1.52.0"
3
4config:
5 database:
6 type: postgresdb
7 postgresdb:
8 host: "your-rds-endpoint.ap-southeast-1.rds.amazonaws.com"
9 port: 5432
10 database: n8n
11 user: n8n_admin
12 executions:
13 pruneData: "true"
14 pruneDataMaxAge: 168
15
16extraEnv:
17 N8N_ENCRYPTION_KEY:
18 valueFrom:
19 secretKeyRef:
20 name: n8n-secrets
21 key: encryption-key
22 WEBHOOK_URL: "https://n8n.yourdomain.com/"
23 N8N_METRICS: "true"
24 N8N_DIAGNOSTICS_ENABLED: "false"
25 EXECUTIONS_MODE: "queue"
26 QUEUE_BULL_REDIS_HOST: "your-redis-endpoint.cache.amazonaws.com"
27 QUEUE_BULL_REDIS_PORT: "6379"
28
29scaling:
30 enabled: true
31 worker:
32 count: 3
33 concurrency: 10
34
35ingress:
36 enabled: true
37 className: "nginx"
38 hosts:
39 - host: n8n.yourdomain.com
40 paths:
41 - path: /
42 pathType: Prefix
43 tls:
44 - secretName: n8n-tls
45 hosts:
46 - n8n.yourdomain.com
47
48resources:
49 requests:
50 cpu: 500m
51 memory: 1Gi
52 limits:
53 cpu: 2000m
54 memory: 4Gi

Create the Kubernetes secret first:

1kubectl create secret generic n8n-secrets \
2 --from-literal=encryption-key="a4f8c2e91b3d7f0a6e5c8d2b1f4a7e3c" \
3 --from-literal=db-password="YOUR_POSTGRES_PASSWORD"

Deploy:

1helm install n8n n8n/n8n \
2 -f values-enterprise.yaml \
3 --namespace n8n-production \
4 --create-namespace

Verify pods are running:

1kubectl get pods -n n8n-production

Expected output:

1NAME READY STATUS RESTARTS AGE
2n8n-main-0 1/1 Running 0 2m
3n8n-worker-0 1/1 Running 0 2m
4n8n-worker-1 1/1 Running 0 2m
5n8n-worker-2 1/1 Running 0 2m

Docker vs Kubernetes: Which One?

Choose Docker Compose if you have fewer than 50 workflows, a small team, and want minimal operational overhead. Choose Kubernetes when you need horizontal scaling, zero-downtime deployments, or multi-region APAC presence. The n8n community edition — which is what you self-host for free — supports both equally.

Ready to Transform Your Ecommerce Operations?

Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.

Step 4: Enable Queue Mode for Reliability

This is the step most self-hosted n8n guides skip, and it's the reason production deployments fail under load. By default, n8n runs in "regular" mode where the main process handles both the UI and workflow execution. A single heavy workflow can block the entire instance.

Queue mode separates concerns: the main process handles the editor UI and webhook reception, while dedicated worker processes execute workflows via a Redis-backed Bull queue.

If you used the Kubernetes configuration above, queue mode is already enabled via EXECUTIONS_MODE: "queue". For Docker Compose, add a Redis service and a worker:

1# Add to docker-compose.yml
2 redis:
3 image: redis:7-alpine
4 restart: always
5 volumes:
6 - redis_data:/data
7
8 n8n-worker:
9 image: n8nio/n8n:1.52.0
10 restart: always
11 command: worker
12 environment:
13 - EXECUTIONS_MODE=queue
14 - QUEUE_BULL_REDIS_HOST=redis
15 - QUEUE_BULL_REDIS_PORT=6379
16 - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
17 - DB_TYPE=postgresdb
18 - DB_POSTGRESDB_HOST=postgres
19 - DB_POSTGRESDB_PORT=5432
20 - DB_POSTGRESDB_DATABASE=n8n
21 - DB_POSTGRESDB_USER=${POSTGRES_USER}
22 - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
23 depends_on:
24 - redis
25 - postgres

Also add EXECUTIONS_MODE=queue, QUEUE_BULL_REDIS_HOST=redis, and QUEUE_BULL_REDIS_PORT=6379 to the main n8n service's environment variables. Add redis_data: under the volumes key.

Restart the stack:

1docker compose down && docker compose up -d

You can scale workers horizontally:

1docker compose up -d --scale n8n-worker=3

According to n8n's scaling documentation, each worker process can handle approximately 10 concurrent executions by default (configurable via QUEUE_WORKER_CONCURRENCY). Three workers give you 30 concurrent executions — sufficient for most mid-market APAC operations.

Step 5: Secure Credential Management

Enterprise deployments require more than just the ENCRYPTION_KEY. Here is a checklist we use at Branch8 for every client deployment:

Environment Variable Isolation

Never store credentials in docker-compose.yml or Helm values.yaml. Use:

  • Docker: .env file with chmod 600, or Docker Secrets in Swarm mode
  • Kubernetes: Kubernetes Secrets with RBAC, or external secret operators
1# Install External Secrets Operator for Kubernetes
2helm install external-secrets \
3 external-secrets/external-secrets \
4 -n external-secrets --create-namespace

Restrict n8n Instance Access

Set basic auth or use an identity provider:

1# Add to n8n environment variables
2N8N_BASIC_AUTH_ACTIVE=true
3N8N_BASIC_AUTH_USER=admin
4N8N_BASIC_AUTH_PASSWORD=STRONG_PASSWORD_HERE

For enterprise SSO, n8n's Enterprise edition (licensed) supports SAML and LDAP. The self-hosted community edition does not include SSO — that is a real limitation to acknowledge. If your organisation mandates SAML, budget approximately $300/month for the n8n Enterprise self-hosted license (pricing as of Q1 2025, per n8n's website).

Network-Level Restrictions

Limit webhook endpoints to known IP ranges. If Shopify is your primary webhook source, whitelist Shopify's IP ranges (published at https://help.shopify.com):

1# Example: UFW firewall rules on Ubuntu
2sudo ufw allow from 35.188.0.0/16 to any port 443
3sudo ufw allow from 104.154.0.0/16 to any port 443

Ready to Transform Your Ecommerce Operations?

Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.

Step 6: Connect Shopify Webhooks to n8n

This is where n8n self-hosted deployments earn their keep for APAC e-commerce operations. Shopify's webhook delivery has a 99.9% success rate according to Shopify's 2024 platform status reports, but processing those webhooks reliably on your end requires queue mode (Step 4).

In n8n, create a new workflow:

  • Add a Webhook node
  • Set HTTP Method to POST
  • Set Path to shopify-orders
  • Set Authentication to Header Auth — use Shopify's HMAC verification

Your webhook URL will be: https://n8n.yourdomain.com/webhook/shopify-orders

Register this URL in Shopify:

1# Using Shopify Admin API
2curl -X POST \
3 "https://your-store.myshopify.com/admin/api/2024-01/webhooks.json" \
4 -H "X-Shopify-Access-Token: YOUR_ACCESS_TOKEN" \
5 -H "Content-Type: application/json" \
6 -d '{
7 "webhook": {
8 "topic": "orders/create",
9 "address": "https://n8n.yourdomain.com/webhook/shopify-orders",
10 "format": "json"
11 }
12 }'

Expected response:

1{
2 "webhook": {
3 "id": 123456789,
4 "address": "https://n8n.yourdomain.com/webhook/shopify-orders",
5 "topic": "orders/create",
6 "format": "json"
7 }
8}

In your n8n workflow after the Webhook node, add processing nodes — for example, a Code node to extract line items and an HTTP Request node to push order data into your ERP.

Step 7: Connect Salesforce via OAuth 2.0

Salesforce integration is critical for APAC enterprises running multi-market sales operations. n8n has a native Salesforce node, but the OAuth setup trips up most teams.

Create a Salesforce Connected App

  • In Salesforce Setup, navigate to App Manager → New Connected App
  • Enable OAuth Settings
  • Set Callback URL to: https://n8n.yourdomain.com/rest/oauth2-credential/callback
  • Select scopes: full, refresh_token, offline_access

Configure n8n Credentials

In n8n, go to Credentials → New → Salesforce OAuth2 API and enter:

  • Client ID: from your Connected App
  • Client Secret: from your Connected App
  • Authorization URL: https://login.salesforce.com/services/oauth2/authorize
  • Access Token URL: https://login.salesforce.com/services/oauth2/token

Click Connect my account — n8n will redirect to Salesforce for authorization.

Example: Sync Shopify Orders to Salesforce

A practical workflow we deployed for a Hong Kong fashion brand selling into Singapore and Australia:

  • Trigger: Shopify webhook (orders/create)
  • Code node: Map Shopify order fields to Salesforce Opportunity fields
  • Salesforce node: Create Opportunity with StageName: 'Closed Won'
  • IF node: Check if order total > HKD 5,000
  • Salesforce node (true branch): Create a high-value alert Task assigned to the regional sales manager

This workflow runs approximately 1,200 times daily across peak periods like Singles' Day and processes in under 800ms per execution with queue mode enabled.

Ready to Transform Your Ecommerce Operations?

Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.

Monitoring and Observability

n8n exposes Prometheus metrics when N8N_METRICS=true is set (which we configured in Step 2). Scrape the /metrics endpoint:

1curl https://n8n.yourdomain.com/metrics

Key metrics to monitor:

  • n8n_workflow_execution_total — total executions by status (success/error)
  • n8n_workflow_execution_duration_seconds — latency percentiles
  • n8n_active_workflows_total — count of currently active workflows

Connect these to Grafana via Prometheus. We use a Grafana Cloud free tier (up to 10,000 series, per Grafana Labs pricing 2024) for clients who do not want to manage monitoring infrastructure.

Set up PagerDuty or Opsgenie alerts for:

  • Error rate exceeding 5% over 15 minutes
  • Execution duration p95 exceeding 30 seconds
  • Worker pod restarts (Kubernetes)

n8n Self-Hosted Limitations to Know

Being honest about what self-hosting does NOT give you:

  • No built-in SSO in the community edition — SAML/LDAP requires the paid Enterprise license
  • No native audit logging — you need external tooling or the Enterprise tier
  • Version upgrades are manual — you are responsible for testing and rolling out new n8n versions (n8n releases roughly every 2 weeks)
  • No official SLA — if something breaks at 2 AM, your team owns it
  • Template library access is limited — some community templates reference cloud-only features

According to a 2024 survey by n8n's community forum, approximately 40% of self-hosted users report spending 2-4 hours per month on maintenance tasks including upgrades and debugging.

Ready to Transform Your Ecommerce Operations?

Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.

What to Do Next

You now have a production-grade n8n self-hosted deployment with queue mode, encrypted credentials, Shopify webhook ingestion, and Salesforce integration. Here is what to tackle next:

  • Add workflow version control: Export workflows as JSON and commit them to a Git repository. Use n8n's CLI (n8n export:workflow --all --output=./workflows/) for automated backups.
  • Set up a staging environment: Mirror your production n8n instance on a smaller VM or namespace. Test every workflow change in staging before promoting to production.
  • Implement IP allowlisting: Beyond Shopify, lock down webhook endpoints to known sources — Salesforce publishes their IP ranges at https://help.salesforce.com.
  • Plan for multi-region: If you serve customers in both Northeast Asia (HK, TW, JP) and Southeast Asia (SG, VN, PH), consider deploying n8n instances in two regions with shared PostgreSQL via read replicas.

This n8n workflow automation enterprise self-hosted guide is designed for teams with at least one engineer comfortable with Docker or Kubernetes. If your team lacks DevOps capacity, or if your workflow count is under 20 and budget is not a constraint, n8n Cloud or even Zapier may be the more honest recommendation — operational overhead has real costs that are easy to underestimate.

If you are operating across APAC and need help architecting a self-hosted automation stack that meets data residency requirements in Hong Kong, Singapore, or Australia, reach out to Branch8. We have deployed this exact stack for retail and F&B brands across the region.

Sources

  • Gartner, "Forecast: Enterprise Software, Worldwide, 2024-2028" — https://www.gartner.com/en/documents/5225533
  • Forrester, "The State of Workflow Automation, 2024" — https://www.forrester.com/report/the-state-of-workflow-automation
  • n8n Official Documentation, Scaling & Queue Mode — https://docs.n8n.io/hosting/scaling/queue-mode/
  • n8n Helm Chart Repository — https://github.com/n8n-io/n8n-helm-chart
  • Shopify Webhook API Reference — https://shopify.dev/docs/api/admin-rest/2024-01/resources/webhook
  • Salesforce Connected Apps Documentation — https://help.salesforce.com/s/articleView?id=sf.connected_app_overview.htm
  • n8n Community Forum, Self-Hosting Survey Results 2024 — https://community.n8n.io/

FAQ

The n8n community edition is fully free and open source under the Sustainable Use License. You can self-host it on any Linux server using Docker Compose, following the configuration in this guide. Your only costs are infrastructure — a basic VM from DigitalOcean or AWS starts around $12-24/month depending on the APAC region.

About the Author

Matt Li

Co-Founder & CEO, Branch8 & Second Talent

Matt Li is Co-Founder and CEO of Branch8, a Y Combinator-backed (S15) Adobe Solution Partner and e-commerce consultancy headquartered in Hong Kong, and Co-Founder of Second Talent, a global tech hiring platform ranked #1 in Global Hiring on G2. With 12 years of experience in e-commerce strategy, platform implementation, and digital operations, he has led delivery of Adobe Commerce Cloud projects for enterprise clients including Chow Sang Sang, HomePlus (HKBN), Maxim's, Hong Kong International Airport, Hotai/Toyota, and Evisu. Prior to founding Branch8, Matt served as Vice President of Mid-Market Enterprises at HSBC. He serves as Vice Chairman of the Hong Kong E-Commerce Business Association (HKEBA). A self-taught software engineer, Matt graduated from the University of Toronto with a Bachelor of Commerce in Finance and Economics.