Nick Vigilante 9afdea4808 docs(docs): document RPM install on RHEL-family Linux (#29295)
## Summary

Coder ships `.rpm` assets with every release and `install.sh` routes the
RHEL family to `install_rpm()`, but no public page said so. The only
page that named RHEL was the uninstall page. This adds an RPM install
page for the control plane.

New page `docs/install/server/rpm.md`:

- Supported distribution matrix for RHEL 8/9/10, Rocky, AlmaLinux,
CentOS Stream, Amazon Linux, Fedora, and openSUSE, with the
`ID`/`ID_LIKE` detection that makes derivatives work.
- Install tabs for the install script, `dnf install`, and `rpm -U`.
- What the package lays down: `/usr/bin/coder`,
`/etc/coder.d/coder.env`, `coder.service`,
`coder-workspace-proxy.service`, and the unprivileged `coder` user.
- Configure-then-start ordering, because `coder.service` carries
`ConditionFileNotEmpty=/etc/coder.d/coder.env` and won't start against
an empty config.
- SELinux caveat for Docker/Podman inside workspaces on RHEL nodes,
linking the existing guidance instead of duplicating it.
- Iron Bank UBI9-minimal pointer for hardened environments, scoped
correctly as a container image rather than an RPM path.

Supporting edits: manifest entry under "3. Install the control plane"
between OpenShift and Cloud Providers, a row in the platform table on
`install/server/index.md`, and a pointer from `install/cli.md`.

## Placement

The page sits at `docs/install/server/rpm.md`, as a sibling of Docker,
Kubernetes, Rancher, and OpenShift, rather than under community install
methods: RPMs are officially built and shipped, not an unofficial
method. It is a control-plane deployment page, not CLI download content,
so it is out of scope for the CLI-retirement work.

## Verification

Claims on the page were checked against real RHEL-family images, not
just the install script:

| Check | Method | Result |
|-------|--------|--------|
| `ID` and `ID_LIKE` per distribution | `docker run <image> sh -c '.
/etc/os-release; ...'` across UBI 8/9/10, Rocky 9, Alma 9/10, CentOS
Stream 9/10, Amazon Linux 2/2023, Fedora, openSUSE Leap and Tumbleweed |
Every RHEL-family image lists `fedora` in `ID_LIKE`; both openSUSE
variants list `opensuse`. Matches the `distro()` branch in `install.sh`
|
| `dnf install ./coder_*.rpm` | Rocky Linux 9 container | Installs
cleanly |
| Package contents | `rpm -ql coder` | `/usr/bin/coder`,
`/etc/coder.d/coder.env`, `coder.service`,
`coder-workspace-proxy.service` |
| Service account and start condition | Installed unit file | Runs as
`coder:coder`; `ConditionFileNotEmpty=/etc/coder.d/coder.env` |
| Architectures | `.github/workflows/release.yaml` | `amd64`, `armv7`,
`arm64` |

Not verified: `systemctl enable --now coder` against a live database,
since the containers used for verification have no init system. The
`systemctl is-active` output on the page is standard systemd output,
flagged here for the reviewer.

Lint: `make lint/markdown`, `make lint/emdash`, and `make lint/prose`
all clean on the changed files; `pnpm run format-docs` applied.

<details>
<summary>Implementation plan and decision log</summary>

### Style guide application

The first revision of this page was drafted from sibling install pages
rather than from the style guide, and was rewritten against
[`docs/.style/content-guidelines.md`](https://github.com/coder/coder/blob/main/docs/.style/content-guidelines.md)
and the prose style guide. What changed: one sentence per source line,
declared audience and outcome in the opening paragraph, numbered
procedures with one instruction per step and conditions stated first,
`refer to` instead of `see`, `sh` fences instead of `shell`, H3 tab
headings, non-breaking space between number and unit, and `Learn more`
instead of `Next steps`.

### Decisions

- **No version numbers or FIPS certification claims for Iron Bank.** The
tags in `scripts/ironbank/hardening_manifest.yaml` are stale (`0.15.3`);
documenting them would re-create the drift. The page links the registry
and names the UBI9-minimal base only.
- **Iron Bank framed as a container path.** It is a container image, so
the page routes readers to Kubernetes/OpenShift rather than implying it
is an alternative to the RPM.
- **Dropped an unverified SELinux claim.** An earlier draft asserted
that the control plane runs under enforcing mode with no policy changes.
That was not tested, so it is gone. The section now covers only the
workspace container-runtime case, which links to existing verified
guidance.
- **`ID_LIKE` values kept out of the table.** They vary by version (RHEL
8/9 report `fedora`, RHEL 10 reports `centos fedora`), so the table
lists `ID` and the prose states the invariant the install script
actually matches on.
- **Minimal edit to `install/cli.md`.** That file is slated for deletion
in the Install restructure, so it gets a pointer and nothing more.

### Rebase onto the install spine restructure

The install spine restructure landed on `main` while this PR was open
and removed the install-method tabs on `install/index.md` that the first
revision pointed from. The branch was rebased and squashed onto it: the
page moved from `docs/install/rpm.md` to `docs/install/server/rpm.md`,
every relative link was repointed at the new locations
(`../plan/sizing/index.md`, `../prepare/airgap.md`,
`../operate/upgrade.md`, `../operate/uninstall.md`,
`./kubernetes/index.md`), the install script snippet picked up the
standardized `curl -fsSL` flags, and discovery moved from the removed
`install/index.md` tabs to the platform table on
`install/server/index.md`. The prose is otherwise unchanged.

### Follow-ups tracked elsewhere

The install spine has no other bare-host or Linux-package option under
platforms; every other entry is a container platform or a cloud VM. Open
question recorded on the IA proposal: whether this generalizes to a
single "Linux host (system packages)" page covering `.deb` and `.apk`
too.

</details>

---

Linear:
[DOCS-886](https://linear.app/codercom/issue/DOCS-886/document-support-for-running-coder-on-red-hat-linux)

🤖 Generated with Coder Agents on behalf of @nickvigilante.
2026-09-25 11:47:34 -04:00
…
…
…

Coder Logo Light Coder Logo Dark

Self-Hosted Cloud Development Environments and AI Agents

Coder Banner Light Coder Banner Dark

Quickstart | Docs | Why Coder | Premium

discord release godoc OpenSSF Best Practices OpenSSF Scorecard license

Coder is a self-hosted platform for cloud development environments and AI coding agents. Workspaces are defined with Terraform, connected through a secure Wireguard® tunnel, and automatically shut down when not used. Coder Agents runs a native AI coding agent whose loop executes in the control plane on your infrastructure, with no API keys in workspaces.

  • Define cloud development environments in Terraform
    • EC2 VMs, Kubernetes Pods, Docker Containers, etc.
  • Automatically shutdown idle resources to save on costs
  • Onboard developers in seconds instead of days
  • Delegate coding work to AI agents on your infrastructure
    • Bring any model (Anthropic, OpenAI, Google, Bedrock, self-hosted)
    • No LLM credentials in workspaces, user identity on every action
    • Centralized model governance, cost tracking, and audit logging

Coder platform showing templates and a running workspace

Quickstart

Check out our install guides for other methods and a complete tutorial.

Try Coder with the install script on Linux and macOS, or grab the latest binary or installer from GitHub Releases on Windows:

curl -fsSL https://coder.com/install.sh | sh

Start the server and open http://localhost:3000 to create your initial user, create a Docker template, and provision your first workspace:

coder server

For a production deployment, add a PostgreSQL database (version 13 or later) and an external access URL, and see our validated architectures for sizing and infrastructure guidance:

coder server --postgres-url <url> --access-url <url>

Without these flags, Coder uses a built-in database and sets up a *.try.coder.app access URL for evaluation. Use coder --help for the full list of flags and environment variables.

Documentation

Browse the documentation or visit a specific section below:

  • Workspaces: Workspaces contain the IDEs, dependencies, and configuration information needed for software development
  • Templates: Templates are written in Terraform and describe the infrastructure for workspaces
  • Coder Agents: Delegate coding work to AI agents running on your self-hosted infrastructure
  • AI Gateway: Centralize authentication, auditing, and cost controls for AI tooling
  • Administration: Learn how to operate Coder
  • Premium: Learn about paid features built for large teams
  • IDEs: Connect your existing editor to a workspace

Support

Open an issue for bugs and feature requests.

For community support, showcasing what you built, and feedback on in-progress features, join our Discord or GitHub Discussions.

Dedicated support is included in Coder Premium. For more information, visit coder.com/pricing.

Integrations

New integrations are always in progress. Open an issue to request one. Contributions are welcome in any official or community repository.

Official

Community

Contributing

New contributors are always welcome. If you are new to the Coder codebase, see the contribution guide to get started.

Hiring

Apply on the careers page if you are interested in joining the team.

S
Description
Provision remote development environments via Terraform
Readme AGPL-3.0
1,022 MiB
Languages
Go 74.9%
TypeScript 23.1%
Shell 0.8%
HCL 0.3%
PLpgSQL 0.3%
Other 0.4%