feat: публикация наружу через Cloudflare Quick Tunnel (cloudflared)

This commit is contained in:
dev
2026-09-12 15:06:56 +03:00
parent 779270fb73
commit 854f2d4650
3 changed files with 41 additions and 1 deletions
+11 -1
View File
@@ -13,4 +13,14 @@ AI_MODEL_REPO=Qwen/Qwen2.5-1.5B-Instruct-GGUF
# Промпт по умолчанию для автоисправления текстов (переопределяет встроенный, если в настройках не сохранён свой) # Промпт по умолчанию для автоисправления текстов (переопределяет встроенный, если в настройках не сохранён свой)
AI_PROMPT=Ты — редактор текстов. Исправь ТОЛЬКО грамматические, орфографические и пунктуационные ошибки в тексте. Приведи к правильному регистру буквы. НЕ меняй слова, структуру предложений, стиль или смысл текста. Верни ТОЛЬКО исправленный текст без пояснений. AI_PROMPT=Ты — редактор текстов. Исправь ТОЛЬКО грамматические, орфографические и пунктуационные ошибки в тексте. Приведи к правильному регистру буквы. НЕ меняй слова, структуру предложений, стиль или смысл текста. Верни ТОЛЬКО исправленный текст без пояснений.
# Таймаут запроса к AI (мс), по умолчанию 120000 (2 минуты) # Таймаут запроса к AI (мс), по умолчанию 120000 (2 минуты)
AI_REQUEST_TIMEOUT_MS=120000 AI_REQUEST_TIMEOUT_MS=120000
# === Cloudflare Tunnel (контейнер cloudflared) ===
# По умолчанию — Quick Tunnel на trycloudflare.com: случайный публичный URL,
# адрес печатается в логах: docker compose logs -f cloudflared.
# Чтобы привязать свой домен, замените command сервиса cloudflared
# в docker-compose.yml на: command: ["tunnel", "run", "--token", "${CLOUDFLARE_TUNNEL_TOKEN}"]
# (токен вида "eyJ..." создаётся в Cloudflare Zero Trust -> Networks -> Tunnels).
CLOUDFLARE_TUNNEL_TOKEN=
# Внутренний адрес приложения, на который указывает Quick Tunnel.
CLOUDFLARE_TUNNEL_URL=http://app:3003
+12
View File
@@ -172,6 +172,18 @@ docker exec whatido-tailscale-1 tailscale funnel status
Исторически проект публиковался через reverse-proxy Caddy + Let's Encrypt (файлы `Caddyfile.example`, закомментированный сервис в старых версиях compose). Если нужно классическое публичное HTTPS на собственном домене с проброшенными портами 80/443 — этот вариант остаётся возможным: раскомментируйте/восстановите сервис `caddy`, укажите домен в `Caddyfile` и уберите сетевые блокировки. По умолчанию сейчас рекомендуется Tailscale-схема выше. Исторически проект публиковался через reverse-proxy Caddy + Let's Encrypt (файлы `Caddyfile.example`, закомментированный сервис в старых версиях compose). Если нужно классическое публичное HTTPS на собственном домене с проброшенными портами 80/443 — этот вариант остаётся возможным: раскомментируйте/восстановите сервис `caddy`, укажите домен в `Caddyfile` и уберите сетевые блокировки. По умолчанию сейчас рекомендуется Tailscale-схема выше.
## Публикация наружу через Cloudflare (Quick Tunnel)
Помимо Tailscale, стек умеет публиковать приложение через контейнер `cloudflared` (сервис в `docker-compose.yml`). **Quick Tunnel** даёт случайный публичный адрес `*.trycloudflare.com` через Cloudflare — без своего домена, банковской карты и проброса портов (подойдёт, если Zero Trust требует привязать карту).
Узнать текущий адрес для доступа:
```bash
docker compose logs cloudflared | grep trycloud
```
Адрес меняется при каждом перезапуске контейнера `cloudflared`. Для постоянного адреса используйте именованный туннель (замените `command` сервиса `cloudflared` в `docker-compose.yml` на `["tunnel", "run", "--token", "${CLOUDFLARE_TUNNEL_TOKEN}"]`, токен — из Cloudflare Zero Trust **Networks → Tunnels**) или схему через Tailscale выше.
## Структура данных ## Структура данных
- `groups` — группы, расписание (`day_of_week`, `time_start`, `time_end`) - `groups` — группы, расписание (`day_of_week`, `time_start`, `time_end`)
+18
View File
@@ -65,6 +65,24 @@ services:
# depends_on: # depends_on:
# - app # - app
# Публикация наружу через 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).
cloudflared:
image: cloudflare/cloudflared:latest
restart: unless-stopped
environment:
TZ: Europe/Moscow
command: ["tunnel", "--url", "${CLOUDFLARE_TUNNEL_URL:-http://app:3003}"]
depends_on:
- app
text-corrector: text-corrector:
image: ghcr.io/ggml-org/llama.cpp:server image: ghcr.io/ggml-org/llama.cpp:server