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

Скрипт за инсталиране и конфигуриране на 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

  1. Отидете в Zero Trust → Tunnels
  2. Проверете дали тунелът е "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 

Федя Серафиев

Федя Серафиев

Федя Серафиев e собственик на уебсайта urocibg.eu. Той намира удовлетворение в това да помага на хората да решават и най-сложните технически проблеми. Сегашната му цел е да пише лесни за следване статии, така че подобни проблеми изобщо да не възникват.

Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу: