mirror of
https://github.com/iFargle/headscale-webui.git
synced 2025-12-25 06:43:20 +01:00
239fec4e21814598fdb9941f06cd4c088f8b6bb2
…
headscale-webui
This is a simple front-end for a Headscale server.
Allows you to do the following:
- Enable/Disable routes and exit nodes
- Add, move, rename, and remove machines
- Add and remove users/namespaces
- Add and expire PreAuth keys
- Add and remove machine tags
- View machine details
- Hostname
- User associated with the machine
- IP addresses in the Tailnet
- Last seen by the control server
- Last update with the control server
- Creation date
- PreAuth key associated with the machine
- Enable / disable routes and exit nodes
- Add and delete machine tags
Screenshots:
Overview Page:
Users Page:
New Machine Modal:
Machines Page:
Settings Page showing an API Key Test:

Installation:
- This assumes you have traefik as your reverse proxy. I'm sure it will work with others, but I don't have experience with any.
- Change the following variables in docker-compose.yml:
- TZ - Change to your timezone. Example: Asia/Tokyo
- HS_SERVER - Change to your headscale's URL
- BASE_PATH - This will be the path your server is served on. Because the Windows Tailscale GUI expects <HS_SERVER/admin>, I usually put this as "/admin"
- KEY - Your encryption key to store your headscale API key on disk. Generate a new one with "openssl rand -base64 32". Do not forget the quotations around the key when entering.
- You will also need to change the volumes:
- /data - Where your encryption key will reside. Can be anywhere
- /etc/headscale/ - This is your Headscale configuration file.
- Update the build context location to the directory with the Dockerfile.
- Example: If Dockerfile is in /home/username/headscale-webui, your context will be:
- context: /home/username/headscale-webui/
- Example: If Dockerfile is in /home/username/headscale-webui, your context will be:
Traefik
- This was built assuming the use of the Traefik reverse proxy.
- Exmaple config:
labels:
# Traefik Configs
- "traefik.enable=true"
- "traefik.http.routers.headscale-webui.entrypoints=web-secure"
- "traefik.http.routers.headscale-webui.rule=Host(`headscale.$DOMAIN`) && (PathPrefix(`/admin/`) || PathPrefix(`/admin`))"
- "traefik.http.services.headscale-webui.loadbalancer.server.port=5000"
- "traefik.http.routers.headscale-webui.tls.certresolver=letsencrypt"
# redirect /admin to /
- "traefik.http.middlewares.headscale-webui-stripprefix.stripprefix.forceslash=true"
- "traefik.http.middlewares.headscale-webui-stripprefix.stripprefix.prefixes=/admin/"
- Replace $DOMAIN with your domain and update /admin to your BASE_PATH, if changed.
Description
Languages
Python
54.2%
JavaScript
27.6%
HTML
16.3%
Dockerfile
1%
CSS
0.9%