# Choose an install method

URL: https://shellz.dev/docs/install

> Which install fits your infrastructure, from plain Linux servers to Kubernetes pods.

shellz runs in one of two modes. Pick the one that matches where you can install software.

## On a host

Use this when you control the machine: a VM, a bare-metal server, an LXC container or a Proxmox guest. shellz installs as a systemd service and records every login on the machine. If Docker runs on that machine, `docker exec` into any of its containers is recorded too, with nothing added to your images.

- [Linux server](https://shellz.dev/docs/install/linux.md): any systemd Linux server.
- [Docker host](https://shellz.dev/docs/install/docker-host.md): a Linux server that runs Docker. Same install, plus container sessions.

## Inside the container

Use this when you can't install anything on the host: Kubernetes, ECS and Fargate, Cloud Run, or dev containers. shellz is added to your image and runs as PID 1 in front of your app. Every container that starts with a fleet token joins a **fleet** and records every shell opened in it.

- [Container image](https://shellz.dev/docs/install/container-image.md): add shellz to any image. Start here for all container platforms.
- [Kubernetes](https://shellz.dev/docs/install/kubernetes.md): `kubectl exec` into pods.
- [ECS, Fargate and Cloud Run](https://shellz.dev/docs/install/ecs-cloud-run.md): ECS Exec and other managed container platforms.
- [Dev containers](https://shellz.dev/docs/install/dev-containers.md): VS Code and Codespaces-style development containers.

## Which one?

| Your setup | Use |
|---|---|
| Linux VMs or servers you SSH into | [Linux server](https://shellz.dev/docs/install/linux.md) |
| Servers running Docker or Docker Compose | [Docker host](https://shellz.dev/docs/install/docker-host.md) |
| Kubernetes (EKS, GKE, AKS or self-managed) | [Kubernetes](https://shellz.dev/docs/install/kubernetes.md) |
| ECS on Fargate, or Cloud Run | [ECS, Fargate and Cloud Run](https://shellz.dev/docs/install/ecs-cloud-run.md) |
| ECS on EC2 instances you manage | Either: [Docker host](https://shellz.dev/docs/install/docker-host.md) on the instances, or [in the image](https://shellz.dev/docs/install/ecs-cloud-run.md) |
| Dev containers | [Dev containers](https://shellz.dev/docs/install/dev-containers.md) |
| Podman, rootless Docker, containerd without Docker | [Container image](https://shellz.dev/docs/install/container-image.md) |

> [!NOTE]
> Don't install both on the same container. A host install already records `docker exec` into every container on that host, so the in-container install is only needed where you can't reach the host.

## What both modes have in common

- The same encryption, signing and storage. A container session and an SSH session look the same in the dashboard.
- The same [recording policy](https://shellz.dev/docs/guides/recording-policy.md) options: fail closed, buffer or fail open.
- Outbound HTTPS only, to `api.shellz.dev`, `ingest.shellz.dev` and `releases.shellz.dev`. Nothing listens for inbound connections.
- Linux on amd64 (x86_64) or arm64 (aarch64).
