Введение
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локально и выполните авторизацию:
1cloudflared login
- Создайте туннель:
1 cloudflared tunnel create my-tunnel
- Привяжите DNS:
1 cloudflared tunnel route dns my-tunnel app.example.com
- Скопируйте
.json-файл с credentials (обычно находится в~/.cloudflared/) в директорию проекта, например,./cloudflared.
Шаг 2. Структура проекта
1project/
2├── docker-compose.yml
3├── cloudflared/
4│ ├── config.yml
5│ └── <тут ваш tunnel-id>.json
6
Шаг 3. config.yml — конфиг туннеля
1tunnel: my-tunnel
2credentials-file: /etc/cloudflared/<тут ваш tunnel-id>.json
3
4ingress:
5 - hostname: app.example.com
6 service: http://my-app:3000
7 - service: http_status:404
Шаг 4. docker-compose.yml
1version: '3.8'
2
3services:
4 my-app:
5 image: your-image
6 container_name: my-app
7 expose:
8 - 3000
9 networks:
10 - app-network
11
12 cloudflared:
13 image: cloudflare/cloudflared:latest
14 container_name: cloudflared
15 restart: always
16 command: tunnel --config /etc/cloudflared/config.yml run
17 volumes:
18 - ./cloudflared:/etc/cloudflared
19 networks:
20 - app-network
21
22networks:
23 app-network:
24 driver: bridge
Шаг 5. Запуск
1docker compose up -d
Теперь при переходе на https://app.example.com вы попадёте в ваш контейнер my-app, не открывая портов наружу.
Заключение
Использование Cloudflare Tunnel в связке с Docker Compose позволяет:
- Упростить публикацию сервисов.
- Убрать необходимость ручной настройки HTTPS.
- Увеличить безопасность без танцев с
iptablesи nginx.
Всё работает в контейнерах — прозрачно и без магии. Отличный способ проксировать административки, панели или API, которые не хочется выставлять напрямую.