124 lines
4.2 KiB
YAML
124 lines
4.2 KiB
YAML
# 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
|