93 lines
No EOL
2.7 KiB
Bash
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
|
|
} |