v0.15.0: Docker 化部署(OVH-US-BAK)
- Dockerfile(oven/bun 多阶段:构建 dist + 全量 node_modules 运行时) - deploy/docker-compose.yml(postgres:18 + app,uploads 双挂载同宿主目录) - .dockerignore(uploads 经卷挂载不进镜像,避免 3GB 膨胀) - prod-server /uploads/* 运行时直读磁盘(媒体上传后无需重启即可访问,含路径穿越防护) - README Docker 部署章节
This commit is contained in:
@@ -59,6 +59,25 @@ bun test # 单元/集成测试
|
||||
`/admin`(默认管理员见导入输出)。模块:Dashboard / 内容 / 产品 / 订单 / 询盘 / 媒体 / 语言 / SEO 重定向 / 筛选 / 用户 / 设置。
|
||||
所有接口 `requireAdmin()` 权限校验,敏感操作写 `audit_logs`。
|
||||
|
||||
## Docker 部署(v0.15.0)
|
||||
|
||||
生产环境部署在 OVH(OVH-US-BAK)`/home/docker/dusuniot/`,域名 `dusuniot.ibug.qzz.io`(Cloudflare 橙云):
|
||||
|
||||
```
|
||||
/home/docker/dusuniot/
|
||||
├── docker-compose.yml # 即仓库 deploy/docker-compose.yml
|
||||
├── app/ # 仓库源码 rsync(.dockerignore 排除 node_modules/dist/uploads 等)
|
||||
└── data/
|
||||
├── pg/ # PostgreSQL 18 数据卷
|
||||
└── uploads/ # 媒体库(容器内双挂载:/app/public/uploads 写入 + /app/dist/client/uploads 服务)
|
||||
```
|
||||
|
||||
- 应用容器 `dusuniot-app`(oven/bun 构建,`bun scripts/prod-server.ts`,PORT 3312),仅绑定 `127.0.0.1:3320`;数据库容器 `dusuniot-db-1`(postgres:18,不对外暴露)。
|
||||
- nginx 站点 `/etc/nginx/sites-available/dusuniot.ibug.qzz.io.conf`:80 + 443(Let's Encrypt,certbot webroot 续期自动 reload)→ `proxy_pass http://127.0.0.1:3320`。CF SSL 模式 Full/Full(strict)/Flexible 均兼容。
|
||||
- 数据迁移:本机 `pg_dump -Fc` → 服务器 `pg_restore`;媒体经 tar+zstd 流式同步到 `data/uploads`。
|
||||
- 更新发布:rsync 源码后 `cd /home/docker/dusuniot && docker compose up -d --build app`。
|
||||
- `scripts/prod-server.ts` 的 `/uploads/*` 运行时直读磁盘(媒体上传后无需重启即可访问,本地裸跑同样受益)。
|
||||
|
||||
## 目录结构
|
||||
|
||||
见方案文档第 6 节。`src/server/*` 按业务域拆分(auth/content→data/products→data/filters/orders→commerce/inquiries/translations/seo/jobs)。
|
||||
|
||||
Reference in New Issue
Block a user