3.7 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	Running headscale
- 
Download the headscale binary https://github.com/juanfont/headscale/releases, and place it somewhere in your $PATH or use the docker container docker pull headscale/headscale:x.x.x
- 
(Optional, you can also use SQLite) Get yourself a PostgreSQL DB running docker run --name headscale \ -e POSTGRES_DB=headscale -e POSTGRES_USER=foo \ -e POSTGRES_PASSWORD=bar \ -p 5432:5432 \ -d postgres
- 
Create a WireGuard private key and headscale configuration wg genkey > private.key cp config.yaml.example config.yaml
- 
Create a namespace headscale namespaces create myfirstnamespaceor docker: the db.sqlite mount is only needed if you use sqlite touch db.sqlite docker run \ -v $(pwd)/private.key:/private.key \ -v $(pwd)/config.json:/config.json \ -v $(pwd)/derp.yaml:/derp.yaml \ -v $(pwd)/db.sqlite:/db.sqlite \ -p 127.0.0.1:8080:8080 \ headscale/headscale:x.x.x \ headscale namespaces create myfirstnamespaceor if your server is already running in docker: docker exec <container_name> headscale create myfirstnamespace
- 
Run the server headscale serveor docker: the db.sqlite mount is only needed if you use sqlite docker run \ -v $(pwd)/private.key:/private.key \ -v $(pwd)/config.json:/config.json \ -v $(pwd)/derp.yaml:/derp.yaml \ -v $(pwd)/db.sqlite:/db.sqlite \ -p 127.0.0.1:8080:8080 \ headscale/headscale:x.x.x headscale serve
- 
If you used tailscale.com before in your nodes, make sure you clear the tailscaled data folder systemctl stop tailscaled rm -fr /var/lib/tailscale systemctl start tailscaled
- 
Add your first machine tailscale up --login-server YOUR_HEADSCALE_URL
- 
Navigate to the URL you will get with tailscale up, where you'll find your machine key.
- 
In the server, register your machine to a namespace with the CLI headscale -n myfirstnamespace nodes register YOURMACHINEKEYor docker: docker run \ -v $(pwd)/private.key:/private.key \ -v $(pwd)/config.json:/config.json \ -v $(pwd)/derp.yaml:/derp.yaml \ headscale/headscale:x.x.x \ headscale -n myfirstnamespace nodes register YOURMACHINEKEYor if your server is already running in docker: docker exec <container_name> headscale -n myfirstnamespace nodes register YOURMACHINEKEY
Alternatively, you can use Auth Keys to register your machines:
- 
Create an authkey headscale -n myfirstnamespace preauthkeys create --reusable --expiration 24hor docker: docker run \ -v $(pwd)/private.key:/private.key \ -v $(pwd)/config.json:/config.json \ -v$(pwd)/derp.yaml:/derp.yaml \ -v $(pwd)/db.sqlite:/db.sqlite \ headscale/headscale:x.x.x \ headscale -n myfirstnamespace preauthkeys create --reusable --expiration 24hor if your server is already running in docker: docker exec <container_name> headscale -n myfirstnamespace preauthkeys create --reusable --expiration 24h
- 
Use the authkey from your machine to register it tailscale up --login-server YOUR_HEADSCALE_URL --authkey YOURAUTHKEY
If you create an authkey with the --ephemeral flag, that key will create ephemeral nodes. This implies that --reusable is true.
Please bear in mind that all headscale commands support adding -o json or -o json-line to get nicely JSON-formatted output.