Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions examples/deployment/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
services:
html2rss:
image: html2rss/web:latest
env_file: .env

caddy:
image: caddy:2-alpine
depends_on:
- html2rss
command:
- caddy
- reverse-proxy
- --from
- ${CADDY_HOST}
- --to
- html2rss:3000
ports:
- "80:80"
- "443:443"
volumes:
- caddy_data:/data

watchtower:
image: containrrr/watchtower
depends_on:
- html2rss
- caddy
command:
- --cleanup
- --interval
- "300"
- html2rss
- caddy
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped

volumes:
caddy_data:
6 changes: 3 additions & 3 deletions src/components/docs/AutoGenerationOptional.astro
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import { Aside } from "@astrojs/starlight/components";
---

<Aside type="note" title="Automatic generation is optional">
The "paste a website URL and generate a feed" workflow is not enabled by default. If you want it, continue
with <a href="/web-application/how-to/use-automatic-feed-generation/">Use automatic feed generation</a>.
<Aside type="note" title="Automatic generation may be disabled">
The direct `Create a feed` workflow is not enabled on every deployment. If you want that path, continue with
<a href="/web-application/how-to/use-automatic-feed-generation/">Use automatic feed generation</a>.
</Aside>
100 changes: 100 additions & 0 deletions src/components/docs/DockerComposeSnippet.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
---
import Code from "astro/components/Code.astro";
import { browserlessImage, caddyImage, watchtowerImage, webImage } from "../../data/docker";

interface Props {
variant: "minimal" | "productionCaddy" | "secure" | "watchtower" | "resourceGuardrails";
}

const { variant } = Astro.props;

const snippets: Record<Props["variant"], string> = {
minimal: `services:
html2rss-web:
image: ${webImage}
restart: unless-stopped
ports:
- "127.0.0.1:3000:3000"
volumes:
- type: bind
source: ./feeds.yml
target: /app/config/feeds.yml
read_only: true
environment:
RACK_ENV: production
HEALTH_CHECK_USERNAME: health
HEALTH_CHECK_PASSWORD: CHANGE_THIS_PASSWORD_BEFORE_USE
BROWSERLESS_IO_WEBSOCKET_URL: ws://browserless:3001
BROWSERLESS_IO_API_TOKEN: 6R0W53R135510

browserless:
image: "${browserlessImage}"
restart: unless-stopped
ports:
- "127.0.0.1:3001:3001"
environment:
PORT: 3001
CONCURRENT: 10
TOKEN: 6R0W53R135510`,
productionCaddy: `services:
caddy:
image: ${caddyImage}
ports:
- "80:80"
- "443:443"
volumes:
- caddy_data:/data
command:
- caddy
- reverse-proxy
- --from
- \${CADDY_HOST}
- --to
- html2rss:3000
html2rss:
image: ${webImage}
env_file: .env

volumes:
caddy_data:`,
secure: `services:
html2rss:
image: ${webImage}
environment:
RACK_ENV: production
LOG_LEVEL: warn
HEALTH_CHECK_USERNAME: your-secure-username
HEALTH_CHECK_PASSWORD: your-very-secure-password
BASE_URL: https://yourdomain.com`,
watchtower: `services:
watchtower:
image: ${watchtowerImage}
depends_on:
- html2rss
- caddy
command:
- --cleanup
- --interval
- "300"
- html2rss
- caddy
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped`,
resourceGuardrails: `services:
html2rss:
image: ${webImage}
deploy:
resources:
limits:
memory: 512M
cpus: "0.5"
reservations:
memory: 256M
cpus: "0.25"`,
};

const code = snippets[variant];
---

<Code code={code} lang="yaml" />
32 changes: 2 additions & 30 deletions src/components/docs/MinimalDockerCompose.astro
Original file line number Diff line number Diff line change
@@ -1,33 +1,5 @@
---
import Code from "astro/components/Code.astro";

