Часто доступ к веб ресурсам осуществляется не напрямую, а через обратные прокси. Причём чаще доступ именно такой, а не прямой. При возможности, я всегда ставлю обратные прокси перед сайтами даже в небольших проектах. Это и удобнее, и безопаснее, но немного более хлопотно в управлении.
Для проксирования запросов в Docker контейнеры очень удобно использовать Traefik. Удобство это в первую очередь проявляется в тестовых задачах, где часто меняется конфигурация контейнеров с приложениями, их домены, а также возникают задачи по запуску нескольких копий типовых проектов. Для прода это не так актуально, потому что он обычно более статичен в этом плане.
Сразу покажу на практике, в чём заключается удобство Traefik и в каких случаях имеет смысл им воспользоваться. Для примера запущу через Traefik 2 проекта test1 и test2, состоящих из nginx и apache и тестовой страницы, где будет указано имя проекта. В этом примере будет наглядно виден принцип работы Traefik.
Запускаем Traefik через
Можно сходить в веб интерфейс по ip адресу сервера на порт 8080. Пока там пусто, так как нет проектов. Создаём первый тестовый проект. Готовим для него файлы:
Запускаем этот проект:
В веб интерфейсе Traefik, в разделе HTTP появится запись:
Теперь можно скопировать проект test1, изменить в нём имя домена и имя внутренней сети на test2 и запустить. Traefik автоматом подцепит этот проект и будет проксировать запросы к test2.server.local в nginx-test2. Работу этой схемы легко проверить, зайдя откуда-то извне браузером на test1.server.local и test2.server.local. Вы получите соответствующую страницу index.html от запрошенного проекта.
К Traefik легко добавить автоматическое получение TLS сертификатов от Let's Encrypt. Примеров в сети и документации много, настроить не составляет проблемы. Не стал показывать этот пример, так как не уместил бы его в формат заметки. Мне важно было показать суть - запустив один раз Traefik, можно его больше не трогать. По меткам в контейнерах он будет автоматом настраивать проксирование. В некоторых ситуациях это очень удобно.
#webserver #traefik #devops
Для проксирования запросов в Docker контейнеры очень удобно использовать Traefik. Удобство это в первую очередь проявляется в тестовых задачах, где часто меняется конфигурация контейнеров с приложениями, их домены, а также возникают задачи по запуску нескольких копий типовых проектов. Для прода это не так актуально, потому что он обычно более статичен в этом плане.
Сразу покажу на практике, в чём заключается удобство Traefik и в каких случаях имеет смысл им воспользоваться. Для примера запущу через Traefik 2 проекта test1 и test2, состоящих из nginx и apache и тестовой страницы, где будет указано имя проекта. В этом примере будет наглядно виден принцип работы Traefik.
Запускаем Traefik через
docker-compose.yaml
:# mkdir traefik && cd traefik
# mcedit docker-compose.yaml
services:
reverse-proxy:
image: traefik:v3.0
command: --api.insecure=true --providers.docker
ports:
- "80:80"
- "8080:8080"
networks:
- traefik_default
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
traefik_default:
external: true
# docker compose up
Можно сходить в веб интерфейс по ip адресу сервера на порт 8080. Пока там пусто, так как нет проектов. Создаём первый тестовый проект. Готовим для него файлы:
# mkdir test1 && cd test1
# mcedit docker-compose.yaml
services:
nginx:
image: nginx:latest
volumes:
- ./app/index.html:/app/index.html
- ./default.conf:/etc/nginx/conf.d/default.conf
labels:
- "traefik.enable=true"
- "traefik.http.routers.nginx-test1.rule=Host(`test1.server.local`)"
- "traefik.http.services.nginx-test1.loadbalancer.server.port=8080"
- "traefik.docker.network=traefik_default"
networks:
- traefik_default
- test1
httpd:
image: httpd:latest
volumes:
- ./app/index.html:/usr/local/apache2/htdocs/index.html
networks:
- test1
networks:
traefik_default:
external: true
test1:
internal: true
# mcedit default.conf
server {
listen 8080;
server_name _;
root /app;
index index.php index.html;
location / {
proxy_pass http://httpd:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# mcedit app/index.html
It's Container for project test1
Запускаем этот проект:
# docker compose up
В веб интерфейсе Traefik, в разделе HTTP появится запись:
Host(`test1.server.local`) http nginx-test1@docker nginx-test1Он по меткам в docker-compose проекта test1 автоматом подхватил настройки и включил проксирование всех запросов к домену test1.server.local в контейнер nginx-test1. При этом сам проект test1 внутри себя взаимодействует по своей внутренней сети test1, а с Traefik по сети traefik_default, которая является внешней для приёма запросов извне.
Теперь можно скопировать проект test1, изменить в нём имя домена и имя внутренней сети на test2 и запустить. Traefik автоматом подцепит этот проект и будет проксировать запросы к test2.server.local в nginx-test2. Работу этой схемы легко проверить, зайдя откуда-то извне браузером на test1.server.local и test2.server.local. Вы получите соответствующую страницу index.html от запрошенного проекта.
К Traefik легко добавить автоматическое получение TLS сертификатов от Let's Encrypt. Примеров в сети и документации много, настроить не составляет проблемы. Не стал показывать этот пример, так как не уместил бы его в формат заметки. Мне важно было показать суть - запустив один раз Traefik, можно его больше не трогать. По меткам в контейнерах он будет автоматом настраивать проксирование. В некоторых ситуациях это очень удобно.
#webserver #traefik #devops
На прошлой неделе смотрел видео про необычную систему под названием Pangolin. Не стал про него упоминать, потому что толком не понял, что это за штука, хоть и подозревал, что что-то полезное. В итоге я её развернул, разобрался, как работает, и теперь расскажу своими словами. Это очень крутой и полезный софт, который, думаю, многим пригодится.
Pangolin - обратный прокси на базе Traefik со своей системой аутентификации или IAM (Identity and Access Management). Он способен объединять разрозненные веб сервера с помощью встроенной интеграции с Wireguard. Расскажу сразу на конкретном примере, как это работает.
Допустим у вас есть веб сервер с каким-то сайтом или другим веб-приложением, к которому вы хотите ограничить доступ, так как у него нет своей аутентификации, или вы просто хотите его скрыть от посторонних глаз. Рассказываю по шагам, что вам нужно будет сделать.
1️⃣ Покупаете или создаёте любую VPS с внешним IP и настроенной DNS записью. Устанавливаете туда Pangolin.
2️⃣ Создаёте в веб панели Pangolin так называемый сайт, что на самом деле означает отдельный веб сервер.
3️⃣ Получаете в Pangolin параметры подключения внешнего веб сервера к серверу с Pangolin. Он может использовать как стандартный WireGuard клиент, так и свой собственный под названием Newt. Это консольная программа, не требующая для установки туннеля прав root. В Pangolin вы получите готовую строку подключения типа:
для подключения веб сервера к Pangolin.
4️⃣ После того, как веб сервер подключится к Pangolin, создаёте у него в веб интерфейсе новый ресурс, который по сути является сайтом, к которому нужно ограничить доступ. Указываете URL, по которому он должен отвечать, IP адрес и порт на веб сервере, куда будут проксироваться запросы.
5️⃣ Меняете DNS запись сайта на IP адрес сервера Pangolin. Теперь он будет перенаправлять все запросы через WG туннель настроенного урла на веб сервер. То есть работает как обычный обратный прокси, только все запросы к веб серверу заворачивает в VPN.
6️⃣ В свойствах сайта в веб интерфейсе Pangolin настраиваете параметры доступа. Это может быть пользователь или роль на самом Pangolin, одиночный пароль или 6-ти значный PIN код.
7️⃣ Теперь при открытие настроенного урла, запрос будет уходить на сервер Pangolin. После успешной аутентификации запрос будет перенаправлен на веб сервер.
Всё это работает по HTTPS, сертификаты Let's Encrypt получаются автоматически. Сервер Pangolin собран в Docker контейнеры. Можно запускать его вручную через Docker Compose или использовать готовый установщик:
Я развернул, довольно быстро разобрался и закрыл аутентификацией тестовый сайт, который запустил на этом же VPS через Nginx на других портах. Каких-то особых проблем не было.
Я не раз видел в чате вопросы на тему того, как закрыть аутентификацией сайт, в котором её нет. До этого я рекомендовал взять Authentik, настроить там интеграцию с каким-то обратным прокси и его basic_auth и таким образом закрыть доступ. Но этот путь гораздо сложнее того, что я описал сейчас. Тут всё проще и быстрее. Разворачиваете Pangolin, создаёте пользователей, настраиваете проксирование и закрываете доступ к сайту.
⇨ 🌐 Сайт / Исходники / Видеообзор
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#webserver #wireguard #traefik
Pangolin - обратный прокси на базе Traefik со своей системой аутентификации или IAM (Identity and Access Management). Он способен объединять разрозненные веб сервера с помощью встроенной интеграции с Wireguard. Расскажу сразу на конкретном примере, как это работает.
Допустим у вас есть веб сервер с каким-то сайтом или другим веб-приложением, к которому вы хотите ограничить доступ, так как у него нет своей аутентификации, или вы просто хотите его скрыть от посторонних глаз. Рассказываю по шагам, что вам нужно будет сделать.
# newt --id qqsyaa51zaovqdn --secret wyfbohgwk1uohzj2u8n2t4xn9gny9czgw7jmx3dk1nys755r --endpoint https://336261.simplecloud.ru
для подключения веб сервера к Pangolin.
Всё это работает по HTTPS, сертификаты Let's Encrypt получаются автоматически. Сервер Pangolin собран в Docker контейнеры. Можно запускать его вручную через Docker Compose или использовать готовый установщик:
# wget -O installer "https://github.com/fosrl/pangolin/releases/download/1.0.0-beta.8/installer_linux_amd64" && chmod +x ./installer
Я развернул, довольно быстро разобрался и закрыл аутентификацией тестовый сайт, который запустил на этом же VPS через Nginx на других портах. Каких-то особых проблем не было.
Я не раз видел в чате вопросы на тему того, как закрыть аутентификацией сайт, в котором её нет. До этого я рекомендовал взять Authentik, настроить там интеграцию с каким-то обратным прокси и его basic_auth и таким образом закрыть доступ. Но этот путь гораздо сложнее того, что я описал сейчас. Тут всё проще и быстрее. Разворачиваете Pangolin, создаёте пользователей, настраиваете проксирование и закрываете доступ к сайту.
⇨ 🌐 Сайт / Исходники / Видеообзор
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#webserver #wireguard #traefik
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM