Last active
March 3, 2021 07:19
-
-
Save kinnalru/a3c6509827d169dd552b99b08ba28d63 to your computer and use it in GitHub Desktop.
docker-compose.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
version: "3.7" | |
x-base: &base | |
restart: unless-stopped | |
logging: | |
options: | |
max-size: '50m' | |
max-file: '3' | |
driver: json-file | |
services: | |
# Это наше классическое Rails-приложение | |
web: | |
<<: *base | |
image: docker.registry.example/project:${SERVICE_TAG-latest} | |
labels: | |
# Говорим что этот сервис нужно обслуживать нашим балансером - Traefik и конфигурируем его. | |
- "SERVICE_TAGS=traefik.enable=true, | |
traefik.http.routers.auth-edge.rule=Host(`web.example.com`), | |
traefik.http.routers.prod-web.tls=true, | |
traefik.http.routers.prod-web.entrypoints=websecure, | |
traefik.http.services.prod-web.loadbalancer.server.scheme=http, | |
monitoring" | |
- SERVICE_NAME=prod/web | |
# Настраиваем хелсчек который будет выполняться консулом | |
- SERVICE_CHECK_HTTP=/liveness | |
- SERVICE_CHECK_INTERVAL=15s | |
- SERVICE_CHECK_TIMEOUT=10s | |
- SERVICE_CHECK_DEREGISTER_AFTER=1m | |
ports: | |
- 80 | |
healthcheck: | |
# Этот хелсчек нужен только для деплоя чтоб определить готовность сервиса принять трафик | |
test: ["CMD", "curl", "-f", "http://localhost:80/readiness"] | |
interval: 10s | |
timeout: 30s | |
retries: 3 | |
start_period: 90s | |
volumes: | |
- type: tmpfs | |
target: /tmp | |
tmpfs: | |
size: 100000000 | |
# Это background-worker, например DelayedJob или Sidekiq | |
jobs: | |
<<: *base | |
image: docker.registry.example/project:${SERVICE_TAG-latest} | |
labels: | |
# Тут балансера уже нет, зато есть Прометей, который на том же консуле ищет с кого собирать метрики | |
- SERVICE_TAGS=monitoring | |
- SERVICE_NAME=prod/jobs | |
- SERVICE_CHECK_HTTP=/metrics | |
- SERVICE_CHECK_INTERVAL=15s | |
- SERVICE_CHECK_TIMEOUT=10s | |
- SERVICE_CHECK_DEREGISTER_AFTER=1m | |
ports: | |
- 80 | |
healthcheck: | |
# Этот хелсчек нужен только для деплоя чтоб определить готовность сервиса и перейти к деплою следующего контейнера | |
test: ["CMD", "curl", "-f", "http://localhost:80/metrics"] | |
interval: 10s | |
timeout: 30s | |
retries: 3 | |
start_period: 90s | |
volumes: | |
- type: tmpfs | |
target: /tmp | |
tmpfs: | |
size: 100000000 | |
command: ['bundle', 'exec', '/home/app/docker/start_worker.sh'] | |
# Это cron-like шедулер для периодических задач | |
rufus: | |
<<: *base | |
image: docker.registry.example/project:${SERVICE_TAG-latest} | |
labels: | |
# Тут балансера уже нет, зато есть Прометей, который на том же консуле ищет с кого собирать метрики | |
- SERVICE_TAGS=monitoring | |
- SERVICE_NAME=prod/rufus | |
- SERVICE_CHECK_HTTP=/metrics | |
- SERVICE_CHECK_INTERVAL=15s | |
- SERVICE_CHECK_TIMEOUT=10s | |
- SERVICE_CHECK_DEREGISTER_AFTER=1m | |
ports: | |
- 80 | |
healthcheck: | |
# Этот хелсчек нужен только для деплоя чтоб определить готовность сервиса и перейти к деплою следующего контейнера | |
test: ["CMD", "curl", "-f", "http://localhost:8080/metrics"] | |
interval: 10s | |
timeout: 30s | |
retries: 3 | |
start_period: 90s | |
volumes: | |
- type: tmpfs | |
target: /tmp | |
tmpfs: | |
size: 100000000 | |
command: ['bundle', 'exec', '/home/app/docker/start_rufus.sh'] | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment