Files
me-web/Kimi_Agent_个人网站改版/app/ME_PROJECT_CONTEXT.md
T

239 lines
11 KiB
Markdown
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.
# ALiYunManager 项目上下文 (AI可读)
> 本文档供 AI 助手在新会话中快速理解项目部署环境和架构,避免做出与现有环境冲突的操作。
---
## 一、服务器信息
| 项目 | 值 |
|------|-----|
| 公网 IP | `8.136.137.59` |
| 根域名 | `dxz99wyr.cn` |
| 操作系统 | Ubuntu (5.15.0-174-generic) |
| SSH 连接命令 | `ssh -i "D:\003_Project\小程序连接.pem" root@8.136.137.59` |
| SSH 密钥路径 | `D:\003_Project\小程序连接.pem` |
| 服务器项目路径 | `/opt/ALiYunManager` |
---
## 二、子域名规划
| 子域名 | 用途 | 类型 |
|--------|------|------|
| `me.dxz99wyr.cn` | 个人简历网站 | 前端 |
| `miniapp.dxz99wyr.cn` | 小程序网站 | 前端 |
| `api-resume.dxz99wyr.cn` | 个人简历后台 API | 后端 |
| `api-miniapp.dxz99wyr.cn` | 小程序后台 API | 后端 |
> 以上 4 个子域名 DNS A 记录均指向 `8.136.137.59`。
---
## 三、端口分配(关键:防止冲突)
### 对外网开放的端口
| 端口 | 用途 | 备注 |
|------|------|------|
| `22` | SSH | 必须保持 |
| `80` | HTTP 入口 | 由 **beian-nginx**(现有)占用 |
| `443` | HTTPS 入口 | 由 **beian-nginx**(现有)占用 |
### 内部端口(不对外网)
| 端口 | 用途 | 备注 |
|------|------|------|
| `8080` | main-nginx HTTP | Docker 容器内 80 → 宿主机 8080 |
| `8443` | main-nginx HTTPS | Docker 容器内 443 → 宿主机 8443 |
| `3000` | 小程序后端 | `quanyixiaozhushou-app`,仅本地回环访问 |
### 端口冲突规则
- **绝对不要占用 80/443** — 已被 beian-nginx 使用,新增服务必须挂到 main-nginx 后面(通过 Docker 网络内部 80 通信)
- **绝对不要占用 8080** — 已被 main-nginx 映射使用
- **绝对不要暴露 3000 到外网** — 小程序后端已关闭外网访问,仅走本地回环
- 新增服务容器内部一律使用 `80` 端口,通过 Docker 网络互通,**不要额外映射宿主机端口**
---
## 四、现有 Nginx 链路(两层代理)
```
外网请求
┌─────────────────────────────────────┐
│ beian-nginx (宿主机 :80/:443) │ ← 第1层:现有入口,已在运行
│ 容器名: beian-nginx │
│ 所属网络: beian-docker_default │
│ │
│ 目前配置: │
│ ✅ api-miniapp.dxz99wyr.cn → :8080 │ 4个域名中只有这个配了中转
│ ❌ me.dxz99wyr.cn │ 尚未配置
│ ❌ miniapp.dxz99wyr.cn │ 尚未配置
│ ❌ api-resume.dxz99wyr.cn │ 尚未配置
│ ✅ /quanyi → 静态页面 (原有服务) │
└──────────────┬──────────────────────┘
│ 中转请求到 172.19.0.1:8080 (Docker网关=宿主机)
┌─────────────────────────────────────┐
│ main-nginx (Docker :8080/:8443) │ ← 第2层:新建,按域名分发
│ 容器名: main-nginx │
│ 所属网络: aliyun-app-network │
│ │
│ 路由表: │
│ me.dxz99wyr.cn → resume-web:80 │
│ miniapp.dxz99wyr.cn → miniapp-web:80 │
│ api-resume.dxz99wyr.cn → resume-api:80 │
│ api-miniapp.dxz99wyr.cn → host.docker.internal:3000 │
└──────────────┬──────────────────────┘
│ Docker 内部网络
┌──────────┼──────────┬──────────┐
│ │ │ │
resume-web miniapp-web resume-api miniapp-api
(占位) (占位) (占位) (→宿主机:3000)
```
### 关键理解
- **beian-nginx 是真正的入口**main-nginx 只是在内部做二级分发
- **beian-nginx 配置文件位置**: `/opt/beian-docker/nginx.conf`(映射到容器内 `/etc/nginx/conf.d/default.conf`
- **修改 beian-nginx 前必须先备份**: 备份文件在 `/opt/beian-docker/nginx.conf.bak`
- 重载 beian-nginx: `docker exec beian-nginx nginx -t && docker exec beian-nginx nginx -s reload`
---
## 五、Docker 容器清单
| 容器名 | 镜像 | 网络 | 端口映射 | 说明 |
|--------|------|------|----------|------|
| `beian-nginx` | nginx | beian-docker_default | 80:80, 443:443 | **现有,勿动基础配置** |
| `main-nginx` | nginx:alpine | aliyun-app-network | 8080:80, 8443:443 | 主 Nginx,本项目管理 |
| `resume-web` | nginx:alpine | aliyun-app-network | 无(内部80) | 个人简历网站(占位) |
| `miniapp-web` | nginx:alpine | aliyun-app-network | 无(内部80) | 小程序网站(占位) |
| `resume-api` | nginx:alpine | aliyun-app-network | 无(内部80) | 个人简历后台(占位) |
| `miniapp-api` | nginx:alpine | aliyun-app-network | 无(内部80) | 小程序后台占位容器 |
| `quanyixiaozhushou-app` | 自有镜像 | beian-docker_default | 3000:3000 | **现有小程序后端,勿动** |
| `quanyixiaozhushou-mongo` | mongo | beian-docker_default | 27018:27017 | **现有 MongoDB,勿动** |
### Docker 网络
| 网络名 | 类型 | 用途 |
|--------|------|------|
| `aliyun-app-network` | bridge | 本项目所有服务容器互通 |
| `beian-docker_default` | bridge | 现有 beian-nginx 及小程序后端 |
> **注意**: main-nginx 通过 `extra_hosts: host.docker.internal:host-gateway` 访问宿主机端口(如 3000),不需要两个网络互通。
---
## 六、项目文件结构
```
ALiYunManager/
├── .env # 环境变量(域名+端口),修改后需重启
├── .env.example # 环境变量模板
├── docker-compose.yml # 完整部署(main-nginx + 4个服务)
├── docker-compose.main-nginx-only.yml # 仅主 Nginx(各服务独立部署时用)
├── docker-compose.override.yml # 开发环境覆盖(自动加载)
├── deploy.sh # 一键部署脚本
├── Makefile # 常用命令快捷方式
├── nginx/
│ ├── nginx.conf # 主 Nginx 核心配置(一般不改)
│ ├── conf.d/
│ │ ├── resume-web.conf # me.dxz99wyr.cn → resume-web:80
│ │ ├── miniapp-web.conf # miniapp.dxz99wyr.cn → miniapp-web:80
│ │ ├── resume-api.conf # api-resume.dxz99wyr.cn → resume-api:80
│ │ ├── miniapp-api.conf # api-miniapp.dxz99wyr.cn → host.docker.internal:3000
│ │ ├── ssl-template.conf # HTTPS 配置模板(按需取消注释)
│ │ └── port-based-example.conf # 基于端口的备选方案模板
│ ├── ssl/ # SSL 证书目录(.gitignore 排除)
│ └── logs/ # Nginx 日志目录
├── services/
│ ├── resume-web/ # 个人简历前端
│ │ ├── html/index.html # 占位页面 → 替换为真实简历
│ │ ├── nginx.conf # 内部 Nginx 配置
│ │ ├── Dockerfile # 前端 Dockerfile
│ │ └── docker-compose.yml # 独立部署配置
│ ├── miniapp-web/ # 小程序前端(同上结构)
│ ├── resume-api/ # 个人简历后台
│ │ ├── nginx.conf # 内部 Nginx(当前占位)
│ │ ├── Dockerfile # 模板,含 Node/Python/Go 示例
│ │ └── docker-compose.yml # 独立部署配置
│ └── miniapp-api/ # 小程序后台(同上结构)
└── scripts/
├── init-server.sh # 新服务器初始化(安装 Docker 等)
├── setup-ssl.sh # SSL 证书申请(Certbot
├── update-service.sh # 更新单个服务
├── backup.sh # 备份配置和证书
└── logrotate-nginx # 日志轮转配置
```
---
## 七、操作注意事项(AI 助手必读)
### 绝对不能做的事
1. **不要修改 beian-nginx 的基础配置**default_server、/quanyi 路径等),只能追加新的 server 块做域名中转
2. **不要改动 `nginx/nginx.conf`**(主 Nginx 核心配置),除非明确需要调整全局参数
3. **不要将 3000、8080、8443 端口暴露到外网**
4. **不要删除或停用 beian-nginx、quanyixiaozhushou-app、quanyixiaozhushou-mongo 容器**
5. **不要在 main-nginx 容器内直接改配置**,应修改本地 `nginx/conf.d/*.conf` 文件后重载
### 新增服务时的标准流程
1.`services/` 下创建服务目录,编写 Dockerfile 和内部 nginx.conf
2.`nginx/conf.d/` 下创建对应的反向代理 `.conf` 文件
3.`.env` 中添加新子域名变量
4.`docker-compose.yml` 中添加新服务定义
5. 在 beian-nginx 中追加对应的中转 server 块
6. 在阿里云 DNS 添加子域名 A 记录
### 修改 beian-nginx 配置的标准流程
```bash
# 1. 备份当前配置
cp /opt/beian-docker/nginx.conf /opt/beian-docker/nginx.conf.bak.$(date +%Y%m%d)
# 2. 编辑配置(在 server 块区域追加新的域名中转)
vim /opt/beian-docker/nginx.conf
# 3. 测试配置
docker exec beian-nginx nginx -t
# 4. 重载
docker exec beian-nginx nginx -s reload
```
### 本地项目环境变量
`.env` 文件中的配置(当前值):
```
DOMAIN_RESUME_WEB=me.dxz99wyr.cn
DOMAIN_MINIAPP_WEB=miniapp.dxz99wyr.cn
DOMAIN_RESUME_API=api-resume.dxz99wyr.cn
DOMAIN_MINIAPP_API=api-miniapp.dxz99wyr.cn
NGINX_HTTP_PORT=8080
NGINX_HTTPS_PORT=8443
TZ=Asia/Shanghai
```
> 生产环境 `.env.example` 中默认端口是 80/443,当前 `.env` 用 8080/8443 是为了和生产环境 beian-nginx 的 80/443 错开。
---
## 八、待办事项
| # | 事项 | 优先级 |
|---|------|--------|
| 1 | beian-nginx 补充 me、miniapp、api-resume 三个域名的中转配置 | 高 |
| 2 | 将 `services/resume-web/html/` 占位页面替换为真实简历代码 | 高 |
| 3 | 实现个人简历后台(`services/resume-api/`)真实后端代码 | 中 |
| 4 | 配置 HTTPS / SSL 证书(运行 `./scripts/setup-ssl.sh` | 中 |
| 5 | 配置日志轮转 (logrotate) | 低 |
| 6 | 小程序网站(`miniapp-web`)接入真实前端代码 | 低 |