From 74d0dad76897a2b9f68c571f5950cdec252593f1 Mon Sep 17 00:00:00 2001 From: KaiDo92 Date: Tue, 4 Nov 2025 17:44:43 +0700 Subject: [PATCH] [WIP] Providing Traefik configuration through the file provider --- commands/env.cmd | 38 +++++++++++++++++++++++++++++++++++++- commands/svc.cmd | 18 ++++++++++++++++-- config/traefik/traefik.yml | 3 ++- docker/docker-compose.yml | 3 +-- 4 files changed, 56 insertions(+), 6 deletions(-) diff --git a/commands/env.cmd b/commands/env.cmd index d8868554..54d047b5 100644 --- a/commands/env.cmd +++ b/commands/env.cmd @@ -226,10 +226,46 @@ ${DOCKER_COMPOSE_COMMAND} \ --project-directory "${WARDEN_ENV_PATH}" -p "${WARDEN_ENV_NAME}" \ "${DOCKER_COMPOSE_ARGS[@]}" "${WARDEN_PARAMS[@]}" "$@" - if [[ "${WARDEN_PARAMS[0]}" == "stop" || "${WARDEN_PARAMS[0]}" == "down" || \ "${WARDEN_PARAMS[0]}" == "up" || "${WARDEN_PARAMS[0]}" == "start" ]]; then regeneratePMAConfig + + WARDEN_WEBSERVICE="nginx" + if [[ ${WARDEN_VARNISH} -eq 1 ]]; then + WARDEN_WEBSERVICE="varnish" + else + WARDEN_APACHE=${WARDEN_APACHE:-0} + if [[ ${WARDEN_APACHE} -eq 1 ]]; then + WARDEN_WEBSERVICE="apache" + else + WARDEN_WEBSERVICE="nginx" + fi + fi + echo "🧩 Generating dynamic Traefik config for environment: ${WARDEN_ENV_NAME}" + + DYNAMIC_DIR="${WARDEN_HOME_DIR}/etc/traefik/dynamic" + DYNAMIC_FILE="${DYNAMIC_DIR}/${WARDEN_ENV_NAME}.yml" + mkdir -p "$DYNAMIC_DIR" + + cat > "$DYNAMIC_FILE" <<-EOT +http: + routers: + ${WARDEN_ENV_NAME}-${WARDEN_WEBSERVICE}: + rule: "HostRegexp(\`{subdomain:.+}.${WARDEN_ENV_NAME}.test\`) || Host(\`${WARDEN_ENV_NAME}.test\`)" + service: ${WARDEN_ENV_NAME}-${WARDEN_WEBSERVICE} + tls: {} + entryPoints: + - https + priority: 2 + + services: + ${WARDEN_ENV_NAME}-${WARDEN_WEBSERVICE}: + loadBalancer: + servers: + - url: "http://${WARDEN_ENV_NAME}-${WARDEN_WEBSERVICE}:80" +EOT + + echo "✅ Traefik dynamic config created: $DYNAMIC_FILE" fi ## resume mutagen sync if available and php-fpm container id hasn't changed diff --git a/commands/svc.cmd b/commands/svc.cmd index 52b635ae..2ede7025 100644 --- a/commands/svc.cmd +++ b/commands/svc.cmd @@ -77,10 +77,11 @@ if [[ "${WARDEN_PARAMS[0]}" == "up" ]]; then ## copy configuration files into location where they'll be mounted into containers from mkdir -p "${WARDEN_HOME_DIR}/etc/traefik" + mkdir -p "${WARDEN_HOME_DIR}/etc/traefik/dynamic" cp "${WARDEN_DIR}/config/traefik/traefik.yml" "${WARDEN_HOME_DIR}/etc/traefik/traefik.yml" ## generate dynamic traefik ssl termination configuration - cat > "${WARDEN_HOME_DIR}/etc/traefik/dynamic.yml" <<-EOT + cat > "${WARDEN_HOME_DIR}/etc/traefik/dynamic/tls.yml" <<-EOT tls: stores: default: @@ -91,12 +92,25 @@ if [[ "${WARDEN_PARAMS[0]}" == "up" ]]; then EOT for cert in $(find "${WARDEN_SSL_DIR}/certs" -type f -name "*.crt.pem" | sed -E 's#^.*/ssl/certs/(.*)\.crt\.pem$#\1#'); do - cat >> "${WARDEN_HOME_DIR}/etc/traefik/dynamic.yml" <<-EOF + cat >> "${WARDEN_HOME_DIR}/etc/traefik/dynamic/tls.yml" <<-EOF - certFile: /etc/ssl/certs/warden/${cert}.crt.pem keyFile: /etc/ssl/certs/warden/${cert}.key.pem EOF done + ## generate dynamic traefik configuration for the traefik dashboard + cat > "${WARDEN_HOME_DIR}/etc/traefik/dynamic/traefik.yml" <<-'EOT' +http: + routers: + traefik: + rule: "Host(`traefik.warden.test`)" + service: api@internal + tls: {} + entryPoints: + - https + priority: 100 +EOT + ## always execute svc up using --detach mode if ! (containsElement "-d" "$@" || containsElement "--detach" "$@"); then WARDEN_PARAMS=("${WARDEN_PARAMS[@]:1}") diff --git a/config/traefik/traefik.yml b/config/traefik/traefik.yml index 4f8f8593..5f3bede7 100644 --- a/config/traefik/traefik.yml +++ b/config/traefik/traefik.yml @@ -3,7 +3,8 @@ api: dashboard: true providers: file: - filename: /etc/traefik/dynamic.yml + directory: /etc/traefik/dynamic/ + watch: true docker: network: warden defaultRule: "Host(`{{ .Name }}.warden.test`)" diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index d5357847..04d18411 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -7,9 +7,8 @@ services: - "${TRAEFIK_LISTEN:-127.0.0.1}:443:443" # The HTTPS port volumes: - ${WARDEN_HOME_DIR}/etc/traefik/traefik.yml:/etc/traefik/traefik.yml - - ${WARDEN_HOME_DIR}/etc/traefik/dynamic.yml:/etc/traefik/dynamic.yml + - ${WARDEN_HOME_DIR}/etc/traefik/dynamic:/etc/traefik/dynamic - ${WARDEN_HOME_DIR}/ssl/certs:/etc/ssl/certs/warden - - /var/run/docker.sock:/var/run/docker.sock labels: - traefik.enable=true - traefik.http.routers.traefik.tls=true