Files

124 lines
4.2 KiB
YAML
Raw Permalink Normal View History

2026-09-04 14:50:34 +08:00
# 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