const code = `services:
html2rss-web:
image: gilcreator/html2rss-web
restart: unless-stopped
ports:
- "127.0.0.1:3000:3000"
volumes:
- type: bind
source: ./feeds.yml
target: /app/config/feeds.yml
read_only: true
environment:
RACK_ENV: production
HEALTH_CHECK_USERNAME: health
HEALTH_CHECK_PASSWORD: CHANGE_THIS_PASSWORD_BEFORE_USE
BROWSERLESS_IO_WEBSOCKET_URL: ws://browserless:3001
BROWSERLESS_IO_API_TOKEN: 6R0W53R135510

browserless:
image: "ghcr.io/browserless/chromium"
restart: unless-stopped
ports:
- "127.0.0.1:3001:3001"
environment:
PORT: 3001
CONCURRENT: 10
TOKEN: 6R0W53R135510`;
import DockerComposeSnippet from "./DockerComposeSnippet.astro";
---

<Code code={code} lang="yaml" />
<DockerComposeSnippet variant="minimal" />
21 changes: 18 additions & 3 deletions src/content/docs/creating-custom-feeds.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ When auto-sourcing isn't enough, you can write your own configuration files to c
</Aside>

<Aside type="tip" title="Use this guide when you need more control">
Start with included feeds first. If your site is not covered, try [automatic feed
generation](/web-application/how-to/use-automatic-feed-generation/) next. Reach for a custom config when you
need a stable, reviewable setup or the generated feed misses important content.
Start with the web interface first. If the direct generation flow is not enough, continue with [automatic
feed generation](/web-application/how-to/use-automatic-feed-generation/) or reach for a custom config when
you need a stable, reviewable setup.
</Aside>

---
Expand Down Expand Up @@ -160,6 +160,21 @@ html2rss supports many configuration options:

4. **Check the output:** Make sure all items have titles, links, and descriptions

### Useful CLI flags when a site is difficult

Some sites need a little more request budget than the defaults.

- Use `--max-redirects` when the site bounces through several canonicalization or tracking redirects before the real page loads.
- Use `--max-requests` when your config needs more than one request, for example pagination or other follow-up fetches.

```bash
html2rss feed your-config.yml --max-redirects 10
html2rss feed your-config.yml --max-requests 5
html2rss auto https://example.com/blog --max-redirects 10 --max-requests 5
```

Keep these values as low as possible. If a site only needs one extra redirect, prefer `--max-redirects 4` over a much larger number.

## Add It To html2rss-web

Once the config works locally, add it to your `feeds.yml` or shared config repository and restart your
Expand Down
32 changes: 25 additions & 7 deletions src/content/docs/getting-started.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Getting Started"
description: "Learn how to get RSS feeds from any website. Start with existing feeds or create your own in minutes."
description: "Start html2rss-web locally, verify the web interface, generate your first feed URL, and decide when to move to custom configs."
sidebar:
order: 1
---
Expand All @@ -14,12 +14,30 @@ If you want the recommended path, go to [Run html2rss-web with Docker](/web-appl
That guide is the canonical setup flow for:

- running `html2rss-web` locally
- confirming your first successful feed
- deciding when to use included feeds, automatic generation, or custom configs
- confirming the interface is working
- generating a first feed URL
- deciding when to use automatic generation or custom configs

## Quick Shortcuts

- **[Run html2rss-web with Docker](/web-application/getting-started)** - Recommended first step
- **[Browse working feed examples](/feed-directory/)** - See what success looks like
- **[Create Custom Feeds](/creating-custom-feeds)** - Write configs when you need more control
- **[Troubleshooting Guide](/troubleshooting/troubleshooting)** - Fix startup or extraction problems
- **[Run html2rss-web with Docker](/web-application/getting-started)**: recommended first step
- **[Use automatic feed generation](/web-application/how-to/use-automatic-feed-generation/)**: create a feed directly from a page URL
- **[Browse working feed examples](/feed-directory/)**: see what successful outputs look like
- **[Create Custom Feeds](/creating-custom-feeds)**: write configs when you need more control
- **[Troubleshooting Guide](/troubleshooting/troubleshooting)**: fix startup or extraction problems

## Using the Ruby CLI

If you are working directly with the gem instead of `html2rss-web`, start with:

```bash
html2rss auto https://example.com/blog
```

If the target site is unusually redirect-heavy or needs extra follow-up requests, the CLI also supports:

```bash
html2rss auto https://example.com/blog --max-redirects 10 --max-requests 5
```

For config-driven runs, the same flags are available on `html2rss feed`.
Loading
Loading