153 lines
7.3 KiB
YAML
153 lines
7.3 KiB
YAML
name: netbird
|
|
|
|
services:
|
|
netbird-server:
|
|
image: netbirdio/netbird-server:0.80.0
|
|
container_name: netbird-server
|
|
restart: unless-stopped
|
|
environment:
|
|
NETBIRD_DOMAIN: "${NETBIRD_DOMAIN:?Set NETBIRD_DOMAIN in netbird/.env}"
|
|
NETBIRD_PROXY_SUBNET: "${NETBIRD_PROXY_SUBNET:?Set NETBIRD_PROXY_SUBNET in netbird/.env (run setup.sh)}"
|
|
entrypoint:
|
|
- /bin/sh
|
|
- /opt/netbird/entrypoint.sh
|
|
command:
|
|
- --config
|
|
- /run/netbird/config.yaml
|
|
ports:
|
|
- "3478:3478/udp"
|
|
volumes:
|
|
- netbird_data:/var/lib/netbird
|
|
- ./config.template.yaml:/opt/netbird/config.template.yaml:ro
|
|
- ./entrypoint.sh:/opt/netbird/entrypoint.sh:ro
|
|
secrets:
|
|
- relay_auth_secret
|
|
- datastore_encryption_key
|
|
tmpfs:
|
|
- /run/netbird:mode=0700
|
|
healthcheck:
|
|
test:
|
|
- CMD
|
|
- bash
|
|
- -ec
|
|
- exec 3<>/dev/tcp/127.0.0.1/80
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 30s
|
|
stop_grace_period: 30s
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.services.netbird-server.loadbalancer.server.port=80"
|
|
- "traefik.http.services.netbird-server-h2c.loadbalancer.server.port=80"
|
|
- "traefik.http.services.netbird-server-h2c.loadbalancer.server.scheme=h2c"
|
|
|
|
# gRPC routers
|
|
# Prod Router
|
|
- "traefik.http.routers.netbird-grpc.rule=Host(`${NETBIRD_DOMAIN:?Set NETBIRD_DOMAIN in netbird/.env}`) && (PathPrefix(`/signalexchange.SignalExchange/`) || PathPrefix(`/management.ManagementService/`) || PathPrefix(`/management.ProxyService/`))"
|
|
- "traefik.http.routers.netbird-grpc.entrypoints=websecure"
|
|
- "traefik.http.routers.netbird-grpc.service=netbird-server-h2c"
|
|
- "traefik.http.routers.netbird-grpc.priority=100"
|
|
- "traefik.http.routers.netbird-grpc.tls=true"
|
|
- "traefik.http.routers.netbird-grpc.tls.certresolver=letsencrypt"
|
|
# Local Router
|
|
- "traefik.http.routers.netbird-grpc-local.rule=Host(`${NETBIRD_LOCAL_DOMAIN:?Set NETBIRD_LOCAL_DOMAIN in netbird/.env}`) && (PathPrefix(`/signalexchange.SignalExchange/`) || PathPrefix(`/management.ManagementService/`) || PathPrefix(`/management.ProxyService/`))"
|
|
- "traefik.http.routers.netbird-grpc-local.entrypoints=websecure"
|
|
- "traefik.http.routers.netbird-grpc-local.service=netbird-server-h2c"
|
|
- "traefik.http.routers.netbird-grpc-local.priority=100"
|
|
- "traefik.http.routers.netbird-grpc-local.tls=true"
|
|
# Dev Router
|
|
- "traefik.http.routers.netbird-grpc-dev.rule=Host(`${NETBIRD_DEV_DOMAIN:?Set NETBIRD_DEV_DOMAIN in netbird/.env}`) && (PathPrefix(`/signalexchange.SignalExchange/`) || PathPrefix(`/management.ManagementService/`) || PathPrefix(`/management.ProxyService/`))"
|
|
- "traefik.http.routers.netbird-grpc-dev.entrypoints=websecure"
|
|
- "traefik.http.routers.netbird-grpc-dev.service=netbird-server-h2c"
|
|
- "traefik.http.routers.netbird-grpc-dev.priority=100"
|
|
- "traefik.http.routers.netbird-grpc-dev.tls=true"
|
|
|
|
# Backend routers
|
|
# Prod Router
|
|
- "traefik.http.routers.netbird-backend.rule=Host(`${NETBIRD_DOMAIN:?Set NETBIRD_DOMAIN in netbird/.env}`) && (PathPrefix(`/relay`) || PathPrefix(`/ws-proxy/`) || PathPrefix(`/api`) || PathPrefix(`/oauth2`))"
|
|
- "traefik.http.routers.netbird-backend.entrypoints=websecure"
|
|
- "traefik.http.routers.netbird-backend.service=netbird-server"
|
|
- "traefik.http.routers.netbird-backend.priority=100"
|
|
- "traefik.http.routers.netbird-backend.tls=true"
|
|
- "traefik.http.routers.netbird-backend.tls.certresolver=letsencrypt"
|
|
# Local Router
|
|
- "traefik.http.routers.netbird-backend-local.rule=Host(`${NETBIRD_LOCAL_DOMAIN:?Set NETBIRD_LOCAL_DOMAIN in netbird/.env}`) && (PathPrefix(`/relay`) || PathPrefix(`/ws-proxy/`) || PathPrefix(`/api`) || PathPrefix(`/oauth2`))"
|
|
- "traefik.http.routers.netbird-backend-local.entrypoints=websecure"
|
|
- "traefik.http.routers.netbird-backend-local.service=netbird-server"
|
|
- "traefik.http.routers.netbird-backend-local.priority=100"
|
|
- "traefik.http.routers.netbird-backend-local.tls=true"
|
|
# Dev Router
|
|
- "traefik.http.routers.netbird-backend-dev.rule=Host(`${NETBIRD_DEV_DOMAIN:?Set NETBIRD_DEV_DOMAIN in netbird/.env}`) && (PathPrefix(`/relay`) || PathPrefix(`/ws-proxy/`) || PathPrefix(`/api`) || PathPrefix(`/oauth2`))"
|
|
- "traefik.http.routers.netbird-backend-dev.entrypoints=websecure"
|
|
- "traefik.http.routers.netbird-backend-dev.service=netbird-server"
|
|
- "traefik.http.routers.netbird-backend-dev.priority=100"
|
|
- "traefik.http.routers.netbird-backend-dev.tls=true"
|
|
networks:
|
|
- proxy
|
|
|
|
dashboard:
|
|
image: netbirdio/dashboard:v2.94.0
|
|
container_name: netbird-dashboard
|
|
restart: unless-stopped
|
|
environment:
|
|
NETBIRD_MGMT_API_ENDPOINT: "https://${NETBIRD_DOMAIN:?Set NETBIRD_DOMAIN in netbird/.env}"
|
|
NETBIRD_MGMT_GRPC_API_ENDPOINT: "https://${NETBIRD_DOMAIN:?Set NETBIRD_DOMAIN in netbird/.env}"
|
|
AUTH_AUDIENCE: netbird-dashboard
|
|
AUTH_CLIENT_ID: netbird-dashboard
|
|
AUTH_CLIENT_SECRET: ""
|
|
AUTH_AUTHORITY: "https://${NETBIRD_DOMAIN:?Set NETBIRD_DOMAIN in netbird/.env}/oauth2"
|
|
AUTH_SUPPORTED_SCOPES: openid profile email groups
|
|
AUTH_REDIRECT_URI: /nb-auth
|
|
AUTH_SILENT_REDIRECT_URI: /nb-silent-auth
|
|
USE_AUTH0: "false"
|
|
LETSENCRYPT_DOMAIN: none
|
|
depends_on:
|
|
netbird-server:
|
|
condition: service_healthy
|
|
healthcheck:
|
|
test: ["CMD", "curl", "--fail", "--silent", "--show-error", "http://127.0.0.1/"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 15s
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.services.netbird-dashboard.loadbalancer.server.port=80"
|
|
# Dashboard catch-all routers
|
|
# Prod Router
|
|
- "traefik.http.routers.netbird-dashboard.rule=Host(`${NETBIRD_DOMAIN:?Set NETBIRD_DOMAIN in netbird/.env}`)"
|
|
- "traefik.http.routers.netbird-dashboard.entrypoints=websecure"
|
|
- "traefik.http.routers.netbird-dashboard.service=netbird-dashboard"
|
|
- "traefik.http.routers.netbird-dashboard.priority=1"
|
|
- "traefik.http.routers.netbird-dashboard.tls=true"
|
|
- "traefik.http.routers.netbird-dashboard.tls.certresolver=letsencrypt"
|
|
# Local Router
|
|
- "traefik.http.routers.netbird-dashboard-local.rule=Host(`${NETBIRD_LOCAL_DOMAIN:?Set NETBIRD_LOCAL_DOMAIN in netbird/.env}`)"
|
|
- "traefik.http.routers.netbird-dashboard-local.entrypoints=websecure"
|
|
- "traefik.http.routers.netbird-dashboard-local.service=netbird-dashboard"
|
|
- "traefik.http.routers.netbird-dashboard-local.priority=1"
|
|
- "traefik.http.routers.netbird-dashboard-local.tls=true"
|
|
# Dev Router
|
|
- "traefik.http.routers.netbird-dashboard-dev.rule=Host(`${NETBIRD_DEV_DOMAIN:?Set NETBIRD_DEV_DOMAIN in netbird/.env}`)"
|
|
- "traefik.http.routers.netbird-dashboard-dev.entrypoints=websecure"
|
|
- "traefik.http.routers.netbird-dashboard-dev.service=netbird-dashboard"
|
|
- "traefik.http.routers.netbird-dashboard-dev.priority=1"
|
|
- "traefik.http.routers.netbird-dashboard-dev.tls=true"
|
|
networks:
|
|
- proxy
|
|
|
|
networks:
|
|
proxy:
|
|
external: true
|
|
|
|
volumes:
|
|
netbird_data:
|
|
name: netbird_data
|
|
|
|
secrets:
|
|
relay_auth_secret:
|
|
file: ./secrets/relay-auth-secret
|
|
datastore_encryption_key:
|
|
file: ./secrets/datastore-encryption-key
|