Skip to content

docs: make Aspire the recommended server setup path - #889

Open
withinfocus wants to merge 1 commit into
mainfrom
docs/server-aspire-setup
Open

withinfocus wants to merge 1 commit into
mainfrom
docs/server-aspire-setup

Conversation

@withinfocus

Copy link
Copy Markdown
Contributor

🎟️ Tracking

Follows bitwarden/server#6775, which added the Aspire AppHost, and its follow-ups: bitwarden/server#7646, bitwarden/server#7670, bitwarden/server#7731, bitwarden/server#7803, bitwarden/server#8082 and bitwarden/server#8319.

📔 Objective

The server setup guides only described the manual setup: start Docker Compose, run the helper scripts, then launch each service yourself. This PR documents Aspire as the recommended way to run the server locally and keeps the manual setup as the alternative.

Setup Guide

  • Clone, Git config and user secrets are now shared by both paths. The SQL Server password rules moved into the user secrets step, since both paths use that password.
  • New "Run with Aspire" section: stopping old Compose containers, the Az module, trusting the dev certificate, the Database:Password user secret, starting the AppHost, the dashboard, resources you start by hand, and common settings.
  • The Docker Compose steps now live under "Run manually". SQL Server, Mailcatcher, Redis and Azurite moved to a shared "Local services" section. Existing anchors such as #mailcatcher, #azurite and #create-database still resolve.
  • Aspire runs setup_secrets.ps1 -clear on every start, so the guide tells readers to put changes in dev/secrets.json rather than on individual projects.

Other pages

  • Self-hosted: an Aspire tab using SelfHost and Database:SelfHostPassword.
  • SSO: Aspire configures the IdP through the Parameters:sso-org-id user secret instead of .env.
  • Ingress tunnels: the AppHost's ngrok plugin for the Billing webhook.
  • MSSQL, Events, Portal, SCIM and Advanced setup: notes on what Aspire runs for you, and where it doesn't apply (Entity Framework databases, the Service Bus emulator, the reverse proxy).
  • Troubleshooting: a new Aspire section.

Broken anchors

The build flagged #install-licensing-certificate on the Setup Guide and #authorization on the Portal page. Both headings sat inside <Bitwarden> blocks, and SSR renders community mode, so the table of contents linked to headings that weren't in the HTML. The licensing certificate is now a Bitwarden-only part of the user secrets step. The Authorization heading moved outside the block, with a short <Community> note.

🤖 AI-assisted review

  • Path: Standard (code-review-local). It raised one IMPORTANT finding, a wrong cd path in the Aspire setup steps, which is fixed. No findings were deferred.
  • Limitation: every statement about the AppHost was checked against AppHost/ and dev/ on server main, and the AppHost builds there. It wasn't run end to end, because the setup-secrets resource clears the local per-project user secrets on start.

@withinfocus withinfocus added the ai-review Request a Claude code review label Oct 9, 2026
@github-actions

github-actions Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

🤖 Bitwarden Claude Code Review

Overall Assessment: APPROVE

This docs-only PR makes Aspire the recommended way to set up a local server. It splits the Setup Guide into shared steps, "Run with Aspire", "Run manually" and "Local services", and adds Aspire guidance to the advanced setup, EF, MSSQL, Events, Portal, SCIM, self-hosted, SSO, troubleshooting and tunnel pages. Every new internal anchor (#run-with-aspire, #run-manually, #set-up-aspire, #ngrok-with-aspire, #running) matches a heading. The existing inbound links (#mailcatcher, #azurite, #create-database, #configure-user-secrets) still resolve, and the <Bitwarden>/<Community> blocks are balanced.

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying contributing-docs with  Cloudflare Pages  Cloudflare Pages

Latest commit: fd7a0c5
Status: ✅  Deploy successful!
Preview URL: https://f1bab865.contributing-docs.pages.dev
Branch Preview URL: https://docs-server-aspire-setup.contributing-docs.pages.dev

View logs

@withinfocus
withinfocus marked this pull request as ready for review October 9, 2026 19:04
@withinfocus
withinfocus requested a review from a team as a code owner October 9, 2026 19:04

@eliykat eliykat left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Excited to see Aspire become our official recommendation for DX.


3. Set the `MSSQL_PASSWORD` variable. This will be the password for your MSSQL database server.
<Bitwarden>
- Copy the user secrets file from the shared Development collection (Your Bitwarden Vault) into

@eliykat eliykat Oct 10, 2026 •

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pre-existing capitalization/phrasing:

Suggested change
- Copy the user secrets file from the shared Development collection (Your Bitwarden Vault) into
- Copy the user secrets file from the shared Development collection (in your Bitwarden vault) into

Comment on lines +557 to 573
### Aspire

Debug the `AppHost` project from your IDE. Visual Studio and Rider attach the debugger to each
service that the AppHost starts, so breakpoints in Api, Identity, and the other services work
without launching them separately. Rider requires the Aspire plugin.

### Visual Studio

To debug:

- On Windows, right-click on each project > click **Debug** > click **Start New Instance**
- On macOS, right-click each project > click **Start Debugging Project**

### Rider

Launch the Api project and the Identity project by clicking the "Play" button for each project
separately.

@eliykat eliykat Oct 10, 2026 •

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heading groups are inconsistent: Aspire is a setup option, but Visual Studio and Rider are IDEs and are implicitly for the manual setup option. Also, while we're here, Visual Studio for MacOS was deprecated in 2024 :)

I suggest this is split up and folded into the respective sections for Run with Aspire and Run manually.

Comment on lines +17 to +20
- **[Manual setup](#run-manually):** you start the Docker Compose containers, run the helper
scripts, and launch each service yourself. Use this if you need an
[Entity Framework database](./database/ef/index.mdx) or another container that Aspire doesn't
manage.

@eliykat eliykat Oct 10, 2026 •

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's unfortunate that we need to preserve the manual setup instructions at all. I prefer to have a single opinionated recommendation.

Does manually starting EF also mean that you have to manually start the rest of your server? They're just Docker containers that I assume an Aspire-started server could still talk to.

Alternatively:

  • could the Apphost project be updated to start these on request? (maybe out of scope here)
  • could the manual setup instructions be demoted to a sub-page - to de-clutter this page and focus on the recommended instructions?

My assumption is that running Bitwarden with an EF database is exceedingly rare, even in a dev environment. Most developers would be using MSSQL for their dev server, and only run the other database containers for integration test purposes (which doesn't affect the server setup).

Comment on lines +50 to +55
:::note

The emulator connects to the Docker Compose `mssql` container, so it doesn't work with the SQL
Server that Aspire starts. Use the [manual setup](./guide.md#run-manually) for Azure Service Bus.

:::

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doesn't Aspire also start azurite though? Why won't it work here?

Comment on lines +153 to +154
With Aspire, set a new `Parameters:sso-org-id` user secret in the `AppHost` folder, then restart the
AppHost and start the `idp` resource again.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This can also be configured through the AppHost UI (Parameters tab) which I think is a better DX.

After that, rerun the docker compose command from Step 5.
```bash
cd ../AppHost
dotnet user-secrets set "Database:Password" "<your SQL Server password>"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This can also be set via the Parameters tab in the UI.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai-review Request a Claude code review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants