Caddy — современный веб-сервер и reverse-proxy, который:
Автоматически получает HTTPS через Let’s Encrypt.
Позволяет легко маршрутизировать запросы по доменам.
Поддерживает HTTP/2 и HTTP/3 без сложной настройки.
Идеально подходит для домашнего сервера с несколькими сервисами в Docker.
Предположим, у нас есть:
Nextcloud → внутренний порт 8080
Gitea → внутренний порт 3000
Произвольный сайт → внутренний порт 5000
Внешние пользователи будут заходить по поддоменам:
next.site.ru → Nextcloud
git.site.ru → Gitea
site.site.ru → сайт
Создаем файл docker-compose.yml:
| Код |
|---|
version: "3" services: nextcloud: image: nextcloud container_name: nextcloud ports: - "8080:80" volumes: - ./nextcloud-data:/var/www/html restart: always gitea: image: gitea/gitea container_name: gitea ports: - "3000:3000" - "222:22" volumes: - ./gitea-data:/data restart: always website: image: nginx:alpine container_name: website ports: - "5000:80" volumes: - ./website:/usr/share/nginx/html restart: always |
Volumes сохраняют данные контейнеров на хосте.
Ports — внутренние порты сервисов, они будут проксироваться Caddy.
Запускаем:
| Код |
|---|
docker-compose up -d |
Caddy будет слушать 80 и 443 и направлять трафик на нужный контейнер. Создаем файл Caddyfile:
| Код |
|---|
next.site.ru {
reverse_proxy 127.0.0.1:8080
}
git.site.ru {
reverse_proxy 127.0.0.1:3000
}
site.site.ru {
reverse_proxy 127.0.0.1:5000
} |
reverse_proxy — проксирует запросы на внутренние порты контейнеров.
Caddy автоматически получит SSL-сертификаты для всех поддоменов.
Устанавливаем Caddy на сервере:
| Код |
|---|
sudo apt install caddy sudo systemctl enable --now caddy |
Копируем Caddyfile в /etc/caddy/Caddyfile и перезапускаем:
| Код |
|---|
sudo systemctl reload caddy |
В Nextcloud добавляем next.site.ru в trusted_domains.
В Gitea прописываем ROOT_URL = https://git.site.ru.
Это нужно, чтобы сервисы корректно работали за прокси и HTTPS.
Готово!
Теперь:
https://next.site.ru → Nextcloud
https://git.site.ru → Gitea
https://site.site.ru → ваш сайт
Все сервисы работают на одном сервере, с HTTPS и без конфликта портов.