Files
chongming-core/deploy/docker-compose.yml
T
2026-09-04 14:50:34 +08:00

124 lines
4.2 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.
# Redis / PostgreSQL / MinIO / Mosquitto(MQTT) / Zenoh Router / Caddy 服务 Compose 配置
# 数据目录: ./data/{redis,postgres,minio,mosquitto,zenoh,caddy} (相对本文件所在目录,持久化)
# 默认端口: redis 6379, postgres 5432, minio 9000/9001,
# mosquitto 1883, zenoh router 7447(tcp)/7447(udp)/8000,
# caddy 80/443(HTTP/HTTPS 统一入口)
services:
redis:
image: docker.io/library/redis:7-alpine
container_name: chongming-redis
restart: unless-stopped
command: redis-server --appendonly yes
ports:
- "6379:6379"
volumes:
- ./data/redis:/data
healthcheck:
test: [ "CMD", "redis-cli", "ping" ]
interval: 5s
timeout: 3s
retries: 5
postgres:
image: docker.io/library/postgres:16-alpine
container_name: chongming-postgres
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
ports:
- "5432:5432"
volumes:
- ./data/postgres:/var/lib/postgresql/data
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}" ]
interval: 5s
timeout: 3s
retries: 5
minio:
image: docker.io/minio/minio:latest
container_name: chongming-minio
restart: unless-stopped
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
ports:
- "9000:9000" # S3 API
- "9001:9001" # Web Console
volumes:
- ./data/minio:/data
healthcheck:
test: [ "CMD", "mc", "ready", "local" ]
interval: 5s
timeout: 3s
retries: 5
# MQTT Broker —— 项目默认内嵌 amqtt,若要切换为外部 broker,
# 需把 config.toml 的 [development.mqtt].use_embedded_broker 置为 false
# 并指向宿主 1883(如 host = "127.0.0.1")。
mosquitto:
image: docker.io/library/eclipse-mosquitto:2
container_name: chongming-mosquitto
restart: unless-stopped
ports:
- "1883:1883" # MQTT
volumes:
# 官方镜像默认要求 /mosquitto/config/mosquitto.conf 存在;
# 匿名 + 不持久化时,改用镜像自带的空配置文件即可。
- ./data/mosquitto:/mosquitto
environment:
# 匿名启动,无需授权;如需账号可在 config/mosquitto.conf 中配置
- MOSQUITTO_DISABLE_TLS=true
healthcheck:
test: [ "CMD-SHELL", "pkill -0 $$(pgrep mosquitto) || exit 1" ]
interval: 10s
timeout: 5s
retries: 3
# Zenoh Router —— 项目 zenoh 以 peer 模式连接 tcp/127.0.0.1:7447,
# 本容器作为 router 在 7447(tcp) 提供路由汇聚。
zenoh:
image: docker.io/eclipse/zenoh:latest
container_name: chongming-zenoh
restart: unless-stopped
ports:
- "7447:7447/tcp" # Zenoh 数据面
- "7447:7447/udp" # Zenoh scouting
# 使用镜像默认入口即可:eclipse/zenoh 默认以 router 模式启动 zenohd,
# 监听默认端口(7447 tcp/udp、8000)。旧写法硬编码 /usr/local/bin/zenohd
# 在 latest 镜像中路径不存在,会报 exec: no such file or directory。
healthcheck:
test: [ "CMD", "zenohd", "--help" ]
interval: 10s
timeout: 5s
retries: 3
# Caddy —— 统一 HTTP/HTTPS 反向代理入口(本地 IP + 自签证书)
# 反代: chongming Web(8000, 宿主机) / MinIO Console(9001) / MinIO API(9000)
# 配置在 ./caddy/Caddyfile,证书状态持久化于 ./data/caddy
caddy:
image: docker.io/library/caddy:2-alpine
container_name: chongming-caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "443:443/udp" # HTTP/3 (QUIC, 可选)
volumes:
- ./caddy/Caddyfile:/etc/caddy/Caddyfile:ro
- ./data/caddy:/data # 自签证书 / ACME 状态持久化
- ./data/caddy/config:/config
extra_hosts:
# Linux 下从容器访问宿主机(反代 systemd 托管的 chongming:8000)
- "host.docker.internal:host-gateway"
depends_on:
- minio
healthcheck:
test: [ "CMD-SHELL", "wget -qO- http://127.0.0.1:80 >/dev/null 2>&1 || exit 1" ]
interval: 10s
timeout: 3s
retries: 5