From 98aa775ff719342ce1d420b7ddb04c331005db77 Mon Sep 17 00:00:00 2001 From: Colin Hebert Date: Tue, 3 Jan 2023 19:45:45 +0100 Subject: [PATCH] Use MacVLAN and obtain domain automatically --- bootstrap.docker-compose.yml | 5 +++++ docs/bootstrap.md | 23 +++++++++++++++++++++ services/traefik/configs/traefik.yml | 2 +- services/traefik/volumes/config/traefik.yml | 2 +- 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/bootstrap.docker-compose.yml b/bootstrap.docker-compose.yml index 4eafdf9..a600f53 100644 --- a/bootstrap.docker-compose.yml +++ b/bootstrap.docker-compose.yml @@ -22,6 +22,9 @@ services: networks: - traefik - docker + - macvlan + environment: + - NAS_COMPOSE_DOMAIN=${NAS_COMPOSE_DOMAIN?} # TODO: Move to configs? volumes: - traefik_dynamic_config:/etc/traefik/dynamic/:ro @@ -69,6 +72,8 @@ networks: name: traefik labels: nas-compose.boostrap: true + macvlan: + external: true volumes: portainer_data: diff --git a/docs/bootstrap.md b/docs/bootstrap.md index abfbff7..b3e7c68 100644 --- a/docs/bootstrap.md +++ b/docs/bootstrap.md @@ -1,5 +1,28 @@ # Bootstrap +Set up a MacVLAN network + +As an example, with the following network setup: +- interface to LAN: `bond0` +- Complete LAN subnet: `192.168.0.0/23` +- LAN gateway: `192.168.0.1` +- DHCP range: `192.168.0.0/24` (excluding gateway) +- MacVLAN interface name: `macvlan0` (user defined) +- MacVLAN range: `192.168.1.0/24` (should be outside of DHCP range) +- MacVLAN host IP: `192.168.1.1` (should be in the MacVLAN range) + +``` +docker network create -d macvlan -o parent=bond0 --subnet=192.168.0.0/23 --gateway=192.168.0.1 --ip-range=192.168.1.0/24 --aux-address "nas=192.168.1.1" macvlan +ip link add macvlan0 link bond0 type macvlan mode bridge +ip addr add 192.168.1.1/32 dev macvlan0 +ip link set macvlan0 up +``` + +Run portainer once +``` +docker run --rm -p 9443:9443 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer-ce:latest +``` + ### Environment variables - `SERVICES_DIR`: Absolute path to the `services` folder diff --git a/services/traefik/configs/traefik.yml b/services/traefik/configs/traefik.yml index 05c58fa..06136f6 100644 --- a/services/traefik/configs/traefik.yml +++ b/services/traefik/configs/traefik.yml @@ -3,7 +3,7 @@ providers: endpoint: tcp://docker:2375 exposedByDefault: false network: traefik - defaultRule: Host(`{{ index .Labels "com.docker.compose.service" }}.dev.dedicated.contact`) + defaultRule: Host(`{{ index .Labels "com.docker.compose.service" }}.{{ env `NAS_COMPOSE_DOMAIN` }}`) file: directory: /etc/traefik/dynamic/ diff --git a/services/traefik/volumes/config/traefik.yml b/services/traefik/volumes/config/traefik.yml index c63fc50..d084561 100644 --- a/services/traefik/volumes/config/traefik.yml +++ b/services/traefik/volumes/config/traefik.yml @@ -1,7 +1,7 @@ http: routers: traefik: - rule: Host(`traefik.dev.dedicated.contact`) + rule: Host(`traefik.{{ env `NAS_COMPOSE_DOMAIN` }}`) service: api@internal middlewares: - traefik-auth