Why HTTPS is required
Modern email clients implement strict security policies:- Gmail, Outlook, and other providers proxy or block HTTP images
- Mixed content policies prevent HTTP resources from loading in HTTPS contexts
- Without HTTPS, your tracking pixels will not load reliably
Production deployment steps
Follow these steps to deploy Email Tracker with HTTPS:1. Configure DNS
Point your domain’s DNS A record to your server’s IP address:2. Configure firewall and NAT
Open the required ports on your server’s firewall:- Forward ports
80and443to your server’s internal IP - Configure port forwarding in your router’s admin interface
3. Run Node server on localhost
Start the Email Tracker server on a local port (not exposed to the internet):127.0.0.1:8090 (or your chosen port).
4. Set up reverse proxy
Place a reverse proxy in front of your Node.js server to:- Terminate TLS/SSL connections
- Proxy requests to the Node server
- Handle HTTPS certificate management
5. Obtain SSL certificate
- Caddy
- Nginx
- Custom certificate
Caddy automatically obtains and renews Let’s Encrypt certificates. No manual configuration needed.
Verification
After completing the setup, verify your deployment:1. Check HTTPS is working
Visit your domain in a browser:- Valid HTTPS certificate (no browser warnings)
- Response:
{"status":"ok"}
2. Test tracking pixel
Verify the pixel endpoint is accessible via HTTPS:3. Update extension configuration
In the Chrome extension popup:-
Set Tracker Base URL to your HTTPS domain:
-
Set Dashboard Token to match your
DASHBOARD_TOKEN - Send a test email and verify tracking works
Troubleshooting
Tracking pixel not loading
- Verify HTTPS certificate is valid (no browser warnings)
- Check reverse proxy is correctly forwarding to Node server
- Confirm firewall allows ports 80 and 443
- Test pixel URL directly in browser
Certificate errors
- Ensure DNS points to correct server IP
- Verify domain name matches certificate
- Check certificate hasn’t expired
- Confirm intermediate certificates are included
Connection timeout
- Check Node server is running on expected port
- Verify reverse proxy configuration is correct
- Test local server:
curl http://127.0.0.1:8090/health - Check firewall rules aren’t blocking traffic
Next steps
- Configure reverse proxy with Caddy or Nginx
- Review operational recommendations
- Set up database backups