Skip to content

Commit 4efb305

Browse files
committed
docs: document versioned web image releases
1 parent ce3b3f7 commit 4efb305

7 files changed

Lines changed: 48 additions & 63 deletions

File tree

examples/deployment/docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
services:
22
html2rss-web:
3-
image: html2rss/web:latest
3+
image: html2rss/web:1
44
restart: unless-stopped
55
env_file:
66
- path: .env

src/components/docs/DockerComposeSnippet.astro

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ const snippets: Record<Props["variant"], string> = {
2121
environment:
2222
RACK_ENV: production
2323
PORT: 4000
24-
BUILD_TAG: \${BUILD_TAG:-local}
25-
GIT_SHA: \${GIT_SHA:-local}
2624
HTML2RSS_SECRET_KEY: \${HTML2RSS_SECRET_KEY:?set HTML2RSS_SECRET_KEY}
2725
HEALTH_CHECK_TOKEN: \${HEALTH_CHECK_TOKEN:?set HEALTH_CHECK_TOKEN}
2826
SENTRY_DSN: \${SENTRY_DSN:-}
@@ -64,8 +62,6 @@ const snippets: Record<Props["variant"], string> = {
6462
environment:
6563
RACK_ENV: production
6664
PORT: 4000
67-
BUILD_TAG: \${BUILD_TAG:-local}
68-
GIT_SHA: \${GIT_SHA:-local}
6965
HTML2RSS_SECRET_KEY: \${HTML2RSS_SECRET_KEY:?set HTML2RSS_SECRET_KEY}
7066
HEALTH_CHECK_TOKEN: \${HEALTH_CHECK_TOKEN:?set HEALTH_CHECK_TOKEN}
7167
SENTRY_DSN: \${SENTRY_DSN:-}
@@ -92,8 +88,6 @@ volumes:
9288
environment:
9389
RACK_ENV: production
9490
PORT: 4000
95-
BUILD_TAG: \${BUILD_TAG:-local}
96-
GIT_SHA: \${GIT_SHA:-local}
9791
HTML2RSS_SECRET_KEY: \${HTML2RSS_SECRET_KEY:?set HTML2RSS_SECRET_KEY}
9892
HEALTH_CHECK_TOKEN: \${HEALTH_CHECK_TOKEN:?set HEALTH_CHECK_TOKEN}
9993
SENTRY_DSN: \${SENTRY_DSN:-}
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: "Automatic Updates"
3-
description: "Learn how to set up automatic updates for html2rss-web using watchtower. Keep your Docker containers updated automatically with the latest features."
3+
description: "Use Watchtower to keep html2rss-web updated within the Docker tag you selected."
44
sidebar:
55
order: 10
66
---
@@ -9,7 +9,9 @@ import { Code } from "@astrojs/starlight/components";
99

1010
import DockerComposeSnippet from "../../../../components/docs/DockerComposeSnippet.astro";
1111

12-
Use [watchtower](https://containrrr.dev/watchtower/) to periodically pull and restart containers when newer images are available.
12+
Use [Watchtower](https://containrrr.dev/watchtower/) to pull newer images and restart the selected containers.
13+
14+
Updates follow the tag in your Compose file. With the documented `html2rss/web:1` image, Watchtower stays on major version `1`.
1315

1416
Add this service to your existing `docker-compose.yml`:
1517

@@ -19,9 +21,9 @@ Then restart the stack:
1921

2022
<Code code={`docker compose up -d`} lang="bash" />
2123

22-
Operational note:
24+
Operational notes:
2325

2426
- Keep the Docker socket mount (read-only in this example).
2527
- Add the optional Docker config mount only if you pull private images that require registry auth.
26-
- The shown Watchtower command updates all running containers by default.
28+
- The shown command scopes updates to `html2rss-web`, `browserless`, and `caddy`; change the service names if your stack differs.
2729
- Check `docker compose logs watchtower` to confirm scans and update runs.

src/content/docs/web-application/how-to/deployment.mdx

Lines changed: 25 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,9 @@ import { Code } from "@astrojs/starlight/components";
77

88
import DockerComposeSnippet from "../../../../components/docs/DockerComposeSnippet.astro";
99

10-
html2rss-web ships on Docker Hub, so you can launch this self-hosted service wherever Docker runs. Start with the official [`docker-compose.yml`](https://github.com/html2rss/html2rss-web/blob/main/docker-compose.yml) as your baseline, and treat the [Getting Started guide](/web-application/getting-started) as the required first proof that your instance can already serve included feeds locally.
10+
html2rss-web ships on Docker Hub. Start with the [Getting Started guide](/web-application/getting-started), then add the production pieces below.
1111

12-
If you have not yet created a local instance, complete the [Getting Started guide](/web-application/getting-started) first. It walks through the one-time project directory setup, creating a minimal compose file, and confirming the application locally, which gives you the right baseline before exposing a self-hosted instance publicly.
13-
14-
Already running html2rss-web on your workstation? The sections below focus on what changes when you take that setup to production.
12+
The examples use `html2rss/web:1`, the recommended major-version tag. Pin an exact release if your deployment process requires it.
1513

1614
## Choose Your Production Scope First
1715

@@ -40,54 +38,37 @@ If you plan to enable automatic feed generation, also prepare:
4038

4139
### Why a Reverse Proxy?
4240

43-
A reverse proxy accepts public HTTPS traffic, terminates TLS, and forwards requests to html2rss-web running on your private network.
41+
A reverse proxy terminates public HTTPS traffic and forwards requests to html2rss-web on your private Docker network.
4442

4543
### Option A: Caddy (Automatic HTTPS)
4644

47-
Caddy handles certificates and redirects with almost no configuration.
45+
Caddy handles certificates and redirects.
4846

4947
<DockerComposeSnippet variant="productionCaddy" />
5048

51-
- Create a `.env` file beside your compose file with the following variables:
52-
53-
<Code
54-
code={`
55-
# Required for reverse proxy and application
56-
CADDY_HOST=yourdomain.com
57-
58-
# Generate with: openssl rand -hex 32
59-
60-
HTML2RSS_SECRET_KEY=
61-
62-
# Required by the documented Compose stack
49+
Create a `.env` file beside your compose file:
6350

64-
HEALTH_CHECK_TOKEN=
65-
66-
# Required by the default compose stack
67-
68-
BROWSERLESS_IO_API_TOKEN=
69-
70-
# Recommended for production traceability (compose defaults to local)
51+
<Code
52+
code={`
53+
CADDY_HOST=yourdomain.com
54+
HTML2RSS_SECRET_KEY=<openssl rand -hex 32>
55+
HEALTH_CHECK_TOKEN=<strong bearer token>
56+
BROWSERLESS_IO_API_TOKEN=<browserless token>
57+
`}
58+
lang="dotenv"
59+
/>
7160

72-
BUILD_TAG=
61+
Before starting the stack:
7362

74-
# Recommended for production traceability (compose defaults to local)
63+
- Set `CADDY_HOST` for your domain.
64+
- Generate `HTML2RSS_SECRET_KEY` with `openssl rand -hex 32`.
65+
- Set a strong `HEALTH_CHECK_TOKEN` when you use authenticated `GET /api/v1/health`; liveness/readiness probes can use `/api/v1/health/live` and `/api/v1/health/ready` without it.
66+
- Leave `BUILD_TAG` and `GIT_SHA` unset unless you intentionally override image metadata in logs.
67+
- Adjust optional knobs such as `AUTO_SOURCE_ENABLED` and `SENTRY_DSN` as needed; refer to the [environment reference](/web-application/reference/env-variables) for details.
7568

76-
GIT_SHA=
69+
After `docker compose up -d`, run `docker compose logs caddy --tail 20`; look for `certificate obtained`.
7770

78-
`}
79-
lang="dotenv"
80-
/>
81-
82-
- Update your `.env` before starting the stack:
83-
- Set `CADDY_HOST` for your domain.
84-
- Generate a production secret (`openssl rand -hex 32`) and assign it to `HTML2RSS_SECRET_KEY`.
85-
- Set a strong `HEALTH_CHECK_TOKEN` when you use authenticated `GET /api/v1/health`; liveness/readiness probes can use `/api/v1/health/live` and `/api/v1/health/ready` without it.
86-
- Set `BUILD_TAG` and `GIT_SHA` to real release metadata for production.
87-
- Adjust optional knobs such as `AUTO_SOURCE_ENABLED` and `SENTRY_DSN` as needed; refer to the [environment reference](/web-application/reference/env-variables) for details.
88-
- After `docker compose up -d`, run `docker compose logs caddy --tail 20`; look for `certificate obtained`.
89-
- Re-test after DNS changes with [SSL Labs](https://www.ssllabs.com/ssltest/).
90-
- Want automatic updates? Add the Watchtower service shown below.
71+
Re-test after DNS changes with [SSL Labs](https://www.ssllabs.com/ssltest/).
9172

9273
## Secure Your Instance
9374

@@ -107,22 +88,22 @@ Keep the instance healthy once it is in production:
10788

10889
- Monitor `https://yourdomain.com/api/v1/health` with the configured bearer token for authenticated health checks
10990
- Review `docker compose logs` regularly for feed errors or certificate renewals
110-
- Enable automatic image updates so security patches roll out quickly
91+
- Enable automatic image updates for the Docker tag you selected
11192
- Right-size CPU and memory to avoid starvation when parsing large feeds
11293

11394
### Auto-update with Watchtower
11495

11596
<DockerComposeSnippet variant="watchtower" />
11697

117-
This Watchtower shape scopes updates to `html2rss-web`, `browserless`, and `caddy`; replace service names if your stack differs.
98+
This Watchtower shape scopes updates to `html2rss-web`, `browserless`, and `caddy`; change the service names if your stack differs.
11899

119100
Check `docker compose logs watchtower` occasionally to confirm updates are applied.
120101

121102
### Resource Guardrails
122103

123104
<DockerComposeSnippet variant="resourceGuardrails" />
124105

125-
Adjust the limits to match your host capacity. Increase memory if you process many large feeds.
106+
Adjust limits to match host capacity. Increase memory for large feeds.
126107

127108
## Share & Support
128109

src/content/docs/web-application/reference/env-variables.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ description: "Configuration reference for html2rss-web environment variables."
99
| --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1010
| `HTML2RSS_SECRET_KEY` | required in production; development/test gets a temporary default |
1111
| `HEALTH_CHECK_TOKEN` | bearer token for authenticated `GET /api/v1/health`; optional unless you use that endpoint (the documented Compose stack includes it); `/api/v1/health/live` and `/api/v1/health/ready` do not require it |
12-
| `BUILD_TAG` | defaults to `local` in the Compose stack; set release metadata explicitly in production |
13-
| `GIT_SHA` | defaults to `local` in the Compose stack; set deployed commit SHA explicitly in production |
12+
| `BUILD_TAG` | release metadata used in logs; published Docker images set this to the release version |
13+
| `GIT_SHA` | deployed commit metadata used in logs; published Docker images set this to the released commit |
1414
| `SENTRY_DSN` | optional; enables Sentry errors/logs when set |
1515
| `BROWSERLESS_IO_WEBSOCKET_URL` | optional; Browserless websocket endpoint for `browserless` strategy |
1616
| `BROWSERLESS_IO_API_TOKEN` | required by this site's Compose stack and by custom websocket endpoints; standalone `html2rss` local defaults can omit it |

src/content/docs/web-application/reference/versioning-and-releases.mdx

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,19 @@ description: Learn about versioning and release strategy for html2rss-web
55

66
import { dockerHubRepository, dockerHubUrl } from "../../../../data/docker";
77

8-
This web application is distributed in a [rolling release](https://en.wikipedia.org/wiki/Rolling_release) fashion from the `main` branch.
8+
html2rss-web publishes versioned Docker images to <a href={dockerHubUrl}>Docker Hub: <code>{dockerHubRepository}</code></a>.
99

10-
For the latest commit passing GitHub CI/CD on the main branch, an updated Docker image will be pushed to <a href={dockerHubUrl}>Docker Hub: <code>{dockerHubRepository}</code></a>.
11-
The [SBOM](https://en.wikipedia.org/wiki/Software_supply_chain) is embedded in the Docker image.
10+
For release `1.2.3`, Docker publish pushes:
1211

13-
GitHub's @dependabot is enabled for dependency updates and they are automatically merged to the `main` branch when the CI gives the green light.
12+
- `html2rss/web:1.2.3`: exact release
13+
- `html2rss/web:1`: latest release in major version `1`
14+
- `html2rss/web:latest`: newest published release
15+
- `html2rss/web:<git-sha>`: release image pinned by source commit
1416

15-
If you use Docker, you should update to the latest image automatically by [setting up _watchtower_ as described](/web-application/how-to/automatic-updates).
17+
Use `html2rss/web:1` for normal deployments. It receives newer releases for major version `1` without moving across a future major release.
18+
19+
Use an exact version tag when you need fully pinned deploys. Use `latest` only when you intentionally want the newest published release. Use the commit SHA tag when you need to trace or reproduce one released build.
20+
21+
Release images include SBOM and provenance metadata. The image build also sets `BUILD_TAG` to the release version and `GIT_SHA` to the released commit.
22+
23+
If you use Docker Compose, [set up Watchtower](/web-application/how-to/automatic-updates) to pull updates for the tag you selected.

src/data/docker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export const dockerHubRepository = 'html2rss/web';
22
export const dockerHubUrl = `https://hub.docker.com/r/${dockerHubRepository}`;
3-
export const webImage = `${dockerHubRepository}:latest`;
3+
export const webImage = `${dockerHubRepository}:1`;
44
export const browserlessImage = 'ghcr.io/browserless/chromium';
55
export const caddyImage = 'caddy:2-alpine';
66
export const watchtowerImage = 'containrrr/watchtower';

0 commit comments

Comments
 (0)