---
title: Quickstart
description: Run Headscale and Headplane together on one server with Docker Compose.
---
import { quickstartCompose, quickstartFetch } from "./quickstart-examples";
# Quickstart
This sets up a complete server from scratch: Headscale, Headplane and Caddy in
one Compose project, on one domain. Caddy handles HTTPS, Headplane is served
under `/admin`, and Headplane can edit Headscale's settings, including DNS.
Already running Headscale? Skip to [Installation](/install) instead.
## Requirements
- A Linux server with Docker and Docker Compose
- A domain name pointing at the server, `headscale.example.com` below
- Ports 80 and 443 open, so Caddy can get a certificate
## 1. Get Headscale's config
Start from Headscale's example config, plus an empty file for DNS records:
Then change these keys in `headscale/config.yaml`:
```yaml
server_url: https://headscale.example.com
listen_addr: 0.0.0.0:8080
policy:
# Store the ACL policy in the database so Headplane can edit it
mode: database
dns:
# Not the server's domain, and not a domain it ends in, such as example.com
base_domain: tailnet.example.com
extra_records_path: /etc/headscale/extra-records.json
```
## 2. Configure Headplane
Generate a cookie secret with `openssl rand -hex 16`, then save this as
`headplane/config.yaml`:
```yaml
server:
base_url: "https://headscale.example.com"
cookie_secret: "