Deploy EmailEngine on Render.com
Deploy EmailEngine on Render.com with zero DevOps overhead. Render provides managed hosting with automatic SSL, built-in monitoring, and Redis add-ons.
Overview
Render.com is a modern cloud platform that makes deploying applications simple. You can set up EmailEngine entirely from the web UI without SSH access.
Benefits of Render deployment:
- Fully managed infrastructure
- Automatic SSL certificates
- Built-in Redis support
- Auto-deploy from Git
- Simple environment configuration
- Automatic health checks
- Built-in monitoring and logs
Costs (as of 2025):
- Web Service: Starting at $7/month (Starter plan)
- Redis: Starting at $7/month (256MB)
- Total minimum: ~$14/month
Do not choose the smallest instance sizes. EmailEngine requires at least:
- 1GB RAM for web service
- 256MB+ for Redis (with
noevictionpolicy)
Step-by-Step Setup
Step 1: Create Redis Instance
-
Log in to Render Dashboard: https://dashboard.render.com
-
Click "New +" button (top right)
-
Select "Redis"

-
Configure Redis:
Setting Value Notes Name emailengine-redisAny name you prefer Region Closest to you For best performance Plan Starter (256MB+) Minimum recommended Maxmemory Policy noevictionRequired Eviction Disabled Prevents data loss 
-
Click "Create Redis"
-
Copy Redis URL:
- Wait for Redis to start (usually < 1 minute)
- On the Redis info page, copy the Internal Connection String
- Format:
redis://red-xxxxx:6379

Use the Internal Connection String for better performance and no data transfer costs. External URLs are only needed if connecting from outside Render.
Step 2: Deploy EmailEngine
-
Click "New +" button again
-
Select "Web Service"

-
Connect Repository:
- Select "Deploy an existing image from a registry" OR
- Use public repository:
https://github.com/postalsys/emailengine

-
Click "Connect" next to
postalsys/emailengine -
Configure Web Service:
Setting Value Notes Name emailengineAny name you prefer Region Same as Redis Important for latency Branch masterOr specific version tag Environment NodeRequired Build Command npm install --omit=devInstalls dependencies Start Command npm startStarts EmailEngine Plan Starter (1GB RAM+) Minimum recommended -
Add Environment Variables:
Click "Advanced" section and add these variables:
Key Value Required EENGINE_REDISredis://red-xxxxx:6379/8Yes EENGINE_SECRETGenerate random string (32+ chars) Yes EENGINE_WORKERS2Optional NODE_ENVproductionRecommended
Generate Strong SecretsUse a password generator to create strong random strings:
# Linux/Mac
openssl rand -hex 32
# Or use online generator
# https://www.random.org/strings/ -
Click "Create Web Service"
Step 3: Wait for Deployment
-
Monitor deployment:
- Render will clone repository
- Install dependencies
- Build application
- Start service
- Usually takes 3-5 minutes
-
Check logs:
- Click "Logs" tab to see real-time progress
- Look for:
Started API server thread
-
Get application URL:
- Once deployed, URL appears at top:
https://emailengine-xxxx.onrender.com

