transfer from private server/git server
This commit is contained in:
@@ -1,102 +1,157 @@
|
||||
# =============================================================================
|
||||
# docker-compose.yml — Infrastructure as Code de GestHub (Bloc 4 - C5).
|
||||
# =============================================================================
|
||||
# Décrit l'état désiré de l'infrastructure complète : services, réseau interne,
|
||||
# volumes persistants. Reproductible sur n'importe quelle machine Linux avec
|
||||
# Docker installé, via `docker compose up -d` (voir procédure de déploiement,
|
||||
# Bloc 2 - C2 "avant/après").
|
||||
#
|
||||
# Seul Caddy expose des ports publics — tous les autres services communiquent
|
||||
# uniquement via le réseau Docker interne `gesthub-net` (mitigation du risque
|
||||
# "exposition des ports internes", tableau OWASP du dossier technique).
|
||||
# =============================================================================
|
||||
|
||||
services:
|
||||
|
||||
# --- Tier présentation : reverse proxy + HTTPS automatique ---
|
||||
caddy:
|
||||
image: caddy:2.8-alpine
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- ./Caddyfile:/etc/caddy/Caddyfile:ro
|
||||
- caddy_data:/data
|
||||
- caddy_config:/config
|
||||
depends_on:
|
||||
- flask
|
||||
networks:
|
||||
- gesthub-net
|
||||
|
||||
# --- Tier applicatif : application Flask (routes/services/models) ---
|
||||
flask:
|
||||
build: ./web
|
||||
environment:
|
||||
- DB_HOST=mariadb
|
||||
- DB_USER=flaskuser
|
||||
- DB_PASSWORD=flaskpass
|
||||
- DB_NAME=flaskdb
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- ./web/.env
|
||||
depends_on:
|
||||
- mariadb
|
||||
mariadb:
|
||||
condition: service_healthy
|
||||
volumes:
|
||||
- ./web:/app
|
||||
ports:
|
||||
- "5000:5000"
|
||||
- uploads_data:/app/static/assets/uploads
|
||||
expose:
|
||||
- "5000"
|
||||
networks:
|
||||
- gesthub
|
||||
- gesthub-net
|
||||
|
||||
# --- Tier données : base applicative MariaDB ---
|
||||
mariadb:
|
||||
image: mariadb:latest
|
||||
image: mariadb:10.11
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=rootpass
|
||||
- MYSQL_DATABASE=flaskdb
|
||||
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD:-changeme}
|
||||
- MYSQL_DATABASE=gesthub
|
||||
- MYSQL_USER=flaskuser
|
||||
- MYSQL_PASSWORD=flaskpass
|
||||
- MYSQL_PASSWORD=${DB_PASSWORD:-changeme}
|
||||
volumes:
|
||||
- mariadb_data:/var/lib/mysql
|
||||
- ./web/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
|
||||
healthcheck:
|
||||
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 6
|
||||
expose:
|
||||
- "3306"
|
||||
networks:
|
||||
- gesthub
|
||||
|
||||
mattermost:
|
||||
image: mattermost/mattermost-team-edition:latest
|
||||
ports:
|
||||
- "8065:8065"
|
||||
environment:
|
||||
- MM_SQLSETTINGS_DRIVERNAME=postgres
|
||||
- MM_SQLSETTINGS_DATASOURCE=postgres://mmuser:mmuserpass@db:5432/mattermost?sslmode=disable
|
||||
- MM_SERVICESETTINGS_SITEURL=https://mattermost.ninolbt.com
|
||||
|
||||
depends_on:
|
||||
- db
|
||||
volumes:
|
||||
- mattermost_data:/mattermost/data
|
||||
networks:
|
||||
- gesthub
|
||||
|
||||
db:
|
||||
image: postgres:13
|
||||
environment:
|
||||
- POSTGRES_DB=mattermost
|
||||
- POSTGRES_USER=mmuser
|
||||
- POSTGRES_PASSWORD=mmuserpass
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- gesthub
|
||||
- gesthub-net
|
||||
|
||||
# --- Tier identité : SSO Keycloak (realm gesthub) ---
|
||||
keycloak:
|
||||
image: quay.io/keycloak/keycloak:22.0.5
|
||||
image: quay.io/keycloak/keycloak:24.0.3
|
||||
restart: unless-stopped
|
||||
command:
|
||||
- start-dev
|
||||
- start
|
||||
- --hostname=keycloak.ninolbt.com
|
||||
- --hostname-strict=false
|
||||
- --hostname-strict-https=false
|
||||
- --proxy=edge
|
||||
- --proxy-headers=xforwarded
|
||||
environment:
|
||||
- KEYCLOAK_ADMIN=admin
|
||||
- KEYCLOAK_ADMIN_PASSWORD=admin
|
||||
- KEYCLOAK_ADMIN=${KC_ADMIN_USER:-admin}
|
||||
- KEYCLOAK_ADMIN_PASSWORD=${KC_ADMIN_PASSWORD:-changeme}
|
||||
- KC_DB=postgres
|
||||
- KC_DB_URL_HOST=keycloak-db
|
||||
- KC_DB_URL_DATABASE=keycloak
|
||||
- KC_DB_USERNAME=keycloak
|
||||
- KC_DB_PASSWORD=keycloakpass
|
||||
ports:
|
||||
- "8081:8080"
|
||||
- KC_DB_PASSWORD=${KC_DB_PASSWORD:-changeme}
|
||||
depends_on:
|
||||
- keycloak-db
|
||||
volumes:
|
||||
- keycloak_data:/opt/keycloak/data
|
||||
expose:
|
||||
- "8080"
|
||||
networks:
|
||||
- gesthub
|
||||
- gesthub-net
|
||||
|
||||
keycloak-db:
|
||||
image: postgres:13
|
||||
image: postgres:16-alpine
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_DB=keycloak
|
||||
- POSTGRES_USER=keycloak
|
||||
- POSTGRES_PASSWORD=keycloakpass
|
||||
- POSTGRES_PASSWORD=${KC_DB_PASSWORD:-changeme}
|
||||
volumes:
|
||||
- keycloakdb_data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- gesthub
|
||||
- gesthub-net
|
||||
|
||||
# --- Chat & Kanban : réutilisation d'outils matures plutôt que
|
||||
# réimplémentation (choix DRY documenté, Bloc 2 - C6) ---
|
||||
#
|
||||
# Déploiement cible = Raspberry Pi (ARM64/aarch64, OS 64 bits) : toutes les
|
||||
# images de ce fichier sont multi-arch officielles (Caddy, MariaDB,
|
||||
# Keycloak, Postgres) SAUF mattermost/mattermost-team-edition, qui n'existe
|
||||
# qu'en linux/amd64 (voir issue mattermost/mattermost#21979 — aucune image
|
||||
# ARM officielle à ce jour). On utilise donc un build communautaire arm64,
|
||||
# à la même version (9.11), quasi drop-in (mêmes variables d'env
|
||||
# MM_SQLSETTINGS_*, mêmes ports/volumes) :
|
||||
# https://github.com/ngrie/mattermost-team-edition-arm-docker
|
||||
# Sur un hôte amd64 (CI, dev sur PC), repasser à l'image officielle
|
||||
# mattermost/mattermost-team-edition:9.11.
|
||||
mattermost:
|
||||
image: ngrie/mattermost-team-edition-arm:9.11
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- MM_SQLSETTINGS_DRIVERNAME=postgres
|
||||
- MM_SQLSETTINGS_DATASOURCE=postgres://mmuser:${MM_DB_PASSWORD:-changeme}@mattermost-db:5432/mattermost?sslmode=disable
|
||||
- MM_SERVICESETTINGS_SITEURL=https://chat.ninolbt.com
|
||||
depends_on:
|
||||
- mattermost-db
|
||||
volumes:
|
||||
- mattermost_data:/mattermost/data
|
||||
expose:
|
||||
- "8065"
|
||||
networks:
|
||||
- gesthub-net
|
||||
|
||||
mattermost-db:
|
||||
image: postgres:16-alpine
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_DB=mattermost
|
||||
- POSTGRES_USER=mmuser
|
||||
- POSTGRES_PASSWORD=${MM_DB_PASSWORD:-changeme}
|
||||
volumes:
|
||||
- mattermostdb_data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- gesthub-net
|
||||
|
||||
networks:
|
||||
gesthub:
|
||||
gesthub-net:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
mariadb_data:
|
||||
caddy_data:
|
||||
caddy_config:
|
||||
uploads_data:
|
||||
keycloakdb_data:
|
||||
mattermost_data:
|
||||
postgres_data:
|
||||
keycloak_data:
|
||||
keycloakdb_data:
|
||||
mattermostdb_data:
|
||||
|
||||
Reference in New Issue
Block a user