Скрипт за инсталиране и конфигуриране на Cloudflare Tunnel в Docker на Ubuntu

Днес ми остана малко свободно време и реших да напиша пълен автоматизиран скрипт за инсталиране на Cloudflare Tunnel в Docker на Ubuntu, с опция за добавяне на домейни. Скриптът включва създаване на тунел, конфигурация и Docker Compose
Какво прави скриптът?
Инсталира Docker и Docker Compose (ако липсват)
- Проверява дали Docker и Docker Compose са инсталирани.
- Ако не са, ги инсталира автоматично.
- Добавя текущия потребител в групата
docker
(за да се използва Docker безsudo
).
2. Създава необходимите директории
~/cloudflared/config
– За съхранение на конфигурационни файлове (config.yml
иcredentials.json
).~/cloudflared/logs
– За логове на тунела.
3. Изисква входни данни от потребителя
- Cloudflare Token (за автентикация).
- Име на тунела (напр.
my-tunnel
).
4. Създава Cloudflare Tunnel
- Използва официалния Docker образ на
cloudflared
, за да генерира:credentials.json
– Файл с идентификационни данни за тунела.- Ако тунелът вече съществува, пропуска тази стъпка.
5. Генерира конфигурационен файл (config.yml
)
- Дефинира:
- Име на тунела (
tunnel: my-tunnel
). - Път до credentials файла.
- Първоначално ingress правило (пренасочва
example.yourdomain.com
къмhttp://localhost:80
). - Catch-all правило (връща
404
за неизвестни домейни).
- Име на тунела (
6. Създава Docker Compose файл (docker-compose.yml
)
- Описва контейнера:
- Използва официалния образ
cloudflare/cloudflared:latest
. - Мапва локалните директории (
config
иlogs
) към контейнера. - Задава автоматичен рестарт при проблеми (
restart: unless-stopped
). - Стартира тунела с подадения Cloudflare Token.
- Използва официалния образ
7. Стартира тунела в Docker
- Пуска контейнера в фонов режим (
docker-compose up -d
).
8. Информира потребителя за следващи стъпки
- Показва съобщение за успешна инсталация.
- Обяснява как да се добавят нови домейни (чрез редактиране на
config.yml
и рестартиране).
Защо този скрипт е полезен?
✅ Автоматизира всички ръчни стъпки (инсталация, конфигурация, стартиране).
✅ Работи с Docker (изолира тунела от основната система).
✅ Поддържа лесно добавяне на нови домейни.
✅ Генерира логове за лесен дебъг.
Как да го използвате?
Копирайте скрипта в Ubuntu сървър.
curl -O https://gist.fedia.eu/urocibg/2b3ede5cafb443a7913dd4af68703b50/raw/HEAD/install-cloudflared-docker.sh
Изпълнете го с права за изпълнение:
chmod +x install-cloudflared-docker.sh
./install-cloudflared-docker.sh
Следвайте инструкциите (въведете токен и име на тунел).
Проверка на работата на тунела
🔹 Проверка на логовете
docker logs cloudflared-tunnel --tail 50 --follow
🔹 Тестване на домейна
curl https://example.yourdomain.com
Ако получавате отговор от вашия сървър, тунелът работи.
🔹 Проверка в Cloudflare Dashboard
- Отидете в Zero Trust → Tunnels
- Проверете дали тунелът е "Healthy"
Добавяне на нови поддомейни
🔹 Стъпка 1: Редактиране на config.yml
nano ~/cloudflared/config/config.yml
Добавете новия домейн (преди catch-all
правилото):
ingress:
- hostname: "sub1.yourdomain.com"
service: http://localhost:80
- hostname: "sub2.yourdomain.com"
service: http://localhost:3000
- service: http_status:404
🔹 Стъпка 2 Добавяне на DNS запис в Cloudflare
Чрез команда (препоръчително)
docker exec cloudflared-tunnel cloudflared tunnel route dns $TUNNEL_NAME sub2.yourdomain.com
🔹 Стъпка 3: Рестартиране на тунела
cd ~/cloudflared
docker-compose restart
Често срещани проблеми и решения
Проблем | Решение |
---|---|
ERR Failed to serve в логове | Проверете дали config.yml е синтактично правилен и сервизът е достъпен |
DNS не работи (сив облак) | Уверете се, че DNS записът е проксиран (оранжев) |
SSL грешки при самоподписан сертификат | Добавете originRequest.noTLSVerify: true в config.yml |
Допълнителни команди
Списък на тунелите:
docker exec cloudflared-tunnel cloudflared tunnel list
Информация за тунел:
docker exec cloudflared-tunnel cloudflared tunnel info $TUNNEL_NAME
Спиране/стартиране на тунела:
docker-compose stop
docker-compose start
Заключение
Сега имате напълно работещ Cloudflare Tunnel в Docker, който може да:
✅ Проксира трафик към локални услуги
✅ Поддържа множество домейни
✅ Автоматично се рестартира при проблеми
🔗 Скриптът е достъпен в UrociBg Gist
Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу:
Donate ☕️ Дарете с PayPalDonate 💳 Дарете с Revolut