{"id":43255942,"url":"https://github.com/iamgerwin/n8n-hetzner-setup","last_synced_at":"2026-02-01T13:33:07.684Z","repository":{"id":328582598,"uuid":"1110528845","full_name":"iamgerwin/n8n-hetzner-setup","owner":"iamgerwin","description":"Production-ready self-hosted n8n instance with Docker, PostgreSQL, Redis, and Traefik.","archived":false,"fork":false,"pushed_at":"2025-12-14T05:10:35.000Z","size":48,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-16T07:11:56.062Z","etag":null,"topics":["hetzner","n8n","self-hosted","server","traefik","vps"],"latest_commit_sha":null,"homepage":"https://usisa.store:9999/","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iamgerwin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-05T10:27:57.000Z","updated_at":"2025-12-14T05:10:39.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/iamgerwin/n8n-hetzner-setup","commit_stats":null,"previous_names":["iamgerwin/n8n-hetzner-setup"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/iamgerwin/n8n-hetzner-setup","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iamgerwin%2Fn8n-hetzner-setup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iamgerwin%2Fn8n-hetzner-setup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iamgerwin%2Fn8n-hetzner-setup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iamgerwin%2Fn8n-hetzner-setup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iamgerwin","download_url":"https://codeload.github.com/iamgerwin/n8n-hetzner-setup/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iamgerwin%2Fn8n-hetzner-setup/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28979126,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T12:13:08.691Z","status":"ssl_error","status_checked_at":"2026-02-01T12:13:08.356Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hetzner","n8n","self-hosted","server","traefik","vps"],"created_at":"2026-02-01T13:33:07.189Z","updated_at":"2026-02-01T13:33:07.295Z","avatar_url":"https://github.com/iamgerwin.png","language":"Shell","readme":"# n8n Self-Hosted Setup\n\nProduction-ready self-hosted n8n instance with Docker, PostgreSQL, Redis, and Traefik.\n\n## Directory Structure\n\n```\n/home/sites/n8n/\n├── docker-compose.yml      # Docker Compose configuration\n├── .env                     # Environment variables (KEEP SECURE!)\n├── Makefile                # Convenient management commands\n├── README.md               # This file\n├── config/\n│   ├── encryption_key.txt  # n8n encryption key (keep secure)\n│   └── init-data.sh        # PostgreSQL initialization script\n├── scripts/\n│   ├── update.sh          # Safely update n8n\n│   ├── backup.sh          # Create timestamped backups\n│   ├── restore.sh         # Restore from backup\n│   └── logs.sh            # View service logs\n├── data/                   # Local files for n8n workflows\n└── backup/                 # Timestamped backups\n```\n\n## Quick Start\n\n### 1. Start Services\n\n```bash\ncd /home/sites/n8n\ndocker-compose up -d\n```\n\nOr using Make:\n\n```bash\nmake up\n```\n\n### 2. Access n8n\n\n- **URL**: http://localhost:5678 (internal)\n- **Public URL**: https://localhost:9999 (via Traefik)\n- Complete initial setup wizard on first access\n\n### 3. Check Status\n\n```bash\nmake status\n```\n\n## Configuration\n\nEdit `.env` file to customize:\n\n- `N8N_HOST` - Hostname\n- `TRAEFIK_DOMAIN` - Domain for Traefik\n- `N8N_EXTERNAL_PORT` - External port (default: 9999)\n- `GENERIC_TIMEZONE` - Timezone\n- Database and Redis passwords\n\n**IMPORTANT**: Keep `.env` and `config/encryption_key.txt` secure!\n\n## Common Commands\n\n### Using Make\n\n```bash\nmake help                # Show all available commands\nmake up                  # Start all services\nmake down                # Stop all services\nmake status              # Show service status\nmake logs                # View all logs\nmake logs-n8n            # View n8n logs only\nmake backup              # Create backup\nmake restore             # Restore from backup\nmake update              # Update n8n safely\nmake restart             # Restart all services\n```\n\n### Using Docker Compose\n\n```bash\ndocker-compose up -d                    # Start\ndocker-compose down                     # Stop\ndocker-compose ps                       # Status\ndocker-compose logs -f n8n              # View n8n logs\ndocker-compose restart                  # Restart\n```\n\n## Backup and Restore\n\n### Create Backup\n\n```bash\nmake backup\n# or\n./scripts/backup.sh\n```\n\nBackups are saved to `/home/sites/n8n/backup/` with timestamp.\n\n### Restore from Backup\n\n```bash\nmake restore\n# or\n./scripts/restore.sh\n```\n\nSelect backup file when prompted.\n\n## Updates\n\nUpdate n8n safely with automatic backup:\n\n```bash\nmake update\n# or\n./scripts/update.sh\n```\n\nProcess:\n1. Creates backup before update\n2. Pulls latest images\n3. Restarts services\n4. Verifies health\n\n## Services\n\n### n8n (Main)\n- Handles UI, API, and webhook triggers\n- Internal port: 5678\n- Container: n8n-main\n\n### n8n Worker\n- Processes queued workflows\n- Scales horizontally (add more workers in docker-compose.yml)\n- Container: n8n-worker\n\n### PostgreSQL\n- Persistent workflow data storage\n- Database: n8n\n- User: n8n (non-root)\n- Container: n8n-postgres\n\n### Redis\n- Queue management for workflow distribution\n- Container: n8n-redis\n\n### Traefik\n- Reverse proxy with HTTPS/TLS\n- Manages routing and certificates\n- External ports: 80, 443, 9999\n- Container: n8n-traefik\n\n## Scaling Workers\n\nTo add more workers, edit `docker-compose.yml`:\n\n```yaml\nn8n-worker-2:\n  image: n8nio/n8n:latest\n  container_name: n8n-worker-2\n  restart: always\n  user: '1000:1000'\n  depends_on:\n    postgres:\n      condition: service_healthy\n    redis:\n      condition: service_healthy\n  command: worker\n  environment:\n    # Same environment as n8n-worker\n    ...\n  volumes:\n    - n8n_storage:/home/node/.n8n\n  networks:\n    - n8n-net\n```\n\nThen run: `docker-compose up -d`\n\n## HTTPS Configuration\n\n### Let's Encrypt (Recommended)\n\n1. Point domain to server IP\n2. Update `.env`:\n   ```\n   TRAEFIK_DOMAIN=yourdomain.com\n   ```\n3. Update `docker-compose.yml` Traefik email\n4. Restart: `make restart`\n\n### Self-Signed Certificate\n\nAlready configured for local use. Traefik will generate certificates automatically.\n\n## Auto-Restart on Reboot\n\nServices are configured with `restart: always` policy. To ensure Docker starts on boot:\n\n```bash\nsudo systemctl enable docker\nsudo systemctl start docker\n```\n\nVerify:\n```bash\nsudo systemctl status docker\n```\n\n## Monitoring\n\n### View Logs\n\n```bash\n# All services\nmake logs\n\n# Specific service\nmake logs-n8n\nmake logs-worker\nmake logs-db\n```\n\n### Health Checks\n\nAll services have health checks. View container health:\n\n```bash\ndocker-compose ps\n```\n\nHealth status shows in \"Status\" column.\n\n## Security Best Practices\n\n1. **Keep .env secure** - Contains database passwords\n2. **Restrict file permissions** - `chmod 600` on `.env`\n3. **Use strong passwords** - Change defaults in `.env`\n4. **Enable HTTPS** - Use domain with Let's Encrypt\n5. **Regular backups** - Automate with cron:\n   ```bash\n   0 2 * * * /home/sites/n8n/scripts/backup.sh \u003e\u003e /var/log/n8n-backup.log 2\u003e\u00261\n   ```\n6. **Keep images updated** - Regular `make update`\n7. **Monitor logs** - Watch for errors\n\n## Troubleshooting\n\n### Services won't start\n\nCheck logs:\n```bash\nmake logs\n```\n\nVerify Docker is running:\n```bash\ndocker ps\n```\n\n### Database connection errors\n\n```bash\ndocker-compose exec postgres pg_isready -U postgres -d n8n\n```\n\n### Redis connection errors\n\n```bash\ndocker-compose exec redis redis-cli ping\n```\n\n### n8n not responding\n\n```bash\ndocker-compose restart n8n\ndocker-compose logs n8n\n```\n\n### Port conflicts\n\nChange `N8N_EXTERNAL_PORT` in `.env` if port 9999 is in use.\n\n## Useful Links\n\n- [n8n Documentation](https://docs.n8n.io)\n- [Docker Compose Reference](https://docs.docker.com/compose/reference/)\n- [Traefik Documentation](https://doc.traefik.io)\n- [PostgreSQL Documentation](https://www.postgresql.org/docs/)\n\n## Support\n\nFor issues:\n1. Check logs: `make logs`\n2. Verify health: `make status`\n3. Review configuration: `make config`\n4. Consult n8n docs: https://docs.n8n.io\n\n## License\n\nn8n is open source. See [n8n License](https://github.com/n8n-io/n8n/blob/master/LICENSE.md)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiamgerwin%2Fn8n-hetzner-setup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiamgerwin%2Fn8n-hetzner-setup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiamgerwin%2Fn8n-hetzner-setup/lists"}