add docker compose
This commit is contained in:
1 parent
88db93b07f
commit
f22f0f2ccc
14 files changed
+33251
No files matched your search
@@ -0,0 +1,335 @@
|
||||
name: booksync
|
||||
volumes:
|
||||
prometheus-data:
|
||||
grafana-data:
|
||||
postgres-data:
|
||||
pgadmin-data:
|
||||
flower-data:
|
||||
|
||||
networks:
|
||||
booksync-front:
|
||||
booksync-back:
|
||||
|
||||
services:
|
||||
|
||||
####################################
|
||||
# Tableau de bord Plotly Dash : démonstration autonome
|
||||
#
|
||||
dash:
|
||||
image: booksync-dash:latest
|
||||
hostname: booksync-dash
|
||||
ports:
|
||||
- "8050:8050"
|
||||
networks:
|
||||
- booksync-front
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD
|
||||
- python
|
||||
- -c
|
||||
- "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8050/health', timeout=3)"
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 10s
|
||||
restart: unless-stopped
|
||||
|
||||
####################################
|
||||
# Prometheus enregistre des métriques en temps réel dans une base de données de séries temporelles.
|
||||
# Pour enregistrer les métrique, Prometheus se base sur le contenu de point d'entrée exposé à l'aide du protocole HTTP (/metrics).
|
||||
# Son rôle est de collecter les métriques de chaque service.
|
||||
#
|
||||
prometheus:
|
||||
image: prom/prometheus:latest
|
||||
hostname: prometheus
|
||||
container_name: prometheus
|
||||
volumes:
|
||||
- prometheus-data:/prometheus
|
||||
- ./_docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
|
||||
- ./_docker/alertmanager/alert.rules/alerts.rules.yml:/alertmanager/alert.rules/alerts.rules.yml
|
||||
command:
|
||||
- '--config.file=/etc/prometheus/prometheus.yml'
|
||||
- '--storage.tsdb.path=/prometheus'
|
||||
- '--storage.tsdb.retention.time=365d'
|
||||
ports:
|
||||
- 9090:9090
|
||||
networks:
|
||||
- booksync-back
|
||||
restart: always
|
||||
|
||||
####################################
|
||||
# Exporte les métriques de la machine
|
||||
#
|
||||
node_exporter:
|
||||
image: prom/node-exporter:latest
|
||||
hostname: node-exporter
|
||||
container_name: node-exporter
|
||||
ports:
|
||||
- 9100:9100
|
||||
networks:
|
||||
- booksync-back
|
||||
restart: always
|
||||
|
||||
####################################
|
||||
# Gestionnaire d'alertes
|
||||
#
|
||||
alertmanager:
|
||||
image: prom/alertmanager:latest
|
||||
hostname: alertmanager
|
||||
container_name: alertmanager
|
||||
volumes:
|
||||
- ./_docker/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml
|
||||
- ./_docker/alertmanager/templates/default.tmpl:/etc/alertmanager/templates/default.tmpl
|
||||
command:
|
||||
- '--config.file=/etc/alertmanager/alertmanager.yml'
|
||||
ports:
|
||||
- 9093:9093
|
||||
networks:
|
||||
- booksync-back
|
||||
restart: always
|
||||
|
||||
####################################
|
||||
# Permet la visualisation de données. Il permet de réaliser des tableaux de bord et des graphiques depuis plusieurs sources dont des bases de données temporelles
|
||||
# Monitoring des métriques
|
||||
#
|
||||
grafana:
|
||||
image: grafana/grafana:latest
|
||||
hostname: grafana
|
||||
container_name: grafana
|
||||
environment:
|
||||
- GF_PATHS_CONFIG=/etc/grafana/grafana.ini
|
||||
volumes:
|
||||
- grafana-data:/var/lib/grafana
|
||||
- ./_docker/grafana/datasource.yml:/etc/grafana/provisioning/datasources/datasource.yml
|
||||
- ./_docker/grafana/dashboards.yml:/etc/grafana/provisioning/dashboards/dashboards.yml
|
||||
- ./_docker/grafana/grafana.ini:/etc/grafana/grafana.ini
|
||||
- ./_docker/grafana/dashboards:/var/lib/grafana/dashboards
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- booksync-back
|
||||
depends_on:
|
||||
- prometheus
|
||||
restart: always
|
||||
|
||||
####################################
|
||||
# Base de donnée relationnelle
|
||||
#
|
||||
postgres:
|
||||
image: pgvector/pgvector:pg17
|
||||
hostname: postgres
|
||||
container_name: postgres
|
||||
environment:
|
||||
POSTGRES_DB: postgres
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
volumes:
|
||||
- postgres-data:/var/lib/postgresql/data
|
||||
- ./_docker/postgres/create_tables.sql:/docker-entrypoint-initdb.d/create_tables.sql
|
||||
healthcheck:
|
||||
test: [ "CMD", "pg_isready", "-q", "-d", "postgres", "-U", "postgres" ]
|
||||
timeout: 45s
|
||||
interval: 10s
|
||||
retries: 10
|
||||
ports:
|
||||
- 5432:5432
|
||||
networks:
|
||||
- booksync-back
|
||||
restart: unless-stopped
|
||||
|
||||
####################################
|
||||
# Exporte des métriques de la base de données
|
||||
#
|
||||
postgres-exporter:
|
||||
image: bitnami/postgres-exporter:latest
|
||||
hostname: postgres-exporter
|
||||
container_name: postgres-exporter
|
||||
environment:
|
||||
DATA_SOURCE_URI: postgres:5432/postgres?sslmode=disable
|
||||
DATA_SOURCE_USER: postgres
|
||||
DATA_SOURCE_PASS: postgres
|
||||
ports:
|
||||
- 9187:9187
|
||||
networks:
|
||||
- booksync-back
|
||||
depends_on:
|
||||
- postgres
|
||||
restart: always
|
||||
|
||||
####################################
|
||||
# Administration de la base de donnée relationnelle
|
||||
#
|
||||
pgadmin:
|
||||
image: dpage/pgadmin4:latest
|
||||
hostname: pgadmin
|
||||
container_name: pgadmin
|
||||
environment:
|
||||
PGADMIN_DEFAULT_EMAIL: admin@domain.com
|
||||
PGADMIN_DEFAULT_PASSWORD: admin
|
||||
PGADMIN_CONFIG_SERVER_MODE: 'False'
|
||||
volumes:
|
||||
- pgadmin-data:/var/lib/pgadmin
|
||||
ports:
|
||||
- 5050:80
|
||||
networks:
|
||||
- booksync-back
|
||||
depends_on:
|
||||
- postgres
|
||||
restart: unless-stopped
|
||||
|
||||
####################################
|
||||
# Agent de messages pour celery (broker), il est utilisé comme middleware entre des producers et des workers
|
||||
# Exporte ses propres métriques
|
||||
#
|
||||
rabbitmq:
|
||||
image: rabbitmq:3-management
|
||||
hostname: rabbitmq
|
||||
container_name: rabbitmq
|
||||
healthcheck:
|
||||
test: ["CMD", "rabbitmq-diagnostics", "-q", "check_port_connectivity"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
start_period: 15s
|
||||
ports:
|
||||
- 5672:5672
|
||||
- 15672:15672
|
||||
networks:
|
||||
- booksync-back
|
||||
restart: unless-stopped
|
||||
|
||||
####################################
|
||||
# Mémoire cache pour celery (result backend), il est utilisé comme middleware entre des producers et des workers
|
||||
#
|
||||
redis:
|
||||
image: redis:latest
|
||||
hostname: redis
|
||||
container_name: redis
|
||||
environment:
|
||||
- ALLOW_EMPTY_PASSWORD=yes
|
||||
healthcheck:
|
||||
test: ["CMD", "redis-cli", "ping"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
start_period: 5s
|
||||
ports:
|
||||
- 6379:6379
|
||||
networks:
|
||||
- booksync-back
|
||||
restart: unless-stopped
|
||||
|
||||
####################################
|
||||
# Exporteur des métriques redis
|
||||
#
|
||||
redis-exporter:
|
||||
image: bitnami/redis-exporter:latest
|
||||
hostname: redis-exporter
|
||||
container_name: redis-exporter
|
||||
environment:
|
||||
REDIS_ADDR: redis://redis:6379
|
||||
ports:
|
||||
- 9121:9121
|
||||
networks:
|
||||
- booksync-back
|
||||
depends_on:
|
||||
- redis
|
||||
restart: always
|
||||
|
||||
####################################
|
||||
# Exporteur des métriques celery & monitoring des workers
|
||||
#
|
||||
flower:
|
||||
image: mher/flower:latest
|
||||
hostname: flower
|
||||
container_name: flower
|
||||
environment:
|
||||
CELERY_BROKER_URL: "pyamqp://guest:guest@rabbitmq:5672//"
|
||||
CELERY_RESULT_BACKEND: "redis://redis:6379/0"
|
||||
FLOWER_BROKER_API: "http://guest:guest@rabbitmq:15672/api/"
|
||||
FLOWER_PORT: "5555"
|
||||
FLOWER_PERSISTENT: "true"
|
||||
ports:
|
||||
- 5555:5555
|
||||
networks:
|
||||
- booksync-back
|
||||
depends_on:
|
||||
rabbitmq:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
restart: always
|
||||
|
||||
####################################
|
||||
# API REST basée sur FastAPI
|
||||
# Contiens :
|
||||
# - des requêtes à la base de donnée relationnelle
|
||||
# Producteur de tâches celery
|
||||
#
|
||||
api:
|
||||
image: booksync-api:latest
|
||||
hostname: booksync-api
|
||||
command: [
|
||||
"uvicorn",
|
||||
"api:app",
|
||||
"--host",
|
||||
"0.0.0.0",
|
||||
"--port",
|
||||
"5001",
|
||||
"--workers",
|
||||
"2",
|
||||
"--log-level",
|
||||
"info"]
|
||||
environment:
|
||||
POSTGRES_DATABASE_URL: postgresql+asyncpg://postgres:postgres@postgres/postgres
|
||||
CELERY_BROKER_URL: pyamqp://guest:guest@rabbitmq:5672//
|
||||
CELERY_RESULT_BACKEND_URL: redis://redis:6379/0
|
||||
MANGACOLLEC_ID: 38fee110b53a75af6cc72f6fb66fa504fc6241e566788f4b2f5b21c25ba2fefb
|
||||
MANGACOLLEC_SECRET: 060658630f7d199c19ab1cf34ed4e50935c748267e318a24e048d6ab45871da2
|
||||
ports:
|
||||
- 5001:5001
|
||||
networks:
|
||||
- booksync-back
|
||||
- booksync-front
|
||||
depends_on:
|
||||
- rabbitmq
|
||||
- redis
|
||||
restart: always
|
||||
|
||||
####################################
|
||||
# Worker basé sur celery
|
||||
# 5 Replicas sont créer
|
||||
#
|
||||
worker:
|
||||
image: booksync-worker:latest
|
||||
deploy:
|
||||
replicas: 5
|
||||
command: [
|
||||
"celery",
|
||||
"-A",
|
||||
"tasks:app",
|
||||
"worker",
|
||||
"--pool",
|
||||
"prefork",
|
||||
"-Q",
|
||||
"booksync-worker",
|
||||
"--concurrency=3",
|
||||
"-n",
|
||||
"booksync-worker@%h",
|
||||
"--loglevel",
|
||||
"INFO"]
|
||||
environment:
|
||||
CELERY_BROKER_URL: pyamqp://guest:guest@rabbitmq:5672//
|
||||
CELERY_RESULT_BACKEND_URL: redis://redis:6379/0
|
||||
MANGACOLLEC_ID: 38fee110b53a75af6cc72f6fb66fa504fc6241e566788f4b2f5b21c25ba2fefb
|
||||
MANGACOLLEC_SECRET: 060658630f7d199c19ab1cf34ed4e50935c748267e318a24e048d6ab45871da2
|
||||
networks:
|
||||
- booksync-back
|
||||
depends_on:
|
||||
flower:
|
||||
condition: service_started
|
||||
rabbitmq:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
restart: always
|
||||
Reference in new issue
Block a user