Разворачиваем несколько сервисов на одном сервере с Docker и Caddy

Внимание! Все сообщения на форуме проходят модерацию. Ваше сообщение появится после проверки.
Если у вас есть один сервер и несколько сервисов, например Nextcloud, Gitea и собственный сайт, можно разрулить их через Docker и Caddy, чтобы все работало одновременно и с HTTPS.

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 и без конфликта портов.
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
 

Стоимость разработки на 1С-Битрикс:

Индивидуальная разработка магазина

от 350 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Запуск сайта на готовом решении

от 150 000 руб. от 7-ми дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Мобильное приложение

от 400 000 руб. от 5-ти недель

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Сайт компании

от 300 000 руб. от 2-х недель

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Инфоресурс

от 300 000 руб. от 4-х недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

3D‑моделирование, визуализация

от 25 000 руб. от 3-х дней

По вашим фото, чертежам или описанию создадим 3D‑модели и отрендерим набор изображений для каталога товаров: общий вид, крупные планы и технические ракурсы или 360°‑обзор товара.