dx/dxkit/modules/docker/proxy.module.sh

93 lines
No EOL
2.7 KiB
Bash

#!/usr/bin/env bash
# modules/docker/proxy.module.sh
#
# Proxy docker module.
# Configures proxy, generates what's needed to compose docker stack --
# and starts/stops the proxy service.
function docker::proxy::running() { docker::raw ps --format '{{.Names}}' | grep -qx "${PROXY_SERVICE}"; }
function docker::proxy::exists() { docker::raw ps -a --format '{{.Names}}' | grep -qx "${PROXY_SERVICE}"; }
function docker::proxy::traefik_labels() {
local service="$1"
local domain="$2"
local backend_domain="$3"
local port="$4"
cat <<EOF
- "traefik.enable=true"
- "traefik.docker.network=${PROXY_NETWORK}"
- "traefik.http.routers.${service}-frontend.rule=Host(\`${domain}\`)"
- "traefik.http.routers.${service}-frontend.entrypoints=web"
- "traefik.http.routers.${service}-frontend.service=${service}"
- "traefik.http.routers.${service}-backend.rule=Host(\`${backend_domain}\`)"
- "traefik.http.routers.${service}-backend.entrypoints=web"
- "traefik.http.routers.${service}-backend.service=${service}"
- "traefik.http.services.${service}.loadbalancer.server.port=${port}"
EOF
}
function docker::proxy::start() {
docker::proxy::running && return 0
docker::proxy::exists && {
docker::raw start "$PROXY_SERVICE" > /dev/null 2>&1
return 0
};
docker::proxy::_create_container
}
function docker::proxy::stop() {
if docker::proxy::running "${PROXY_SERVICE}"; then
docker::raw stop "${PROXY_SERVICE}" > /dev/null 2>&1
fi
}
function docker::proxy::restart() {
if docker::proxy::running "${PROXY_SERVICE}"; then
docker::raw restart "${PROXY_SERVICE}" > /dev/null 2>&1
fi
}
function docker::proxy::ensure_network() {
docker::raw network inspect "${PROXY_NETWORK}" >/dev/null 2>&1 || \
docker::raw network create "${PROXY_NETWORK}"
}
function docker::proxy::ensure_proxy_running() {
docker::proxy::ensure_network
docker::proxy::start
}
# ============================================
# Logs
# ============================================
function docker::proxy::logs() {
docker::raw logs -f "${PROXY_SERVICE}"
}
# ============================================
# Private
# ============================================
function docker::proxy::_create_container() {
docker::raw run -d \
--name "$PROXY_SERVICE" \
--restart unless-stopped \
-p 80:80 -p 443:443 -p 8080:8080 \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--network "$PROXY_NETWORK" \
traefik:v3.0 \
--api.dashboard=true --api.insecure=true \
--providers.docker=true \
--providers.docker.exposedbydefault=false \
--providers.docker.network="$PROXY_NETWORK" \
--entrypoints.web.address=:80 \
--entrypoints.websecure.address=:443 \
--log.level=DEBUG \
> /dev/null 2>&1
}