feat: cloudflared container with optional WireGuard egress

- Dockerfile.cloudflared builds cloudflared (official static binary) on Alpine with wireguard-tools
This commit is contained in:
dev
2026-09-12 17:40:42 +03:00
parent 9203eee5d2
commit dd4d306a4e
5 changed files with 66 additions and 9 deletions
+13 -8
View File
@@ -68,22 +68,27 @@ services:
# Публикация наружу через Cloudflare Tunnel (cloudflared), Quick Tunnel:
# случайный публичный URL *.trycloudflare.com, который печатается в логах:
# docker compose logs -f cloudflared
# ВАЖНО: официальный образ cloudflare/cloudflared НЕ содержит /bin/sh,
# поэтому логика передаётся аргументами в command (entrypoint образа = cloudflared),
# а не скриптом.
# Для именованного туннеля на свой домен замените command ниже на:
# command: ["tunnel", "run", "--token", "${CLOUDFLARE_TUNNEL_TOKEN}"]
# (токен получается в Cloudflare Zero Trust -> Networks -> Tunnels).
# Сборка из Dockerfile.cloudflared добавляет опциональный WireGuard:
# если в wg/wg0.conf лежит конфиг — контейнер сначала поднимает VPN и
# только потом запускает туннель (исход Cloudflare через VPN). Без конфига
# туннель стартует сразу, как в базовой схеме.
cloudflared:
image: cloudflare/cloudflared:latest
build:
context: .
dockerfile: Dockerfile.cloudflared
restart: unless-stopped
cap_add:
- NET_ADMIN
volumes:
- ./wg:/etc/wireguard:ro
environment:
TZ: Europe/Moscow
command: ["tunnel", "--url", "${CLOUDFLARE_TUNNEL_URL:-http://app:3003}"]
CLOUDFLARE_TUNNEL_URL: ${CLOUDFLARE_TUNNEL_URL:-http://app:3003}
depends_on:
- app
text-corrector:
image: ghcr.io/ggml-org/llama.cpp:server
container_name: text-corrector