Домены
Настройка доменов для вашего приложения Docker Compose.
При использовании Docker Compose добавление домена к сервису — простой процесс. Это руководство проведет вас через необходимые шаги настройки ручных доменов для вашего приложения.
Ключевые шаги:
- Добавьте сервис в
skitflow-network. - Используйте метки Traefik для настройки маршрутизации.
Внимание
Начиная с версии v0.7.0, Skitflow поддерживает домены нативно. Это означает, что вы можете настроить домен непосредственно в интерфейсе Skitflow, без выполнения остальных шагов — смотрите раздел доменов.
Пример сценария
Рассмотрим приложение с тремя компонентами: фронтенд, бэкенд и база данных. Мы начнем с базового файла Docker Compose и затем дополним его конфигурацией домена.
version: "3.8"
services:
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
volumes:
- ./frontend:/app
ports:
- "3000:3000"
depends_on:
- backend
backend:
build:
context: ./backend
dockerfile: Dockerfile
volumes:
- ./backend:/app
ports:
- "5000:5000"
environment:
- DATABASE_URL=postgres://postgres:password@database:5432/mydatabase
depends_on:
- database
database:
image: postgres:13
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: mydatabase
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:Шаг 1: Добавление сети
Сначала добавим skitflow-network к нашим сервисам:
version: "3.8"
services:
frontend:
# ... (предыдущая конфигурация)
networks:
- skitflow-network
backend:
# ... (предыдущая конфигурация)
networks:
- skitflow-network
database:
# ... (предыдущая конфигурация)
networks:
- skitflow-network
volumes:
db-data:
networks:
skitflow-network:
external: trueШаг 2: Настройка меток Traefik
Теперь добавим метки Traefik для маршрутизации доменов к нашим сервисам. Мы сосредоточимся на сервисах frontend и backend:
version: "3.8"
services:
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
volumes:
- ./frontend:/app
expose:
- 3000
depends_on:
- backend
networks:
- skitflow-network
labels:
- traefik.enable=true
- traefik.http.routers.frontend-app.rule=Host(`frontend.skitflow.cloud`)
- traefik.http.routers.frontend-app.entrypoints=web
- traefik.http.services.frontend-app.loadbalancer.server.port=3000
backend:
build:
context: ./backend
dockerfile: Dockerfile
volumes:
- ./backend:/app
expose:
- 5000
environment:
- DATABASE_URL=postgres://postgres:password@database:5432/mydatabase
depends_on:
- database
networks:
- skitflow-network
labels:
- traefik.enable=true
- traefik.http.routers.backend-app.rule=Host(`backend.skitflow.cloud`)
- traefik.http.routers.backend-app.entrypoints=web
- traefik.http.services.backend-app.loadbalancer.server.port=5000
database:
# ... (без изменений)
volumes:
db-data:
networks:
skitflow-network:
external: trueПонимание меток Traefik
traefik.enable=true— Включает маршрутизацию Traefik для сервиса.traefik.http.routers.<UNIQUE-RULE>.rule=Host('your-domain.skitflow.cloud')— Указывает домен для сервиса.traefik.http.routers.<UNIQUE-RULE>.entrypoints=web— Делает сервис доступным через HTTP.traefik.http.services.<UNIQUE-RULE>.loadbalancer.server.port=3000— Указывает порт, который ваш сервис использует внутри.
Примечание: Замените <UNIQUE-RULE> уникальным идентификатором для каждого сервиса (например, frontend-app, backend-app и т.д.).
Важные замечания
- Открытие портов: Используйте
exposeвместоports, чтобы ограничить доступ к портам сетью контейнера и избежать открытия на хост-машине. - Конфигурация DNS: Убедитесь, что вы создали
A-записи, указывающие на ваш домен, в настройках DNS-провайдера. - HTTPS: Для HTTPS вы можете использовать Let's Encrypt или другие SSL/TLS-сертификаты.
Развертывание
С этими конфигурациями вы готовы к развертыванию приложения с использованием Docker Compose. Эта настройка должна быть достаточной для запуска ваших сервисов с пользовательской маршрутизацией доменов через Traefik.