From bddc6d2391ffa2fcae967ef5e52ac2602e5abf65 Mon Sep 17 00:00:00 2001 From: ARIA Date: Tue, 28 Jul 2026 12:55:56 +0200 Subject: [PATCH] Add --base-url flag to serve command for correct feed links --- docs/deployment.md | 3 ++- src/cli.py | 4 +++- src/server.py | 4 +++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/deployment.md b/docs/deployment.md index c7c24c3..d946a73 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -223,7 +223,7 @@ After=network-online.target [Service] Type=simple -ExecStart=/home/youruser/.local/bin/ghrel serve --host 127.0.0.1 --port 8765 +ExecStart=/home/youruser/.local/bin/ghrel serve --host 0.0.0.0 --port 8765 --base-url http://your-server-ip:8765 Restart=on-failure RestartSec=10 User=youruser @@ -245,6 +245,7 @@ sudo systemctl status ghrel-serve.service - The server reads the database on every request — no restart needed after `ghrel check` or daemon updates - Use `--host 127.0.0.1` for local-only access, or `0.0.0.0` for network access +- When binding to `0.0.0.0`, use `--base-url` to set the correct URL in feed links (otherwise links will use `0.0.0.0` which is not accessible from clients) - Combine with a reverse proxy (nginx, caddy) for external access: ```nginx diff --git a/src/cli.py b/src/cli.py index fa1d4cb..2a62f14 100644 --- a/src/cli.py +++ b/src/cli.py @@ -305,11 +305,12 @@ def cmd_serve(args: argparse.Namespace, db_path: str) -> None: """Start the HTTP server.""" host = args.host or DEFAULT_SERVER_HOST port = args.port or DEFAULT_SERVER_PORT + base_url = getattr(args, 'base_url', None) from src.server import create_handler from http.server import ThreadingHTTPServer - handler = create_handler(db_path) + handler = create_handler(db_path, base_url) try: server = ThreadingHTTPServer((host, port), handler) except OSError as e: @@ -364,6 +365,7 @@ def build_parser() -> argparse.ArgumentParser: p_serve = subparsers.add_parser("serve", help="Start HTTP server") p_serve.add_argument("--port", type=int, default=DEFAULT_SERVER_PORT, help="Server port") p_serve.add_argument("--host", default=DEFAULT_SERVER_HOST, help="Server host") + p_serve.add_argument("--base-url", default=None, help="Base URL for feed links (e.g., http://192.168.1.100:8080)") # daemon p_daemon = subparsers.add_parser("daemon", help="Run as background daemon") diff --git a/src/server.py b/src/server.py index c01608c..fe247a0 100644 --- a/src/server.py +++ b/src/server.py @@ -7,7 +7,7 @@ from src.db import get_connection from src.rss import generate_feed, generate_index_html -def create_handler(db_path: str): +def create_handler(db_path: str, base_url: str = None): """Factory that returns an HTTP request handler class bound to a DB path.""" class FeedHandler(BaseHTTPRequestHandler): @@ -64,6 +64,8 @@ def create_handler(db_path: str): pass def _base_url(self) -> str: + if base_url: + return base_url host = self.server.server_address[0] port = self.server.server_address[1] return f"http://{host}:{port}"