4.1 KiB
4.1 KiB
Deployment Guide
🚀 Quick Deployment
Prerequisites
- Resend API Key - Get from resend.com/api-keys
- Verified Domain - Verify your domain in Resend dashboard
- Environment Setup - Copy
.env.exampleto.env
Environment Configuration
# Required
RESEND_API_KEY=re_your_api_key_here
FROM_DOMAIN=yourdomain.com
# Optional
FROM_EMAIL=noreply@yourdomain.com
NODE_ENV=production
PORT=3001
RATE_LIMIT_MAX=10
RATE_LIMIT_WINDOW_MS=900000
CORS_ORIGIN=https://yourapp.com
LOG_LEVEL=info
🐳 Docker Deployment (Recommended)
Quick Start
# Build and run
docker-compose up -d
# Check status
docker-compose ps
# View logs
docker-compose logs -f email-service
Manual Docker
# Build image
docker build -t email-service .
# Run container
docker run -d \
--name email-service \
-p 3001:3001 \
--env-file .env \
email-service
🖥️ Node.js Deployment
Development
npm install
npm run server:dev # Backend with hot reload
npm run dev # Frontend (separate terminal)
Production
npm install --production
npm run build
npm start
☁️ Cloud Deployment
Vercel
// vercel.json
{
"version": 2,
"builds": [{ "src": "server.ts", "use": "@vercel/node" }],
"routes": [{ "src": "/(.*)", "dest": "/server.ts" }]
}
Railway
railway login
railway init
railway up
Heroku
# Procfile
web: npm start
# Deploy
git push heroku main
🔧 Configuration
Rate Limiting
Adjust based on your needs:
# Conservative (5 emails per 15 minutes)
RATE_LIMIT_MAX=5
RATE_LIMIT_WINDOW_MS=900000
# Moderate (20 emails per 10 minutes)
RATE_LIMIT_MAX=20
RATE_LIMIT_WINDOW_MS=600000
# High volume (100 emails per 5 minutes)
RATE_LIMIT_MAX=100
RATE_LIMIT_WINDOW_MS=300000
Security Headers
The service includes:
- Content Security Policy
- HSTS (HTTP Strict Transport Security)
- X-Frame-Options
- X-Content-Type-Options
- Referrer Policy
CORS Configuration
# Single origin
CORS_ORIGIN=https://yourapp.com
# Multiple origins (not recommended for production)
CORS_ORIGIN=https://yourapp.com,https://admin.yourapp.com
📊 Monitoring
Health Check
curl http://localhost:3001/health
Response:
{
"status": "healthy",
"timestamp": "2026-03-12T10:00:00.000Z",
"service": "email-template-service",
"version": "1.0.0"
}
Logs
All logs are structured JSON:
{
"level": "info",
"message": "Email sent successfully",
"timestamp": "2026-03-12T10:00:00.000Z",
"meta": {
"templateId": "invitation",
"to": "u***@example.com",
"messageId": "abc123"
}
}
🔍 Troubleshooting
Common Issues
"Domain not verified"
- Verify domain in Resend dashboard
- Add SPF record:
v=spf1 include:_spf.resend.com ~all - Add DKIM records (provided by Resend)
"Rate limit exceeded"
- Check current limits:
curl http://localhost:3001/api - Adjust
RATE_LIMIT_MAXin environment
"Email not delivered"
- Check Resend logs in dashboard
- Verify recipient email address
- Check spam folder
- Verify SPF/DKIM records
"Validation errors"
- Check request format matches API documentation
- Verify all required fields are provided
- Check data types (strings, numbers, etc.)
Debug Mode
NODE_ENV=development
LOG_LEVEL=debug
📋 Production Checklist
Before going live:
- Environment variables configured
- Domain verified in Resend
- DNS records added (SPF, DKIM)
- SSL certificate installed
- Rate limits configured appropriately
- CORS origins restricted to your domains
- Health checks working
- Monitoring/alerting set up
- Load testing completed
🚨 Security Considerations
- Never expose API keys in frontend code
- Use environment variables for all secrets
- Restrict CORS origins to your domains only
- Monitor rate limits and adjust as needed
- Keep dependencies updated regularly
- Use HTTPS in production
- Monitor logs for suspicious activity
The service is production-ready with enterprise-grade security and reliability!