Cloudflare Tunnel с Docker Compose: безопасный доступ к контейнерам без открытых портов
Введение
Cloudflare Tunnel позволяет надёжно публиковать ваши локальные сервисы в интернете, не открывая порты и не обрабатывая HTTPS вручную. В этом гайде вы научитесь настраивать туннель в связке с Docker Compose, чтобы автоматически проксировать доступ к нужным контейнерам, как будто это обычный публичный сайт.
Зачем это нужно
- Нет белого IP — и не надо.
- Никакого проброса портов на роутере или в фаерволе.
- Cloudflare даёт HTTPS, WAF, защиту от DDoS и ботов.
- Всё можно запускать в контейнерах — без лишней настройки nginx, certbot и прочего.
Пример: публикуем веб-приложение через туннель
Допустим, у нас есть контейнер my-app
, который работает на http://my-app:3000
. Мы хотим, чтобы он был доступен по https://app.example.com
.
Шаг 1. Подготовка Cloudflare
-
Зарегистрируйтесь и добавьте домен в Cloudflare.
-
Установите
cloudflared
локально и выполните авторизацию:cloudflared login
-
Создайте туннель:
cloudflared tunnel create my-tunnel
-
Привяжите DNS:
cloudflared tunnel route dns my-tunnel app.example.com
- Скопируйте
.json
-файл с credentials (обычно находится в~/.cloudflared/
) в директорию проекта, например,./cloudflared
.
Шаг 2. Структура проекта
project/
├── docker-compose.yml
├── cloudflared/
│ ├── config.yml
│ └── <тут ваш tunnel-id>.json
Шаг 3. config.yml
— конфиг туннеля
tunnel: my-tunnel
credentials-file: /etc/cloudflared/<тут ваш tunnel-id>.json
ingress:
- hostname: app.example.com
service: http://my-app:3000
- service: http_status:404
Шаг 4. docker-compose.yml
version: '3.8'
services:
my-app:
image: your-image
container_name: my-app
expose:
- 3000
networks:
- app-network
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
restart: always
command: tunnel --config /etc/cloudflared/config.yml run
volumes:
- ./cloudflared:/etc/cloudflared
networks:
- app-network
networks:
app-network:
driver: bridge
Шаг 5. Запуск
docker compose up -d
Теперь при переходе на https://app.example.com
вы попадёте в ваш контейнер my-app
, не открывая портов наружу.
Заключение
Использование Cloudflare Tunnel в связке с Docker Compose позволяет:
- Упростить публикацию сервисов.
- Убрать необходимость ручной настройки HTTPS.
- Увеличить безопасность без танцев с
iptables
и nginx.
Всё работает в контейнерах — прозрачно и без магии. Отличный способ проксировать административки, панели или API, которые не хочется выставлять напрямую.
- Наше сообщество Openode.XYZ OpeNode.xyz
- Aeza VPS (+15% к пополнению) Aeza.net
- Лучший Евро-хостер VPS (+1 месяц бесплатно на 100$) Kamatera.com
- VPS hosting - 4vps.su (-10% скидка!) 4VPS.su
- TG Channel TG-Channel Neonode.cc