Add enterprise appliance and release-history pages - #124
Conversation
Self-host enterprise customers had nowhere public to read how to run the
appliance or what changed between versions. The existing Self-Hosting section
covers the open-source fish-speech images, which is a different product for a
different audience.
Two pages:
- Enterprise Appliance — prerequisites, sign in and pull (including the
air-gapped save/load path), the run command with the reasons for each flag
that matters, and upgrading.
- Appliance Releases — the version list. The dashboard links here from "a newer
version is available", so each entry has to say what changed and what an
upgrade involves, not just a date.
Content comes from the operator guide we have been sending customers by hand,
trimmed to what a customer needs: no registry internals, no build pipeline.
Two things deliberately left out because they are commitments only the business
can make: a support window (how long an old version keeps getting fixes) and any
promise that older tags stay pullable indefinitely. Both should be added once
decided — the releases page currently points people at their account manager.
The version list has one entry. It needs a real second entry the first time we
ship an upgrade, and the "how to read a version" section assumes the naming
scheme stays as it is.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Workflows to automatically generate PRs for you. |
📝 WalkthroughWalkthroughThe PR adds Enterprise Appliance deployment documentation, release history documentation, and Self-Hosting navigation entries. The deployment guide covers prerequisites, air-gapped image transfer, startup, health checks, persistent storage, upgrades, and rollback. ChangesEnterprise self-hosting
Estimated code review effort: 2 (Simple) | ~15 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@developer-guide/self-hosting/enterprise-appliance.mdx`:
- Line 122: Convert both internal links to relative paths: update
developer-guide/self-hosting/enterprise-appliance.mdx lines 122-122 to target
./enterprise-releases, and developer-guide/self-hosting/enterprise-releases.mdx
lines 7-7 to target ./enterprise-appliance.
- Around line 49-56: Add zstd to the prerequisites at the start of the
air-gapped host procedure in the enterprise appliance guide, explicitly covering
both the connected machine and target host used by the docker save/load
commands.
- Around line 60-70: Update the enterprise appliance JWT setup around
FISH_JWT_SECRET to document storing the generated secret in an approved secret
store, then restoring the exact same value before every docker run, including
upgrades or restarts. Replace the current session-only export guidance with
persistence and retrieval instructions while preserving the existing JWT_SECRET
environment-variable wiring.
In `@developer-guide/self-hosting/enterprise-releases.mdx`:
- Around line 19-25: Add the text language tag to the fenced version-format
example containing s2.1-pro-20260803-offline, without changing its contents or
explanatory annotations.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 4428c7ab-d19c-4e5d-a7b3-dcb4db26c9d5
📒 Files selected for processing (3)
developer-guide/self-hosting/enterprise-appliance.mdxdeveloper-guide/self-hosting/enterprise-releases.mdxdocs.json
| For an air-gapped host, pull on a machine that can reach the registry, then move the image: | ||
|
|
||
| ```bash | ||
| docker save registry.fish.audio/self-hosted/enterprise/all-in-one:<version> \ | ||
| | zstd -T0 -3 -o all-in-one.tar.zst | ||
| # on the target host: | ||
| zstd -d -c all-in-one.tar.zst | docker load | ||
| ``` |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Add zstd to the air-gapped prerequisites.
Both commands require zstd. List it as a prerequisite on the connected host and the target host, or provide an alternative transfer method.
As per coding guidelines, “Include prerequisites at the start of procedural content.”
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@developer-guide/self-hosting/enterprise-appliance.mdx` around lines 49 - 56,
Add zstd to the prerequisites at the start of the air-gapped host procedure in
the enterprise appliance guide, explicitly covering both the connected machine
and target host used by the docker save/load commands.
Source: Coding guidelines
| Generate a JWT secret **once**, store it, and reuse the same value on every run. | ||
|
|
||
| ```bash | ||
| export FISH_JWT_SECRET="$(openssl rand -hex 32)" | ||
|
|
||
| docker run -d --name fish-tts \ | ||
| --gpus all \ | ||
| --shm-size 16g --ulimit memlock=-1 --ulimit stack=67108864 \ | ||
| -p 8088:8088 \ | ||
| -v fish-tts-shared:/mnt/shared \ | ||
| -e JWT_SECRET="$FISH_JWT_SECRET" \ |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
Document how to persist and restore JWT_SECRET.
The export command only sets the secret in the current shell. A later upgrade can pass an empty value or a new value, which can activate the development default or invalidate existing tokens. Require users to store the value in an approved secret store and load the same value before every docker run.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@developer-guide/self-hosting/enterprise-appliance.mdx` around lines 60 - 70,
Update the enterprise appliance JWT setup around FISH_JWT_SECRET to document
storing the generated secret in an approved secret store, then restoring the
exact same value before every docker run, including upgrades or restarts.
Replace the current session-only export guidance with persistence and retrieval
instructions while preserving the existing JWT_SECRET environment-variable
wiring.
| only what actually changed. Keep the old image on the host until the new one has served traffic — | ||
| rolling back is then just starting the previous tag again. | ||
|
|
||
| See [Appliance Releases](/developer-guide/self-hosting/enterprise-releases) for the version list. |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Use relative paths for both internal links.
Both links use absolute internal paths.
developer-guide/self-hosting/enterprise-appliance.mdx#L122-L122: change the target to./enterprise-releases.developer-guide/self-hosting/enterprise-releases.mdx#L7-L7: change the target to./enterprise-appliance.
As per coding guidelines, “Use relative paths for internal links” and “Do not use absolute URLs for internal links.”
📍 Affects 2 files
developer-guide/self-hosting/enterprise-appliance.mdx#L122-L122(this comment)developer-guide/self-hosting/enterprise-releases.mdx#L7-L7
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@developer-guide/self-hosting/enterprise-appliance.mdx` at line 122, Convert
both internal links to relative paths: update
developer-guide/self-hosting/enterprise-appliance.mdx lines 122-122 to target
./enterprise-releases, and developer-guide/self-hosting/enterprise-releases.mdx
lines 7-7 to target ./enterprise-appliance.
Source: Coding guidelines
| ``` | ||
| s2.1-pro-20260803-offline | ||
| └──┬───┘ └──┬───┘ └──┬──┘ | ||
| │ │ └─ variant: `offline` records usage to a local signed ledger | ||
| │ └─ the date we published it | ||
| └─ the model generation it serves | ||
| ``` |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Add a language tag to the version-format block.
Use a text fence for this non-executable example.
As per coding guidelines, “Include language tags on all code blocks.”
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@developer-guide/self-hosting/enterprise-releases.mdx` around lines 19 - 25,
Add the text language tag to the fenced version-format example containing
s2.1-pro-20260803-offline, without changing its contents or explanatory
annotations.
Source: Coding guidelines
Enterprise self-host customers have had nowhere public to read how to run the appliance or what changed between versions — the existing Self-Hosting section covers the open-source
fish-speechimages, a different product for a different audience.This is the docs half of FISH-772. The dashboard change (fishaudio/platform-web#2162) shows customers the version they should run and links to release notes when a newer one exists; those links need a page to point at, which is what
enterprise-releasesis.Two pages
Enterprise Appliance — prerequisites, sign in and pull (including the air-gapped
docker save/docker loadpath), the run command with the reasoning behind the flags that actually matter (JWT_SECRET, the shared volume, GPU pinning), the first-start compile time, and how to upgrade and roll back.Appliance Releases — the version list, with an explanation of how to read a tag. One entry today.
Content is taken from the operator guide we have been sending customers by hand, trimmed to what a customer needs: no registry internals, no build pipeline.
Two things I deliberately did not write
Both are commitments only the business can make, and I would rather leave a gap than publish a promise we have not agreed to:
Known gaps
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.Summary by CodeRabbit