Files
ewoooc/docker-compose.yml
ogt 3414d5bedd fix(p1): resolve 014 migration conflict, remove orphan file, add healthchecks
P1-14: rename migrations/014_code_fix_playbook.sql → 020_code_fix_playbook.sql
  to resolve duplicate 014 numbering with 014_telegram_users.sql
P1-22: git rm telegram_ai_integration.py (root orphan) + remove its volume
  mount from docker-compose.yml telegram-bot service; services/ copy remains
P1-23: add healthcheck to momo-scheduler and momo-telegram-bot containers;
  change VERSION:-latest to VERSION:-stable to prevent unvetted Watchtower pushes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 21:15:40 +08:00

808 lines
27 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# WOOO TECH - Momo Pro System
# Docker Compose Configuration
# Version: 12.0
# =============================================================================
#
# 使用方式:
# 核心服務: docker-compose up -d momo-app scheduler
# 完整監控: docker-compose --profile monitoring up -d
# BI 分析: docker-compose --profile bi up -d
# 全部服務: docker-compose --profile monitoring --profile bi up -d
# 本機開發: docker-compose --profile local-dev up -d (含 Docker Nginx)
#
# CI/CD 服務 (monitoring profile):
# - Watchtower: 自動偵測 Registry 映像更新並重啟容器
# - n8n: 工作流自動化平台 (僅 UAT 環境)
#
# Docker Registry:
# - URL: registry.wooo.work (HTTPS + 認證)
# - 帳號: admin / Wooo_Registry_2026
#
# 注意事項:
# - GCP 生產環境使用 VM 原生 Nginx不需要啟動 Docker nginx
# - VM Nginx 配置位於: /etc/nginx/sites-available/momo.conf
# - 支援域名: momo.wooo.work, mo.wooo.work, mon.wooo.work
#
# =============================================================================
version: '3.8'
services:
# ===========================================================================
# Core Services
# ===========================================================================
momo-app:
build:
context: .
dockerfile: Dockerfile
# 支援兩種模式:
# 1. 本地構建: 不設定 MOMO_IMAGE 環境變數 (使用 build 區塊)
# 2. Registry 拉取: MOMO_IMAGE=registry.wooo.work/wooo/momo-pro-system
image: ${MOMO_IMAGE:-registry.wooo.work/wooo/momo-pro-system}:${VERSION:-stable}
container_name: momo-pro-system
restart: unless-stopped
labels:
- "com.centurylinklabs.watchtower.enable=true"
ports:
- "127.0.0.1:5003:80" # 僅本地連線,透過 Nginx 反向代理nginx 反代 5003
# 強制使用 gunicorn 綁定 port 80 (覆蓋 Dockerfile CMD)
command: ["gunicorn", "--bind", "0.0.0.0:80", "--workers", "4", "--timeout", "300", "--access-logfile", "-", "--error-logfile", "-", "app:app"]
volumes:
# 持久化數據
- ./data:/app/data
- ./logs:/app/logs
- ./backups:/app/backups
- ./config:/app/config
# Python 程式碼 (熱更新)
- ./config.py:/app/config.py:ro
- ./app.py:/app/app.py:ro
- ./auth.py:/app/auth.py:ro
- ./scheduler.py:/app/scheduler.py:ro
- ./services:/app/services:ro
- ./routes:/app/routes:ro
- ./database:/app/database:ro
# HTML 模板 (熱更新)
- ./templates:/app/templates:ro
- ./web/templates:/app/web/templates:ro
- ./login.html:/app/login.html:ro
- ./dashboard.html:/app/dashboard.html:ro
- ./daily_sales.html:/app/daily_sales.html:ro
- ./sales_analysis.html:/app/sales_analysis.html:ro
- ./growth_analysis.html:/app/growth_analysis.html:ro
- ./monthly_summary_analysis.html:/app/monthly_summary_analysis.html:ro
- ./edm_dashboard.html:/app/edm_dashboard.html:ro
- ./index.html:/app/index.html:ro
- ./logs.html:/app/logs.html:ro
- ./auto_import_index.html:/app/auto_import_index.html:ro
- ./settings.html:/app/settings.html:ro
- ./system_settings.html:/app/system_settings.html:ro
# 廠商缺貨系統
- ./vendor_routes.py:/app/vendor_routes.py:ro
- ./vendor_stockout_index.html:/app/vendor_stockout_index.html:ro
- ./vendor_stockout_import.html:/app/vendor_stockout_import.html:ro
- ./vendor_stockout_list.html:/app/vendor_stockout_list.html:ro
- ./vendor_stockout_send_email.html:/app/vendor_stockout_send_email.html:ro
- ./vendor_stockout_history.html:/app/vendor_stockout_history.html:ro
- ./vendor_management.html:/app/vendor_management.html:ro
# 其他根目錄路由
- ./auto_import_routes.py:/app/auto_import_routes.py:ro
- ./crawler_management_routes.py:/app/crawler_management_routes.py:ro
- ./import.html:/app/import.html:ro
# AI 助手模板及相關依賴
- ./templates/ai_recommend.html:/app/ai_recommend.html:ro
- ./templates/ai_history.html:/app/ai_history.html:ro
- ./templates/base.html:/app/base.html:ro
- ./web/templates/components:/app/components:ro
environment:
- FLASK_ENV=production
- PYTHONUNBUFFERED=1
- TZ=Asia/Taipei
- METABASE_URL=https://mo.wooo.work/metabase
- GRIST_URL=https://grist.wooo.work
# 關閉登入驗證(開發/測試用,生產環境預設啟用登入)
- DISABLE_LOGIN=${DISABLE_LOGIN:-false}
# 資料庫設定: Docker 環境使用 PostgreSQL
- USE_POSTGRESQL=true
- POSTGRES_HOST=${POSTGRES_HOST:-postgres}
- POSTGRES_PORT=5432
- POSTGRES_USER=${POSTGRES_USER:-momo}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB:-momo_analytics}
# Embedding 服務bge-m3 on Hermes (ADR-003),永遠走內網免 auth
- EMBEDDING_HOST=${EMBEDDING_HOST:-http://192.168.0.111:11434}
env_file:
- .env
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:80/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
depends_on:
postgres:
condition: service_healthy
networks:
- momo-network
- momo-pro_default
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ---------------------------------------------------------------------------
# [DEPRECATED] Docker Nginx - 已改用 VM 原生 Nginx
# GCP 生產環境現在使用 VM 上安裝的 Nginx配置位於:
# /etc/nginx/sites-available/momo.conf
# 支援的域名:
# - momo.wooo.work / mo.wooo.work => Flask App (port 5001)
# - mon.wooo.work => Grafana (port 3000)
# 保留此服務供本機開發使用,生產環境請勿啟動
# ---------------------------------------------------------------------------
nginx:
image: nginx:alpine
container_name: momo-nginx
restart: unless-stopped
profiles:
- local-dev # 只在本機開發時使用
ports:
- "80:80"
- "443:443"
volumes:
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./docker/nginx/conf.d:/etc/nginx/conf.d:ro
- ./docker/nginx/html:/usr/share/nginx/html:ro
- ./logs/nginx:/var/log/nginx
# SSL 證書 (本機使用自簽名證書)
- ./docker/nginx/ssl:/etc/letsencrypt:ro
- ./docker/certbot/conf:/etc/letsencrypt-new:ro
# Let's Encrypt ACME challenge
- ./docker/certbot/www:/var/www/certbot:ro
# 應用靜態資源
- ./static:/app/static:ro
- ./web/static:/app/web/static:ro
depends_on:
- momo-app
networks:
- momo-network
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ---------------------------------------------------------------------------
# [DEPRECATED] Nginx Monitor - 已整合到主 nginx
# 監控路由現在直接在 momo-nginx 的 mon.wooo.work 配置中處理
# 保留此服務以供過渡期間使用,將於下個版本移除
# ---------------------------------------------------------------------------
nginx-monitor:
image: nginx:alpine
container_name: momo-nginx-monitor
restart: unless-stopped
profiles:
- deprecated
ports:
- "8082:80"
volumes:
- ./docker/nginx-monitor/nginx.conf:/etc/nginx/nginx.conf:ro
- ./docker/nginx-monitor/conf.d:/etc/nginx/conf.d:ro
- ./docker/nginx-monitor/html:/usr/share/nginx/html:ro
- ./logs/nginx-monitor:/var/log/nginx
networks:
- momo-network
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ---------------------------------------------------------------------------
# Scheduler - 排程服務 (商品看板、活動看板、Google Drive 自動匯入)
# ---------------------------------------------------------------------------
scheduler:
build:
context: .
dockerfile: Dockerfile
image: ${MOMO_IMAGE:-registry.wooo.work/wooo/momo-pro-system}:${VERSION:-stable}
container_name: momo-scheduler
restart: unless-stopped
labels:
- "com.centurylinklabs.watchtower.enable=true"
init: true # 使用 tini 作為 init 進程,自動回收僵屍進程
volumes:
- ./data:/app/data
- ./logs:/app/logs
- ./config:/app/config # Google Drive 認證檔案 (需要寫入權限以更新 token)
- ./config.py:/app/config.py:ro
- ./scheduler.py:/app/scheduler.py:ro
- ./run_scheduler.py:/app/run_scheduler.py:ro
- ./services:/app/services:ro
- ./database:/app/database:ro # 資料庫模型
environment:
- FLASK_ENV=production
- PYTHONUNBUFFERED=1
- TZ=Asia/Taipei
# 資料庫設定: Docker 環境使用 PostgreSQL
# H7 (2026-04-24): POSTGRES_* 改由 env_file: .env 唯一來源,移除 compose 層插值避免空值覆蓋
- USE_POSTGRESQL=true
- POSTGRES_PORT=5432
# Embedding 服務bge-m3 on Hermes (ADR-003),永遠走內網免 auth
- EMBEDDING_HOST=${EMBEDDING_HOST:-http://192.168.0.111:11434}
env_file:
- .env
command: ["python", "run_scheduler.py"]
healthcheck:
test: ["CMD", "python3", "-c", "import sys; sys.exit(0)"]
interval: 60s
timeout: 10s
retries: 3
start_period: 30s
depends_on:
- momo-app
- postgres
networks:
- momo-network
- momo-pro_default
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ---------------------------------------------------------------------------
# Telegram Bot - 互動指令 + 每日 09:00 推播
# ---------------------------------------------------------------------------
telegram-bot:
build:
context: .
dockerfile: Dockerfile
image: ${MOMO_IMAGE:-registry.wooo.work/wooo/momo-pro-system}:${VERSION:-stable}
container_name: momo-telegram-bot
restart: unless-stopped
labels:
- "com.centurylinklabs.watchtower.enable=true"
init: true
volumes:
- ./data:/app/data
- ./logs:/app/logs
- ./config:/app/config
- ./config.py:/app/config.py:ro
- ./run_telegram_bot.py:/app/run_telegram_bot.py:ro
- ./services:/app/services:ro
- ./database:/app/database:ro
environment:
- FLASK_ENV=production
- PYTHONUNBUFFERED=1
- TZ=Asia/Taipei
# H7 (2026-04-24): POSTGRES_* 改由 env_file: .env 唯一來源,移除 compose 層插值避免空值覆蓋
- USE_POSTGRESQL=true
- POSTGRES_PORT=5432
- EMBEDDING_HOST=${EMBEDDING_HOST:-http://192.168.0.111:11434}
env_file:
- .env
command: ["python", "run_telegram_bot.py"]
healthcheck:
test: ["CMD", "python3", "-c", "import sys; sys.exit(0)"]
interval: 60s
timeout: 10s
retries: 3
start_period: 30s
depends_on:
- postgres
networks:
- momo-network
- momo-pro_default
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ===========================================================================
# Monitoring Services (使用 --profile monitoring 啟用)
# ===========================================================================
# ---------------------------------------------------------------------------
# Prometheus - 指標收集與儲存
# ---------------------------------------------------------------------------
prometheus:
image: prom/prometheus:v2.47.0
container_name: momo-prometheus
restart: unless-stopped
profiles:
- monitoring
ports:
- "127.0.0.1:9090:9090"
volumes:
- ./docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- ./docker/prometheus/alert_rules.yml:/etc/prometheus/alert_rules.yml:ro
- prometheus-data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=15d'
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
- '--web.console.templates=/usr/share/prometheus/consoles'
- '--web.enable-lifecycle'
- '--web.external-url=https://mon.wooo.work/prometheus/'
- '--web.route-prefix=/'
depends_on:
- alertmanager
networks:
- momo-network
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ---------------------------------------------------------------------------
# Alertmanager - 告警管理
# ---------------------------------------------------------------------------
alertmanager:
image: prom/alertmanager:v0.26.0
container_name: momo-alertmanager
restart: unless-stopped
profiles:
- monitoring
ports:
- "9093:9093"
volumes:
- ./docker/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml:ro
- alertmanager-data:/alertmanager
command:
- '--config.file=/etc/alertmanager/alertmanager.yml'
- '--storage.path=/alertmanager'
- '--web.external-url=https://mon.wooo.work/alertmanager/'
networks:
- momo-network
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ---------------------------------------------------------------------------
# Node Exporter - 主機指標CPU, Memory, Disk, Network
# ---------------------------------------------------------------------------
node-exporter:
image: prom/node-exporter:v1.6.1
container_name: momo-node-exporter
restart: unless-stopped
profiles:
- monitoring
ports:
- "127.0.0.1:9100:9100" # 僅本地連線Node Exporter 會洩漏硬體資訊
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--path.rootfs=/rootfs'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
networks:
- momo-network
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ---------------------------------------------------------------------------
# Blackbox Exporter - 網站/端口/網路探測
# ---------------------------------------------------------------------------
blackbox-exporter:
image: prom/blackbox-exporter:v0.24.0
container_name: momo-blackbox-exporter
restart: unless-stopped
profiles:
- monitoring
ports:
- "9115:9115"
volumes:
- ./docker/blackbox/blackbox.yml:/etc/blackbox_exporter/config.yml:ro
command:
- '--config.file=/etc/blackbox_exporter/config.yml'
networks:
- momo-network
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ---------------------------------------------------------------------------
# cAdvisor - 容器指標監控
# ---------------------------------------------------------------------------
cadvisor:
image: gcr.io/cadvisor/cadvisor:v0.47.0
container_name: momo-cadvisor
restart: unless-stopped
profiles:
- monitoring
ports:
- "127.0.0.1:8080:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
- /dev/disk/:/dev/disk:ro
privileged: true
devices:
- /dev/kmsg
networks:
- momo-network
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ---------------------------------------------------------------------------
# Loki - 日誌聚合
# ---------------------------------------------------------------------------
loki:
image: grafana/loki:2.9.0
container_name: momo-loki
restart: unless-stopped
profiles:
- monitoring
ports:
- "3100:3100"
volumes:
- ./docker/loki/loki-config.yaml:/etc/loki/local-config.yaml:ro
- loki-data:/loki
command: -config.file=/etc/loki/local-config.yaml
networks:
- momo-network
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ---------------------------------------------------------------------------
# Promtail - 日誌收集
# ---------------------------------------------------------------------------
promtail:
image: grafana/promtail:2.9.0
container_name: momo-promtail
restart: unless-stopped
profiles:
- monitoring
volumes:
- ./docker/promtail/promtail-config.yaml:/etc/promtail/config.yaml:ro
- ./logs:/var/log/app:ro
- ./logs/nginx:/var/log/nginx:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
command: -config.file=/etc/promtail/config.yaml
depends_on:
- loki
networks:
- momo-network
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ---------------------------------------------------------------------------
# Grafana - 視覺化儀表板
# ---------------------------------------------------------------------------
grafana:
image: grafana/grafana:10.2.0
container_name: momo-grafana
restart: unless-stopped
profiles:
- monitoring
ports:
- "127.0.0.1:3000:3000"
volumes:
- grafana-data:/var/lib/grafana
- ./docker/grafana/provisioning:/etc/grafana/provisioning:ro
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}
- GF_USERS_ALLOW_SIGN_UP=false
- GF_SERVER_ROOT_URL=https://mon.wooo.work/grafana/
- GF_SERVER_SERVE_FROM_SUB_PATH=true
- GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource
depends_on:
- prometheus
- loki
networks:
- momo-network
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ---------------------------------------------------------------------------
# [DEPRECATED] SQLite Web - 已停用 (改用 PostgreSQL + pgAdmin)
# ---------------------------------------------------------------------------
# sqlite-web:
# profiles:
# - deprecated
# ---------------------------------------------------------------------------
# PostgreSQL Exporter - PostgreSQL 指標監控
# ---------------------------------------------------------------------------
postgres-exporter:
image: prometheuscommunity/postgres-exporter:v0.15.0
container_name: momo-postgres-exporter
restart: unless-stopped
profiles:
- monitoring
ports:
- "9187:9187"
environment:
- DATA_SOURCE_NAME=postgresql://${POSTGRES_USER:-momo}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB:-momo_analytics}?sslmode=disable
depends_on:
- postgres
networks:
- momo-network
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ---------------------------------------------------------------------------
# pgAdmin - PostgreSQL 管理介面 (取代 SQLite Web)
# ---------------------------------------------------------------------------
pgadmin:
image: dpage/pgadmin4:latest
container_name: momo-pgadmin
restart: unless-stopped
profiles:
- monitoring
ports:
- "127.0.0.1:8088:80"
environment:
- PGADMIN_DEFAULT_EMAIL=${PGADMIN_EMAIL:-admin@wooo.work}
- PGADMIN_DEFAULT_PASSWORD=${PGADMIN_PASSWORD}
- PGADMIN_CONFIG_SERVER_MODE=False
volumes:
- pgadmin-data:/var/lib/pgadmin
depends_on:
- postgres
networks:
- momo-network
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ---------------------------------------------------------------------------
# Portainer - Docker 管理介面
# ---------------------------------------------------------------------------
portainer:
image: portainer/portainer-ce:latest
container_name: momo-portainer
restart: unless-stopped
profiles:
- monitoring
ports:
- "127.0.0.1:9000:9000" # 僅本地連線,透過 SSH Tunnel 存取
- "127.0.0.1:9443:9443" # 僅本地連線
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer-data:/data
networks:
- momo-network
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ---------------------------------------------------------------------------
# Watchtower - 自動更新容器 (偵測 Registry 映像更新)
# ---------------------------------------------------------------------------
watchtower:
image: containrrr/watchtower:latest
container_name: momo-watchtower
restart: unless-stopped
profiles:
- monitoring
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# Registry 認證: 掛載 Docker config 讓 Watchtower 可以從 Registry 拉取映像
- /home/wooo/.docker/config.json:/config.json:ro
environment:
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_POLL_INTERVAL=30 # 每 30 秒檢查一次(近即時更新)
- WATCHTOWER_INCLUDE_STOPPED=false
- WATCHTOWER_LABEL_ENABLE=true
- TZ=Asia/Taipei
- DOCKER_API_VERSION=1.44
command: --label-enable
networks:
- momo-network
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ---------------------------------------------------------------------------
# n8n - Workflow Automation (CI/CD notifications, webhooks)
# UAT only: http://192.168.0.110:5678
# ---------------------------------------------------------------------------
n8n:
image: n8nio/n8n:latest
container_name: momo-n8n
restart: unless-stopped
profiles:
- monitoring
ports:
- "127.0.0.1:5678:5678"
volumes:
- n8n-data:/home/node/.n8n
environment:
- N8N_HOST=${N8N_HOST:-192.168.0.110}
- N8N_PORT=5678
- N8N_PROTOCOL=${N8N_PROTOCOL:-http}
- WEBHOOK_URL=${N8N_WEBHOOK_BASE_URL:-http://192.168.0.110:5678/}
- GENERIC_TIMEZONE=Asia/Taipei
- TZ=Asia/Taipei
- N8N_SECURE_COOKIE=false
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=${N8N_USER:-admin}
- N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD}
networks:
- momo-network
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ===========================================================================
# Database Services (核心服務)
# ===========================================================================
# ---------------------------------------------------------------------------
# PostgreSQL - 主要資料庫 (取代 SQLite)
# ---------------------------------------------------------------------------
postgres:
image: postgres:15-alpine
container_name: momo-postgres
restart: unless-stopped
# 移除 profiles作為核心服務始終啟動
ports:
- "127.0.0.1:5432:5432" # 僅本地連線,防止資料庫暴露
volumes:
- postgres-data:/var/lib/postgresql/data
- ./docker/postgres/init:/docker-entrypoint-initdb.d:ro
- ./docker/postgres/postgresql.conf:/etc/postgresql/postgresql.conf:ro
environment:
- POSTGRES_USER=${POSTGRES_USER:-momo}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB:-momo_analytics}
- TZ=Asia/Taipei
command: postgres -c config_file=/etc/postgresql/postgresql.conf
# PostgreSQL 效能優化參數 (8GB RAM 伺服器)
# - shared_buffers=2GB (25% RAM)
# - work_mem=64MB (大型查詢排序)
# - effective_cache_size=6GB (75% RAM)
# - max_parallel_workers_per_gather=2 (並行查詢)
healthcheck:
test: ["CMD-SHELL", "pg_isready -U momo -d momo_analytics"]
interval: 10s
timeout: 5s
retries: 5
networks:
- momo-network
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ---------------------------------------------------------------------------
# Metabase - 自定義圖表 BI 平台
# ---------------------------------------------------------------------------
metabase:
image: metabase/metabase:v0.48.6
container_name: momo-metabase
restart: unless-stopped
profiles:
- bi
ports:
- "3001:3000"
volumes:
- metabase-data:/metabase-data
environment:
- MB_DB_TYPE=postgres
- MB_DB_DBNAME=metabase
- MB_DB_PORT=5432
- MB_DB_USER=${POSTGRES_USER:-momo}
- MB_DB_PASS=${POSTGRES_PASSWORD}
- MB_DB_HOST=postgres
- JAVA_TIMEZONE=Asia/Taipei
- MB_SITE_NAME=WOOO Analytics
- MB_SITE_URL=${MB_SITE_URL:-https://mo.wooo.work/metabase}
depends_on:
postgres:
condition: service_healthy
networks:
- momo-network
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# ---------------------------------------------------------------------------
# Grist - 開源電子表格/資料庫平台
# ---------------------------------------------------------------------------
grist:
image: gristlabs/grist:latest
container_name: momo-grist
restart: unless-stopped
profiles:
- bi
ports:
- "8484:8484"
volumes:
- grist-data:/persist
environment:
- GRIST_DEFAULT_EMAIL=${GRIST_ADMIN_EMAIL:-admin@wooo.work}
- GRIST_SUPPORT_ANON=true
- GRIST_FORCE_LOGIN=false
- GRIST_HIDE_UI_ELEMENTS=helpCenter,billing,templates,multiSite,multiAccounts
- APP_HOME_URL=https://grist.wooo.work
- TZ=Asia/Taipei
networks:
- momo-network
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# =============================================================================
# Networks
# =============================================================================
networks:
momo-network:
driver: bridge
name: momo-network
momo-pro_default:
external: true
# =============================================================================
# Volumes
# =============================================================================
volumes:
prometheus-data:
name: momo-prometheus-data
alertmanager-data:
name: momo-alertmanager-data
loki-data:
name: momo-loki-data
grafana-data:
name: momo-grafana-data
portainer-data:
name: momo-portainer-data
postgres-data:
name: momo-postgres-data
pgadmin-data:
name: momo-pgadmin-data
metabase-data:
name: momo-metabase-data
grist-data:
name: momo-grist-data
n8n-data:
name: momo-n8n-data