- Once deployed, URL appears at top:
-
Access EmailEngine:
- Open the URL in your browser
- You should see EmailEngine login/setup page
EmailEngine is now running on Render with automatic SSL and monitoring.
Post-Deployment Configuration
Custom Domain
Add your own domain:
- Go to Settings → Custom Domains
- Click "Add Custom Domain"
- Enter your domain (e.g.,
emailengine.yourdomain.com) - Add DNS record:
CNAME emailengine.yourdomain.com → emailengine-xxxx.onrender.com - Wait for DNS propagation
- SSL certificate is automatically provisioned
Environment Variables
Update environment variables:
- Go to Environment tab
- Click variable to edit
- Update value
- Service automatically redeploys
Common variables to add:
# License key (use Render environment editor for multiline values)
EENGINE_PREPARED_LICENSE="<your-encoded-license>"
# Performance
EENGINE_WORKERS=4
# Pre-configured settings as JSON (webhooks, OAuth2, etc.)
EENGINE_SETTINGS='{"webhooks":"https://your-app.com/webhooks","webhookEvents":["*"],"webhooksEnabled":true}'
OAuth2 credentials and webhook URLs are not configured via individual environment variables. Instead, use the EmailEngine web UI or the EENGINE_SETTINGS JSON environment variable to configure these settings after deployment.
Health Checks
Render automatically monitors:
- HTTP health checks every 30 seconds
- Automatic restart on failure
- View in Events tab
Custom health check:
Add to render.yaml in your repository:
services:
- type: web
name: emailengine
runtime: node
healthCheckPath: /health
buildCommand: npm install --omit=dev
startCommand: npm start
envVars:
- key: EENGINE_REDIS
sync: false
Scaling and Performance
Vertical Scaling
Upgrade instance size:
- Go to Settings → Instance Type
- Select larger plan:
- Starter: 1 GB RAM, 0.5 CPU ($7/month)
- Standard: 2 GB RAM, 1 CPU ($25/month)
- Pro: 4 GB RAM, 2 CPU ($85/month)
- Service automatically redeploys
When to upgrade:
- More than 100 active accounts
- High webhook volume
- Large mailboxes (10,000+ messages)
- Performance monitoring shows high resource usage
Horizontal Scaling Not Supported
EmailEngine does NOT support horizontal scaling. Running multiple EmailEngine instances connected to the same Redis will cause each instance to independently sync all accounts, leading to conflicts and wasted resources.
Instead:
- Upgrade to higher tier with more resources (vertical scaling)
- For very large deployments: Contact EmailEngine support for guidance on manual sharding strategies (requires separate Redis instances and complex routing)
Redis Scaling
Upgrade Redis:
- Go to Redis dashboard
- Settings → Plan
- Select larger size:
- Starter: 256 MB ($7/month)
- Standard: 1 GB ($25/month)
- Pro: 4 GB ($90/month)
When to upgrade:
- More than 100 accounts
- Memory usage > 80%
- Check metrics in Redis dashboard
Monitoring and Logs
View Logs
Real-time logs:
- Go to Logs tab
- Select time range
- Filter by search terms
- Download logs if needed
Log examples:
{"level":30,"msg":"Started API server thread","port":3000,"host":"0.0.0.0"}
{"level":30,"msg":"All required threads are available","threads":["api","imap","webhooks","submit"]}
{"level":30,"msg":"Account state change","account":"user@gmail.com","state":"connected"}
Metrics
Built-in metrics:
- Go to Metrics tab
- View:
- CPU usage
- Memory usage
- Network traffic
- Request count
- Response times
Prometheus metrics:
Create a token with metrics scope:
emailengine tokens issue -d "Prometheus" -s "metrics"
Access at: https://your-app.onrender.com/metrics
curl -H "Authorization: Bearer YOUR_TOKEN" https://your-app.onrender.com/metrics
Alerts
Set up alerts:
- Go to Settings → Notifications
- Add email or Slack webhook
- Configure alert conditions:
- Service down
- High CPU usage
- High memory usage
- Deploy failures
Backup and Disaster Recovery
Redis Backup
Automatic backups:
- Render Pro Redis plans include automatic backups
- Daily snapshots retained for 7 days
Manual backup:
# Connect to Redis via external URL
redis-cli -u redis://default:password@red-xxxxx.render.com:6379
# Trigger backup
SAVE
# Or background save
BGSAVE
Export Data
Backup configuration:
-
Environment variables:
- Copy from Render dashboard
- Store securely (encrypted)
-
Account data:
- Use EmailEngine API to export account list
- Store credentials separately
# Export accounts
curl https://your-app.onrender.com/v1/accounts \
-H "Authorization: Bearer YOUR_TOKEN" > accounts.json
Disaster Recovery
Restore from backup:
- Create new Render services (Redis + Web)
- Restore Redis data
- Configure environment variables
- Update DNS to point to new service
Estimated recovery time: 30-60 minutes
Advanced Configuration
Auto-Deploy from GitHub
Enable automatic deployments:
- Connect GitHub repository
- Settings → Build & Deploy
- Enable Auto-Deploy
- Choose branch (e.g.,
main) - Every push triggers deployment
Deploy on PR merge:
- Auto-deploy only on main branch
- Test in preview environments first
Preview Environments
Create staging environment:
- Create separate web service:
emailengine-staging - Use separate Redis:
emailengine-redis-staging - Configure different environment variables
- Deploy from
developbranch
Benefits:
- Test changes before production
- Separate data and credentials
- Different configuration
Infrastructure as Code
Use render.yaml:
Create in repository root:
services:
- type: web
name: emailengine
runtime: node
region: oregon
plan: starter
buildCommand: npm install --omit=dev
startCommand: npm start
# healthCheckPath: /health # Optional - uncomment to enable
envVars:
- key: NODE_ENV
value: production
- key: EENGINE_REDIS
fromService:
type: redis
name: emailengine-redis
property: connectionString
- key: EENGINE_SECRET
generateValue: true
- key: EENGINE_WORKERS
value: "2"
- key: EENGINE_HOST
value: "0.0.0.0"
- key: EENGINE_API_PROXY
value: "1"
- type: redis
name: emailengine-redis
plan: starter
region: oregon
maxmemoryPolicy: noeviction
Deploy with render.yaml:
# Commit to repository
git add render.yaml
git commit -m "Add Render configuration"
git push
# Render automatically detects and applies configuration
Multiple Regions
Deploy to multiple regions:
- Create separate services in each region
- Use region-specific Redis
- Configure global load balancer (external)
- Or use DNS-based routing
Regions available:
- Oregon (US West)
- Ohio (US East)
- Frankfurt (Europe)
- Singapore (Asia)
Migration from Render
Export Configuration
1. Document all settings:
# List environment variables
render services list
render services env list emailengine
# Export to file
render services env list emailengine > env-vars.txt
2. Backup Redis data:
# Connect and backup
redis-cli -u <external-redis-url> --rdb ./dump.rdb
Migrate to Other Platforms
To Docker/VPS:
- Export environment variables
- Create docker-compose.yml with same configuration
- Restore Redis data
- Update DNS
To Kubernetes:
- Convert render.yaml to k8s manifests
- Set up Redis StatefulSet
- Deploy EmailEngine Deployment
- Configure Ingress
Cost Optimization Tips
-
Start small:
- Begin with Starter plans ($14/month)
- Scale up as needed
-
Monitor usage:
- Check metrics weekly
- Downgrade if over-provisioned
-
Optimize configuration:
- Reduce workers on small instances
- Limit connections per account
- Disable unused features
-
Consider alternatives at scale:
- Self-hosted VPS: ~$10-20/month for 500+ accounts
- Render is best for < 200 accounts