You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
description: "Deploy html2rss-web to production with Docker. Learn best practices for hosting public instances with security, monitoring, and reliability."
html2rss-web is published on Docker Hub, making it easy to deploy with Docker. The [`docker-compose.yml`](https://github.com/html2rss/html2rss-web/blob/master/docker-compose.yml) from our[Installation Guide](/web-application/getting-started)provides a solid foundation for both development and production use.
8
+
html2rss-web ships on Docker Hub, so you can launch it wherever Docker runs. Start with the official [`docker-compose.yml`](https://github.com/html2rss/html2rss-web/blob/master/docker-compose.yml) from the[Installation Guide](/web-application/getting-started)as your baseline.
4.**Verify it's running** by opening [http://localhost:3000](http://localhost:3000) in your browser.
31
-
32
-
</Steps>
33
-
34
-
> 📖 Need Docker? Follow the [Docker installation guide](https://docs.docker.com/get-docker/) and [Docker Compose install](https://docs.docker.com/compose/install/).
32
+
4.**Confirm the service**
35
33
36
-
## Production Best Practices
37
-
38
-
When hosting a **public instance** that others will use, please follow these essential guidelines:
39
-
40
-
### Security
34
+
```bash
35
+
docker compose ps
36
+
```
41
37
42
-
-**Use a reverse proxy** to handle SSL termination and rate limiting
43
-
-**Enable HTTPS only** — redirect all HTTP traffic to HTTPS
44
-
-**Set strong passwords** for health check and auto-source authentication
45
-
-**Restrict access** to admin endpoints and sensitive configuration
38
+
Open [http://localhost:3000](http://localhost:3000) to verify the UI.
46
39
47
-
### Modern Reverse Proxy Options
40
+
</Steps>
48
41
49
-
-**Caddy** — Automatic HTTPS, zero config
50
-
-**Traefik** — Auto-discovery, perfect for Docker
51
-
-**nginx** — Traditional, requires certbot setup
42
+
> 📖 New to Docker? Follow the [Docker engine](https://docs.docker.com/get-docker/) and [Docker Compose](https://docs.docker.com/compose/install/) installation guides first.
52
43
53
-
### HTTPS
44
+
##Prepare for Production
54
45
55
-
Setting up HTTPS is crucial for any public instance. Follow these steps:
46
+
Before exposing html2rss-web, ensure:
56
47
57
-
1.**Obtain SSL certificates** using [Let's Encrypt](https://letsencrypt.org/) with [Certbot](https://certbot.eff.org/)
58
-
2.**Configure your reverse proxy** to handle SSL termination
59
-
3.**Redirect all HTTP traffic** to HTTPS automatically
60
-
4.**Test your setup** using tools like [SSL Labs](https://www.ssllabs.com/ssltest/)
48
+
- Your domain (for example `yourdomain.com`) resolves to the host running Docker
49
+
- Inbound TCP ports 80 and 443 reach the host (check firewalls and cloud security groups)
50
+
- You are ready to watch the first deployment logs for certificate issuance
A reverse proxy accepts public HTTPS traffic, terminates TLS, and forwards requests to html2rss-web running on your private network.
67
55
68
-
##Quick Docker Setup
56
+
### Option A: Caddy (Automatic HTTPS)
69
57
70
-
### Caddy (Easiest)
58
+
Caddy handles certificates and redirects with almost no configuration.
71
59
72
60
```yaml
73
61
services:
@@ -77,88 +65,88 @@ services:
77
65
- "80:80"
78
66
- "443:443"
79
67
volumes:
80
-
- ./Caddyfile:/etc/caddy/Caddyfile
81
68
- caddy_data:/data
69
+
command:
70
+
- caddy
71
+
- reverse-proxy
72
+
- --from
73
+
- ${CADDY_HOST}
74
+
- --to
75
+
- html2rss:3000
82
76
html2rss:
83
-
image: html2rss/html2rss-web:latest
84
-
environment:
85
-
- BASE_URL=https://yourdomain.com
77
+
image: gilcreator/html2rss-web:latest
78
+
env_file: .env
86
79
87
80
volumes:
88
81
caddy_data:
89
82
```
90
83
91
-
`Caddyfile`:
84
+
- Copy the sample env file (`examples/deployment/.env.example`) to `.env` beside your compose file.
85
+
- Set `CADDY_HOST` and `BASE_URL` in that `.env` (for example `CADDY_HOST=yourdomain.com` and `BASE_URL=https://yourdomain.com`) before starting the stack.
86
+
- After `docker compose up -d`, run `docker compose logs caddy --tail 20`; look for `certificate obtained`.
87
+
- Re-test after DNS changes with [SSL Labs](https://www.ssllabs.com/ssltest/).
88
+
- Want automatic updates? Add the Watchtower service shown below or reuse the ready-made sample compose file at `examples/deployment/caddy/docker-compose.yml`.
92
89
93
-
```caddy
94
-
yourdomain.com {
95
-
reverse_proxy html2rss:3000
96
-
}
97
-
```
90
+
## Secure Your Instance
91
+
92
+
Harden the application before inviting other users:
98
93
99
-
### Traefik (Auto-discovery)
94
+
- Set strong credentials for health checks and any protected feeds
95
+
- Configure `BASE_URL` with the final HTTPS domain before the first public run
96
+
- Prefer environment files (`.env`) stored outside version control for secrets
97
+
- Keep admin-only routes behind basic auth or IP restrictions in your proxy
Store these variables in a `.env` file and reference it with `env_file:` as demonstrated in the Caddy example.
112
+
113
+
## Operate & Monitor
114
+
115
+
Keep the instance healthy once it is in production:
130
116
131
-
- **Enable auto-updates** using [watchtower](https://containrrr.dev/watchtower/) or similar tools
132
-
- **Monitor the health check endpoint** (`/health_check.txt`) to detect issues early
133
-
- **Set up logging** to track errors and performance
134
-
- **Use environment variables** for configuration instead of hardcoded values
117
+
- Monitor `https://yourdomain.com/health_check.txt` from your uptime tool
118
+
- Review `docker compose logs` regularly for feed errors or certificate renewals
119
+
- Enable automatic image updates so security patches roll out quickly
120
+
- Right-size CPU and memory to avoid starvation when parsing large feeds
135
121
136
-
### Example: Adding Watchtower for Auto-updates
122
+
### Auto-update with Watchtower
137
123
138
124
```yaml
139
125
services:
140
126
watchtower:
141
127
image: containrrr/watchtower
128
+
depends_on:
129
+
- html2rss
130
+
- caddy
131
+
command:
132
+
- --cleanup
133
+
- --interval
134
+
- "300"
135
+
- html2rss
136
+
- caddy
142
137
volumes:
143
138
- /var/run/docker.sock:/var/run/docker.sock
144
-
environment:
145
-
- WATCHTOWER_CLEANUP=true
146
-
- WATCHTOWER_POLL_INTERVAL=300
139
+
restart: unless-stopped
147
140
```
148
141
149
-
## Performance Optimization
150
-
151
-
- **Configure appropriate resource limits** for your Docker containers
152
-
- **Use a CDN** for static assets if serving many users
153
-
- **Monitor memory usage** — html2rss-web can be memory-intensive with large feeds
154
-
- **Set up caching** for frequently accessed feeds
142
+
Check `docker compose logs watchtower` occasionally to confirm updates are applied.
155
143
156
-
### Example: Resource Limits
144
+
### Resource Guardrails
157
145
158
146
```yaml
159
147
services:
160
148
html2rss:
161
-
image: html2rss/html2rss-web:latest
149
+
image: gilcreator/html2rss-web:latest
162
150
deploy:
163
151
resources:
164
152
limits:
@@ -169,41 +157,11 @@ services:
169
157
cpus: "0.25"
170
158
```
171
159
172
-
## Environment Configuration
173
-
174
-
For production, update your environment variables:
175
-
176
-
```yaml
177
-
services:
178
-
html2rss:
179
-
image: html2rss/html2rss-web:latest
180
-
environment:
181
-
RACK_ENV: production
182
-
LOG_LEVEL: warn
183
-
HEALTH_CHECK_USERNAME: your-secure-username
184
-
HEALTH_CHECK_PASSWORD: your-very-secure-password
185
-
BASE_URL: https://your-domain.com
186
-
```
187
-
188
-
> 💡 **Security Tip**: Use a [password manager](https://bitwarden.com/password-generator/) to generate strong, unique passwords for all authentication endpoints.
189
-
190
-
## Share Your Instance
191
-
192
-
Once your instance is running smoothly:
193
-
194
-
- **[Add it to our community wiki](https://github.com/html2rss/html2rss-web/wiki/Instances)** so others can discover it
195
-
- **Test thoroughly** with various feed types before sharing
196
-
- **Monitor usage** and be prepared to scale if needed
197
-
198
-
### Before Going Public
199
-
200
-
1. **Test your setup** with different feed configurations
201
-
2. **Verify HTTPS** is working correctly
202
-
3. **Check performance** under load
203
-
4. **Review security settings** and access controls
160
+
Adjust the limits to match your host capacity. Increase memory if you process many large feeds.
- **Want to contribute?** See our [contributing guide](/get-involved/contributing)
164
+
- Test different feed sources before inviting external users
165
+
- Add your instance to the [community wiki](https://github.com/html2rss/html2rss-web/wiki/Instances) if you want it listed publicly
166
+
- Visit the [troubleshooting guide](/troubleshooting/troubleshooting) or join the [community discussions](https://github.com/orgs/html2rss/discussions) when you need help
167
+
- Ready to contribute fixes or docs? See the [contributing guide](/get-involved/contributing)
0 commit comments