diff --git a/.env.example b/.env.example index 997d60865..6a2707907 100644 --- a/.env.example +++ b/.env.example @@ -67,8 +67,6 @@ HOMARR_WEBSITE_URL=https://homarr.dev # PocketBase API used by Homarr and by the standalone documentation site. # Defaults to HOMARR_WEBSITE_URL. # WORKSHOP_API_URL=https://homarr.dev -# Public Workshop page opened from Homarr. Defaults to HOMARR_WEBSITE_URL/workshop. -# WORKSHOP_WEB_URL=https://homarr.dev/workshop # Documentation and PocketBase deployment settings. # WORKSHOP_PUBLIC_ORIGIN=https://homarr.dev @@ -77,7 +75,6 @@ HOMARR_WEBSITE_URL=https://homarr.dev # Local Workshop stack: # HOMARR_WEBSITE_URL=http://127.0.0.1:3003 # WORKSHOP_API_URL=http://127.0.0.1:8090 -# WORKSHOP_WEB_URL=http://127.0.0.1:3003/workshop # WORKSHOP_PUBLIC_ORIGIN=http://127.0.0.1:3003 # Optional: GITHUB_CLIENT_ID= # Optional: GITHUB_CLIENT_SECRET= diff --git a/apps/docs/docs/advanced/environment-variables/index.mdx b/apps/docs/docs/advanced/environment-variables/index.mdx index 8c43b1832..fda608c6f 100644 --- a/apps/docs/docs/advanced/environment-variables/index.mdx +++ b/apps/docs/docs/advanced/environment-variables/index.mdx @@ -25,17 +25,16 @@ This is especially useful for [docker secrets](https://docs.docker.com/engine/sw Using the `PUID` and `PGID` will require you to set the correct permissions on the mounted volumes and if used the docker socket. See more in the [Running as a different user](/docs/advanced/running-as-different-user) documentation. ::: -| Environment Variable | Description | Possible values | Default | -| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- | ----------------------------- | -| `PUID` | User ID to run the container as | Any valid user ID | `0` | -| `PGID` | Group ID to run the container as | Any valid group ID | `0` | -| `LOG_LEVEL` | Log level to use | `debug` / `info` / `warn` / `error` | `info` | -| `NO_EXTERNAL_CONNECTION` | Disables Homarr's internet-backed requests, including update checks, weather, and RSS feeds | `true` or `false` | `false` | -| `ENABLE_DNS_CACHING` | Enables dns caching. Enabled by default, but if you experience issues with IPv6 or static IPs, see [#4006](https://github.com/homarr-labs/homarr/issues/4006) or disable this flag | `true` or `false` | `true` | -| `HOMARR_DISABLE_IPV6` | Disables the IPv6 listener of the internal nginx proxy, even when the host supports IPv6. IPv6 is normally disabled automatically when the host has no IPv6 configured. See [#4596](https://github.com/homarr-labs/homarr/issues/4596) | `true` or `false` | `false` | -| `HOMARR_WEBSITE_URL` | Main Homarr documentation/site base used by runtime links. Must be an absolute HTTP(S) URL. | HTTP(S) URL | `https://homarr.dev` | -| `WORKSHOP_API_URL` | PocketBase API used by Homarr and standalone documentation. | HTTP(S) URL | `HOMARR_WEBSITE_URL` | -| `WORKSHOP_WEB_URL` | Public Workshop page opened from Homarr. | HTTP(S) URL | `HOMARR_WEBSITE_URL/workshop` | +| Environment Variable | Description | Possible values | Default | +| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- | -------------------- | +| `PUID` | User ID to run the container as | Any valid user ID | `0` | +| `PGID` | Group ID to run the container as | Any valid group ID | `0` | +| `LOG_LEVEL` | Log level to use | `debug` / `info` / `warn` / `error` | `info` | +| `NO_EXTERNAL_CONNECTION` | Disables Homarr's internet-backed requests, including update checks, weather, and RSS feeds | `true` or `false` | `false` | +| `ENABLE_DNS_CACHING` | Enables dns caching. Enabled by default, but if you experience issues with IPv6 or static IPs, see [#4006](https://github.com/homarr-labs/homarr/issues/4006) or disable this flag | `true` or `false` | `true` | +| `HOMARR_DISABLE_IPV6` | Disables the IPv6 listener of the internal nginx proxy, even when the host supports IPv6. IPv6 is normally disabled automatically when the host has no IPv6 configured. See [#4596](https://github.com/homarr-labs/homarr/issues/4596) | `true` or `false` | `false` | +| `HOMARR_WEBSITE_URL` | Main Homarr documentation/site base used by runtime links. Must be an absolute HTTP(S) URL. | HTTP(S) URL | `https://homarr.dev` | +| `WORKSHOP_API_URL` | PocketBase API used by Homarr and standalone documentation. | HTTP(S) URL | `HOMARR_WEBSITE_URL` | Workshop service operators can find its server-only configuration in the [Workshop operator guide](../../workshop/operator#environment-variables). diff --git a/apps/docs/docs/management/custom-widgets/index.mdx b/apps/docs/docs/management/custom-widgets/index.mdx index 29083ce19..3f2418a16 100644 --- a/apps/docs/docs/management/custom-widgets/index.mdx +++ b/apps/docs/docs/management/custom-widgets/index.mdx @@ -109,7 +109,7 @@ to be saved before server requests run. ## Import and Workshop -The install flow always links to the corresponding public Workshop entry using `WORKSHOP_WEB_URL`. Import confirmation shows origins, authentication modes, network scopes, methods, actions, and permissions. Every source has a suggested URL, but private and loopback sources must be confirmed or replaced for the current Homarr installation. The same screen accepts API keys, tokens, usernames, and passwords; credentials remain optional at install time and missing values stay visible on the Custom Widgets page. +The install flow always links to the corresponding public Workshop entry under `HOMARR_WEBSITE_URL/workshop`. Import confirmation shows origins, authentication modes, network scopes, methods, actions, and permissions. Every source has a suggested URL, but private and loopback sources must be confirmed or replaced for the current Homarr installation. The same screen accepts API keys, tokens, usernames, and passwords; credentials remain optional at install time and missing values stay visible on the Custom Widgets page. For example, installing **Tautulli Activity** asks for both the user's Tautulli URL and API key. A stable public source such as PokéAPI keeps its published URL without creating unnecessary setup work. diff --git a/apps/docs/docs/workshop/development.mdx b/apps/docs/docs/workshop/development.mdx index f61ef55db..340da7a3f 100644 --- a/apps/docs/docs/workshop/development.mdx +++ b/apps/docs/docs/workshop/development.mdx @@ -38,7 +38,6 @@ Point Homarr at the local services with: ```dotenv HOMARR_WEBSITE_URL=http://127.0.0.1:3003 WORKSHOP_API_URL=http://127.0.0.1:8090 -WORKSHOP_WEB_URL=http://127.0.0.1:3003/workshop ``` Restart `pnpm dev:docs` after changing the Docusaurus URL variables. If Homarr is also running, restart its `pnpm dev` @@ -48,14 +47,13 @@ Workshop moderator promotion, logs, tests, backup, restore, stopping, and intent ## URL testing -Docusaurus reads `HOMARR_WEBSITE_URL` and `WORKSHOP_API_URL` when it starts or builds. Homarr also reads -`WORKSHOP_WEB_URL` when its server starts, so these values do not rely on `NEXT_PUBLIC_*` build variables. Test a -separate API origin before release: +Docusaurus reads `HOMARR_WEBSITE_URL` and `WORKSHOP_API_URL` when it starts or builds. Homarr derives the public +Workshop page by appending `/workshop` to `HOMARR_WEBSITE_URL`, so these values do not rely on `NEXT_PUBLIC_*` build +variables. Test a separate API origin before release: ```sh HOMARR_WEBSITE_URL=http://127.0.0.1:3003 \ WORKSHOP_API_URL=http://127.0.0.1:8090 \ -WORKSHOP_WEB_URL=http://127.0.0.1:3003/workshop \ pnpm dev:docs ``` diff --git a/apps/docs/docs/workshop/operator.mdx b/apps/docs/docs/workshop/operator.mdx index 295aa9899..d1d430e2a 100644 --- a/apps/docs/docs/workshop/operator.mdx +++ b/apps/docs/docs/workshop/operator.mdx @@ -41,7 +41,6 @@ The public URL contract and Workshop-only server configuration are: | -------------------------------------- | ------------------------------------------------- | ------------------------------ | | `HOMARR_WEBSITE_URL` | Documentation/site base used by Homarr links | `https://homarr.dev` | | `WORKSHOP_API_URL` | PocketBase API used by Homarr and standalone docs | `HOMARR_WEBSITE_URL` | -| `WORKSHOP_WEB_URL` | Public Workshop page linked from Homarr | `HOMARR_WEBSITE_URL/workshop` | | `WORKSHOP_PUBLIC_ORIGIN` | PocketBase-generated links and email | Required in production | | `PB_ALLOWED_ORIGINS` | PocketBase browser origins | `*` for the central community | | `OPENROUTER_API_KEY` | Server-only key for the Homarr provider proxy | Provider disabled when empty | @@ -100,7 +99,6 @@ preview. Copy `apps/workshop/.env.staging.example` to `.env.staging`; its defaul ```dotenv HOMARR_WEBSITE_URL=https://v2.preview.homarr.dev WORKSHOP_API_URL=https://v2.preview.homarr.dev -WORKSHOP_WEB_URL=https://v2.preview.homarr.dev/workshop WORKSHOP_PUBLIC_ORIGIN=https://v2.preview.homarr.dev PB_ALLOWED_ORIGINS=* ``` @@ -118,8 +116,8 @@ curl --fail http://127.0.0.1:8090/api/health The service binds to `127.0.0.1:8090`. Terminate TLS at a reverse proxy and forward the **entire hostname**, including `/api`, `/_/`, and `/workshop-runtime-config.js`; forwarding only `/workshop` breaks PocketBase and runtime URL loading. This combined image serves both the documentation site and PocketBase, so use a dedicated Workshop hostname if the -chosen hostname already serves Homarr itself. In that case, replace the hostname in all four URL values and keep -`/workshop` only on `WORKSHOP_WEB_URL`. +chosen hostname already serves Homarr itself. In that case, replace the hostname in all three URL values. Homarr +derives the public Workshop page by appending `/workshop` to `HOMARR_WEBSITE_URL`. The Compose volume preserves PocketBase data across pulls and container recreation. The mutable `v2` tag is suitable for previews; use the `sha-` tag for promotion. For the public central Workshop, `PB_ALLOWED_ORIGINS=*` allows diff --git a/apps/nextjs/src/app/[locale]/init/page.tsx b/apps/nextjs/src/app/[locale]/init/page.tsx index b754a2919..58150782e 100644 --- a/apps/nextjs/src/app/[locale]/init/page.tsx +++ b/apps/nextjs/src/app/[locale]/init/page.tsx @@ -48,7 +48,6 @@ export default async function InitPage() { ? resolveHomarrUrlConfig({ homarrWebsiteUrl: env.HOMARR_WEBSITE_URL, workshopApiUrl: env.WORKSHOP_API_URL, - workshopWebUrl: env.WORKSHOP_WEB_URL, }) : { workshopApiUrl: "", workshopWebUrl: "" }; const baseUrl = extractBaseUrlFromHeaders(requestHeaders); diff --git a/apps/nextjs/src/app/[locale]/layout.tsx b/apps/nextjs/src/app/[locale]/layout.tsx index d7a5636f3..9ecb2f226 100644 --- a/apps/nextjs/src/app/[locale]/layout.tsx +++ b/apps/nextjs/src/app/[locale]/layout.tsx @@ -120,7 +120,6 @@ export default async function Layout(props: { const publicUrls = resolveHomarrUrlConfig({ homarrWebsiteUrl: env.HOMARR_WEBSITE_URL, workshopApiUrl: env.WORKSHOP_API_URL, - workshopWebUrl: env.WORKSHOP_WEB_URL, }); const StackedProvider = composeWrappers([ diff --git a/apps/nextjs/src/app/[locale]/manage/workshop/page.tsx b/apps/nextjs/src/app/[locale]/manage/workshop/page.tsx index 260ca8db3..e53aa3080 100644 --- a/apps/nextjs/src/app/[locale]/manage/workshop/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/workshop/page.tsx @@ -17,7 +17,6 @@ export default async function WorkshopPage() { const { workshopWebUrl } = resolveHomarrUrlConfig({ homarrWebsiteUrl: env.HOMARR_WEBSITE_URL, workshopApiUrl: env.WORKSHOP_API_URL, - workshopWebUrl: env.WORKSHOP_WEB_URL, }); return (