modify: 清除diskcache依赖

This commit is contained in:
2026-09-04 14:50:34 +08:00
parent eaf4089b6f
commit 93be99141f
15 changed files with 522 additions and 88 deletions
+15
View File
@@ -0,0 +1,15 @@
# redis
REDIS_PORT=6379
# postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=chongming
# minio
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin
# minio 对外端口
MINIO_API_PORT=9000
MINIO_CONSOLE_PORT=9001
+177
View File
@@ -0,0 +1,177 @@
# deploy 部署目录说明
本目录包含 chongming 应用在宿主机上的部署与运维相关文件。
## 目录内容
| 文件 | 作用 |
|------|------|
| [install_docker.sh](install_docker.sh) | 一键安装 Docker 引擎并配置国内公网镜像加速(Ubuntu 24.04 / amd64) |
| [docker-compose.yml](docker-compose.yml) | Redis / PostgreSQL / MinIO / Mosquitto(MQTT) / Zenoh Router / Caddy 六类服务的编排定义 |
| [.env](.env) | Compose 使用的连接凭据与环境变量(PostgreSQL 密码、MinIO 账号等,勿提交到仓库) |
| [chongming.service](chongming.service) | chongming 应用的 systemd 服务单元文件 |
| [caddy/Caddyfile](caddy/Caddyfile) | Caddy 反向代理配置(本地 IP + 自签证书,统一 HTTP/HTTPS 入口) |
| [data/](data) | Compose 声明挂载的数据持久化目录(redis / postgres / minio / mosquitto / caddy 子目录),由容器产生,勿手动编辑 |
---
## 1. 安装 Docker
首次在新机器上部署时,先安装 Docker:
```bash
sudo ./install_docker.sh
```
脚本会安装 `docker-ce` 及 Compose 插件,并将国内公网加速源写入 `/etc/docker/daemon.json`(多源容灾)。安装完成后即可使用 `docker compose`。
> 说明:脚本使用的 `mirrors.cloud.tencent.com` 为腾讯云公网镜像站;原内网域名
> `mirrors.tencentyun.com` / `mirror.ccs.tencentyun.com` 仅腾讯云 VPC 内访问,本机不可用。
---
## 2. 部署基础服务(Redis / PostgreSQL / MinIO / Mosquitto / Zenoh)
五个服务分别用于 chongming 的缓存、元数据、对象存储、MQTT 消息与 Zenoh 路由汇聚。
### 部署
> 说明:Mosquitto 与 Zenoh Router 为按需启用项。若只想启动基础三服务(redis/postgres/minio),可加 `--no-recreate` 仅针对目标服务:
```bash
cd deploy
# 启动全部服务(首次会自动拉取镜像并创建容器)
sudo docker compose up -d
# 仅启动消息/路由服务(保留已在运行的 redis/pg/minio)
sudo docker compose up -d mosquitto zenoh
# 仅启动基础数据服务
sudo docker compose up -d redis postgres minio
```
### 服务清单(默认端口)
| 服务 | 容器名 | 端口 | 说明 |
|------|--------|------|------|
| Redis 7 | chongming-redis | 6379 | 支持 appendonly 持久化 |
| PostgreSQL 16 | chongming-postgres | 5432 | 元数据存储 |
| MinIO | chongming-minio | 9000(S3) / 9001(Console) | 对象存储,Web 控制台 |
| Mosquitto 2 | chongming-mosquitto | 1883 | MQTT Broker(WebSocket 9001 默认关闭,避免与 MinIO Console 冲突) |
| Zenoh Router | chongming-zenoh | 7447/tcp、7447/udp | Zenoh 路由节点 |
| Caddy | chongming-caddy | 80 / 443 | 统一反向代理入口(chongming Web / MinIO Console / MinIO API) |
### 连接凭据(见 [.env](.env))
- PostgreSQL:用户 `postgres` / 密码 `postgres` / 库 `chongming`
- MinIO:`minioadmin` / `minioadmin`
- Mosquitto:匿名连接(如需账号,在 [mosquitto.conf](data/mosquitto/config/mosquitto.conf) 配置)
### 数据持久化
数据保存在 `deploy/data/{redis,postgres,minio,mosquitto}`,通过绑定挂载持久化,容器删除后数据不丢失。所有服务均设置 `restart: unless-stopped`(开机自启)。
### 日常管理
```bash
sudo docker compose ps # 查看状态与健康度
sudo docker compose logs -f <服务名> # 查看日志
sudo docker compose restart <服务名> # 重启单个服务
sudo docker compose down # 停止并移除容器(保留数据卷)
sudo docker compose down -v # 停止并移除容器 + 数据卷(慎用,会清空数据)
```
### 验证
```bash
sudo docker exec chongming-redis redis-cli ping # 期望 PONG
sudo docker exec chongming-postgres pg_isready -U postgres -d chongming # 期望 accepting connections
sudo docker exec chongming-mosquitto mosquitto_sub -p 1883 -t '$SYS/broker/version' -W 2 -C 1
# 期望打印版本号
```
### 接入 chongming 说明
**Zenoh Router**:项目 [zenoh_config.json5](../config/zenoh_config.json5) 默认以 `peer` 模式连接 `tcp/127.0.0.1:7447`。本 router 容器把 7447 映射到宿主机,同机部署时应用即可直接连到该 router;若跨机部署,需把 `connect.endpoints` 改为 router 机器地址。
**Mosquitto**:项目 [config.toml](../config.toml) 默认 `use_embedded_broker = true`(内嵌 amqtt)。要切到本外部 broker,需改为:
```toml
[development.mqtt]
enabled = true
host = "127.0.0.1"
port = 1883
use_embedded_broker = false
```
---
## 2.5 Caddy 反向代理(本地 IP + 自签证书)
Caddy 作为统一 HTTP/HTTPS 入口,反代三个 Web 服务:
| 入口域名 | 反向代理到 |
|----------|-----------|
| `gateway.chongming.local` | 宿主机 chongming Web(`host.docker.internal:8000`,systemd 托管) |
| `s3.chongming.local` | MinIO S3 API(容器 `minio:9000`) |
| `minio.chongming.local` | MinIO Web Console(容器 `minio:9001`) |
> 采用**本地 IP + 自签证书**方案:三站均使用 `tls internal`,由 Caddy 内置根证书签发
> 自签证书,**不走公网 ACME**,适合内网/测试环境。
### 部署
```bash
cd deploy
sudo docker compose up -d caddy
```
首次会自动拉取 `caddy:2-alpine` 镜像;Caddyfile 改动后:
`sudo docker compose exec caddy caddy reload --config /etc/caddy/Caddyfile`
### 访问方式(重要)
1. 先把三个本地域名指向机器 IP,追加到**访问端**(含宿主机、内网其它机器)的 `/etc/hosts`:
```
<本机IP> gateway.chongming.local s3.chongming.local minio.chongming.local
```
2. 浏览器访问(会提示证书不受信任,自签属正常,添加例外即可):
- `https://gateway.chongming.local` —— chongming Web
- `https://minio.chongming.local` —— MinIO Console(账号见 [.env](.env))
- S3 SDK 配置 Endpoint 为 `https://s3.chongming.local`
命令行自测(自签需 `-k`):
```bash
curl -k https://minio.chongming.local/minio/health/live # 期望结果含账号名(匿名则 403 也正常)
```
> 说明:MinIO 容器仍保留 9000/9001 对宿主端口映射;若只想统一走 Caddy 入口,
> 可删除 compose 中 minio 的 `ports` 段。
---
## 3. systemd 管理 chongming 应用
[chongming.service](chongming.service) 以非特权用户 `linaro` 运行打包后的 chongming 二进制(Nuitka 产物,`/data/chongming`)。
安装:
```bash
sudo cp deploy/chongming.service /etc/systemd/system/chongming.service
sudo systemctl daemon-reload
sudo systemctl enable --now chongming
```
常用运维命令:
```bash
sudo systemctl status chongming # 状态
sudo systemctl restart chongming # 重启(优雅排空,最长 30s)
journalctl -u chongming -f # 系统日志;应用自身日志在 /data/chongming/logs/
```
> 注意:安装目录、用户、worker 数等以 service 文件注释为准;如部署路径不同,
> 需同步修改 `WorkingDirectory` / `ExecStart`。
+32
View File
@@ -0,0 +1,32 @@
# Caddy 反向代理配置 — 本地 IP + 自签证书方案
#
# 通过三个本地主机名统一入口(80/443),需在访问端 /etc/hosts 追加:
# <本机IP> gateway.chongming.local s3.chongming.local minio.chongming.local
#
# 证书方案:每站均用 `tls internal` 由 Caddy 内置根证书签发自签证书,
# 不走公网 ACME,适合内网/测试环境。浏览器首次访问会提示不受信任,
# 无需理会本机(curl 可加 -k,浏览器可加例外)。
{
# 全局默认启用自签(即使某站忘记写 tls 指令,也不会误触公网 ACME)
auto_https disable_redirects
}
# chongming Web —— 反代宿主机 systemd 托管的 HTTP 8000
# 容器经 host.docker.internal(extra_hosts: host-gateway)访问宿主机
gateway.chongming.local {
tls internal
reverse_proxy host.docker.internal:8000
}
# MinIO S3 Object Storage API(9000)
s3.chongming.local {
tls internal
reverse_proxy minio:9000
}
# MinIO Web Console(9001)
minio.chongming.local {
tls internal
reverse_proxy minio:9001
}
+123
View File
@@ -0,0 +1,123 @@
# 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
+47
View File
@@ -0,0 +1,47 @@
#!/bin/bash
# Docker 安装 + 国内公网镜像加速配置脚本 (Ubuntu 24.04 / amd64)
# 注: mirrors.tencentyun.com / mirror.ccs.tencentyun.com 仅腾讯云 VPC 内网可用,
# 本机不在腾讯云内网,故 apt 源使用腾讯云公网镜像站,registry 加速使用公网加速源。
set -e
echo "==> [1/5] 安装基础依赖"
apt-get update -y
apt-get install -y ca-certificates curl gnupg
echo "==> [2/5] 添加 Docker 官方 GPG key 和仓库(腾讯云公网镜像)"
install -m 0755 -d /etc/apt/keyrings
rm -f /etc/apt/keyrings/docker.gpg
curl -fsSL https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu/gpg \
| gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
> /etc/apt/sources.list.d/docker.list
echo "==> [3/5] 安装 Docker 引擎"
apt-get update -y
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
echo "==> [4/5] 配置镜像加速(公网加速源,多源容灾)"
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.1ms.run",
"https://hub.rat.dev"
]
}
EOF
echo "==> [5/5] 启动并配置开机自启"
systemctl enable docker
systemctl restart docker
echo "==> 完成,验证:"
docker --version
docker run --rm hello-world
docker info | grep -A5 "Registry Mirrors"