4.7 KiB
4.7 KiB
Dev Gateway (Caddy)
This directory contains the Caddy reverse proxy configuration for the Ghost development environment.
Purpose
The Caddy reverse proxy container:
- Routes Ghost requests to the Ghost container backend
- Proxies asset requests to local dev servers running on the host
- Enables hot-reload for frontend development without rebuilding Ghost
Configuration
Environment Variables
Caddy uses environment variables (set in compose.dev.yaml) to configure proxy targets:
GHOST_BACKEND- Ghost container hostname (e.g.,ghost-dev:2368)ADMIN_DEV_SERVER- React admin dev server (e.g.,host.docker.internal:5174)ADMIN_LIVE_RELOAD_SERVER- Ember live reload WebSocket (e.g.,host.docker.internal:4200)PORTAL_DEV_SERVER- Portal dev server (e.g.,host.docker.internal:4175)COMMENTS_DEV_SERVER- Comments UI (e.g.,host.docker.internal:7173)SIGNUP_DEV_SERVER- Signup form (e.g.,host.docker.internal:6174)SEARCH_DEV_SERVER- Sodo search (e.g.,host.docker.internal:4178)ANNOUNCEMENT_DEV_SERVER- Announcement bar (e.g.,host.docker.internal:4177)LEXICAL_DEV_SERVER- Optional: Local Koenig Lexical editor dev server (e.g.,host.docker.internal:4173)- For developing Lexical in the separate Koenig repository
- Requires
EDITOR_URL=/ghost/assets/koenig-lexical/when starting admin dev server - Automatically falls back to Ghost backend (built package) if dev server is not running
ACTIVITYPUB_PROXY_TARGET- Optional: ActivityPub service (e.g.,host.docker.internal:8080)- For developing with the ActivityPub project running locally
- Requires the ActivityPub docker-compose services to be running
Note: AdminX React apps (admin-x-settings, activitypub, posts, stats) are served through the admin dev server so they don't need separate proxy entries.
Ghost Configuration
Ghost is configured via environment variables in compose.dev.yaml to load public app assets from /ghost/assets/* (e.g., portal__url: /ghost/assets/portal/portal.min.js). This uses the same path structure as built admin assets.
Routing Rules
The Caddyfile defines these routing rules:
| Path Pattern | Target | Purpose |
|---|---|---|
/ember-cli-live-reload.js |
Admin live reload (port 4200) | Ember hot-reload script and WebSocket |
/ghost/api/* |
Ghost backend | Ghost API (bypasses admin dev server) |
/.ghost/activitypub/* |
ActivityPub server (port 8080) | Optional: ActivityPub API (requires AP project running) |
/.well-known/webfinger |
ActivityPub server (port 8080) | Optional: WebFinger for federation |
/.well-known/nodeinfo |
ActivityPub server (port 8080) | Optional: NodeInfo for federation |
/ghost/assets/koenig-lexical/* |
Lexical dev server (port 4173) | Optional: Koenig Lexical editor (falls back to Ghost if not running) |
/ghost/assets/portal/* |
Portal dev server (port 4175) | Membership UI |
/ghost/assets/comments-ui/* |
Comments dev server (port 7173) | Comments widget |
/ghost/assets/signup-form/* |
Signup dev server (port 6174) | Signup form widget |
/ghost/assets/sodo-search/* |
Search dev server (port 4178) | Search widget (JS + CSS) |
/ghost/assets/announcement-bar/* |
Announcement dev server (port 4177) | Announcement widget |
/ghost/assets/* |
Admin dev server (port 5174) | Other admin assets (fallback) |
/ghost/* |
Admin dev server (port 5174) | Admin interface |
| Everything else | Ghost backend | Main Ghost application |
Note: All port numbers listed are the host ports where dev servers run by default.