Author SHA1 Message Date
val 3b3085a44d expiry moved from oidc to node 2026-08-29 11:27:29 +02:00
3wc c80a135a99 chore: publish 0.4.1+v0.29 release 2026-06-17 13:53:43 -04:00
3wc beb68cb6c4 fix: Remove deprecated config option 2026-06-17 13:53:25 -04:00
3wc 53e74e9228 chore: publish 0.4.0+v0.29 release 2026-06-17 11:45:41 -04:00
3wc b9118894ea chore: update image tags 2026-06-17 11:31:17 -04:00
val 0c7c64cd7e chore: publish 0.3.1+v0.28 release 2026-05-28 18:53:43 +02:00
val 3897d3d6a9 Merge pull request 'added env for expiration time' (#10) from expiry into main
Reviewed-on: coop-cloud/headscale#10
2026-05-28 16:51:42 +00:00
val 4f48752ff8 added env for expiration time 2026-05-28 17:49:04 +02:00
3wc 311d08d461 docs: Add @val as backup maintainer 2026-04-27 13:54:51 -04:00
3wordchant 899e0746cc Merge pull request 'docs: Maintainers, assemble!' (#7) from docs/3wc/putting-together-a-team into main
Reviewed-on: coop-cloud/headscale#7
Reviewed-by: ammaratef45 <ammaratef45@proton.me>
2026-04-27 17:52:36 +00:00
3wc 0ef57f229f docs: Maintainers, assemble!
Re: #6
2026-04-16 12:54:55 -04:00
3wordchant d6092108f3 Merge pull request 'info about headless container and ui' (#4) from val/headscale:getting-start-docs into main
Reviewed-on: coop-cloud/headscale#4
Reviewed-by: decentral1se <decentral1se@noreply.git.coopcloud.tech>
2026-04-09 17:04:11 +00:00
3wc 1fcc21e48f chore: publish 0.3.0+v0.28 release 2026-04-09 12:59:27 -04:00
3wc b72fd39e38 chore: update image tags 2026-04-09 12:35:42 -04:00
7 changed files with 88 additions and 19 deletions
+2
View File
@@ -25,3 +25,5 @@ ENABLE_DERP=false
# See https://git.coopcloud.tech/coop-cloud/backup-bot-two # See https://git.coopcloud.tech/coop-cloud/backup-bot-two
ENABLE_BACKUPS=true ENABLE_BACKUPS=true
# The amount of time a node is authenticated, default is set to 7d
#EXPIRY=0
+35
View File
@@ -0,0 +1,35 @@
# Headscale Recipe Maintenance
All contributions should be made via a pull request. This is to ensure a
certain quality and consistency, that others can rely on.
## Maintainer Responsibilities
`3wc` is responsible for installing regular updates:
- Patch and minor updates within a week of them being released upstream
- Major updates within a month of them being released upstream
`ammaratef45` is responsible for responding to pull requests and issues, within a week of them being filed.
`val` is available as backup for both of these tasks.
In order to fulfill these responsibilities a recipe maintainer:
- Has to watch the repository (to get notifications)
- Needs to make sure Renovate is configured properly
## Pull Requests
A pull request can be merged if it is approved by at least one maintainer. For
pull requests opened by a maintainer they need to be approved by another
maintainer. Even though it is okay to merge a pull request with one approval, it
is always better if all maintainers looked at the pull request and approved it.
## Become a maintainer
Everyone can apply to be a recipe maintainer:
1. Watch the repository to always get updates
2. Simply add yourself to the list in the [README.md](./README.md), add yourself to whichever things you would like to be (co) responsible for in this document, then open a new pull request with the change.
3. Once the pull request gets merged you will be added to the [headscale maintainers team](https://git.coopcloud.tech/org/coop-cloud/teams/headscale-maintainers).
+4 -2
View File
@@ -4,8 +4,10 @@
<!-- metadata --> <!-- metadata -->
* **Maintainer**: [@3wc](https://git.coopcloud.tech/3wordchant), [@ammaratef45](https://git.coopcloud.tech/ammaratef45), [@val](https://git.coopcloud.tech/val)
* **Status**: `stable`
* **Category**: Apps * **Category**: Apps
* **Status**: 3 * **Features**: 3
* **Image**: [`headscale/headscale`](https://hub.docker.com/r/headscale/headscale), 4, upstream * **Image**: [`headscale/headscale`](https://hub.docker.com/r/headscale/headscale), 4, upstream
* **Healthcheck**: Yes * **Healthcheck**: Yes
* **Backups**: Yes * **Backups**: Yes
@@ -41,4 +43,4 @@ abra app run yourapp.xyz app -- headscale help
2. The UI runs on `https://yourapp.xyz/web`, the UI is a mere frontend (a static site), so no data is saved on a server, so you will need to set URL and API-Key yourself on every client. Find more about the UI [here](https://github.com/gurucomputing/headscale-ui). 2. The UI runs on `https://yourapp.xyz/web`, the UI is a mere frontend (a static site), so no data is saved on a server, so you will need to set URL and API-Key yourself on every client. Find more about the UI [here](https://github.com/gurucomputing/headscale-ui).
For the usage of headscale itself, check the [offical docs](https://headscale.net/stable/usage/getting-started/). For the usage of headscale itself, check the [offical docs](https://headscale.net/stable/usage/getting-started/).
+1 -1
View File
@@ -1,3 +1,3 @@
# Set any config versions here # Set any config versions here
# Docs: https://docs.coopcloud.tech/maintainers/handbook/#manage-configs # Docs: https://docs.coopcloud.tech/maintainers/handbook/#manage-configs
export CONFIG_YAML_VERSION=v4 export CONFIG_YAML_VERSION=v7
+5 -3
View File
@@ -1,13 +1,15 @@
--- ---
services: services:
app: app:
image: headscale/headscale:v0.28 image: headscale/headscale:v0.29
networks: networks:
- proxy - proxy
command: serve command: serve
volumes: volumes:
# - config:/etc/headscale # - config:/etc/headscale
- data:/var/lib/headscale - data:/var/lib/headscale
environment:
EXPIRY: ${EXPIRY:-7d}
configs: configs:
- source: config_yaml - source: config_yaml
target: /etc/headscale/config.yaml target: /etc/headscale/config.yaml
@@ -20,7 +22,7 @@ services:
- "traefik.http.routers.${STACK_NAME}.rule=Host(`${DOMAIN}`${EXTRA_DOMAINS})" - "traefik.http.routers.${STACK_NAME}.rule=Host(`${DOMAIN}`${EXTRA_DOMAINS})"
- "traefik.http.routers.${STACK_NAME}.entrypoints=web-secure" - "traefik.http.routers.${STACK_NAME}.entrypoints=web-secure"
- "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}" - "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}"
- "coop-cloud.${STACK_NAME}.version=0.1.0+v0.28" - "coop-cloud.${STACK_NAME}.version=0.4.1+v0.29"
# Enable backups: https://docs.coopcloud.tech/maintainers/handbook/#how-do-i-configure-backuprestore # Enable backups: https://docs.coopcloud.tech/maintainers/handbook/#how-do-i-configure-backuprestore
- "backupbot.backup=${ENABLE_BACKUPS:-true}" - "backupbot.backup=${ENABLE_BACKUPS:-true}"
- "backupbot.backup.path=/var/lib/headscale" - "backupbot.backup.path=/var/lib/headscale"
@@ -32,7 +34,7 @@ services:
start_period: 1m start_period: 1m
ui: ui:
image: ghcr.io/gurucomputing/headscale-ui:2025.08.23 image: ghcr.io/gurucomputing/headscale-ui:2026.03.17
deploy: deploy:
labels: labels:
- traefik.enable=true - traefik.enable=true
+40 -13
View File
@@ -134,8 +134,45 @@ derp:
# Disables the automatic check for headscale updates on startup # Disables the automatic check for headscale updates on startup
disable_check_updates: false disable_check_updates: false
# Time before an inactive ephemeral node is deleted? # Node lifecycle configuration.
ephemeral_node_inactivity_timeout: 30m node:
# Default key expiry for non-tagged nodes, regardless of registration method
# (auth key, CLI, web auth). Tagged nodes are exempt and never expire.
#
# This is the base default. OIDC can override this via oidc.expiry.
# If a client explicitly requests a specific expiry, the client value is used.
#
# Setting the value to "0" means no default expiry (nodes never expire unless
# explicitly expired via `headscale nodes expire`).
#
# Tailscale SaaS uses 180d; set to a positive duration to match that behaviour.
#
# Default: 0 (no default expiry)
expiry: {{ env "EXPIRY" }}
ephemeral:
# Time before an inactive ephemeral node is deleted.
inactivity_timeout: 30m
# HA subnet router health probing.
#
# When HA routes exist (2+ nodes advertising the same prefix), headscale
# pings each HA node every probe_interval via the Noise channel. If a node
# fails to respond within probe_timeout it is marked unhealthy and the
# primary role moves to the next healthy node. A node that later responds
# is marked healthy again but does NOT reclaim primary (avoids flapping).
#
# Worst-case detection time is probe_interval + probe_timeout (15s default).
# No-op when no HA routes exist. Set probe_interval to 0 to disable.
routes:
ha:
# How often to ping HA subnet routers. Set to 0 to disable probing.
# Must be >= 2s when enabled.
probe_interval: 10s
# How long to wait for a ping response before marking a node unhealthy.
# Must be >= 1s and less than probe_interval.
probe_timeout: 5s
database: database:
# Database type. Available options: sqlite, postgres # Database type. Available options: sqlite, postgres
@@ -345,15 +382,10 @@ oidc:
# `LoadCredential` straightforward: # `LoadCredential` straightforward:
client_secret_path: "/run/secrets/oidc_client_key" client_secret_path: "/run/secrets/oidc_client_key"
# The amount of time a node is authenticated with OpenID until it expires
# and needs to reauthenticate.
# Setting the value to "0" will mean no expiry.
expiry: 7d
# Use the expiry from the token received from OpenID when the user logged # Use the expiry from the token received from OpenID when the user logged
# in. This will typically lead to frequent need to reauthenticate and should # in. This will typically lead to frequent need to reauthenticate and should
# only be enabled if you know what you are doing. # only be enabled if you know what you are doing.
# Note: enabling this will cause `oidc.expiry` to be ignored. # Note: enabling this will cause `node.expiry` to be ignored for
use_expiry_from_token: false use_expiry_from_token: false
# The OIDC scopes to use, defaults to "openid", "profile" and "email". # The OIDC scopes to use, defaults to "openid", "profile" and "email".
@@ -410,11 +442,6 @@ logtail:
# disabled by default. Enabling this will make your clients send logs to Tailscale Inc. # disabled by default. Enabling this will make your clients send logs to Tailscale Inc.
enabled: false enabled: false
# Enabling this option makes devices prefer a random port for WireGuard traffic over the
# default static port 41641. This option is intended as a workaround for some buggy
# firewall devices. See https://tailscale.com/kb/1181/firewalls/ for more information.
randomize_client_port: false
# Taildrop configuration # Taildrop configuration
# Taildrop is the file sharing feature of Tailscale, allowing nodes to send files to each other. # Taildrop is the file sharing feature of Tailscale, allowing nodes to send files to each other.
# https://tailscale.com/kb/1106/taildrop/ # https://tailscale.com/kb/1106/taildrop/
+1
View File
@@ -0,0 +1 @@
added EXPIRY env (non-breaking)