Files
aliyun-manager/PROJECT_CONTEXT.md
T

335 lines
17 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` | 个人简历网站 | 前端 | 🔧 进行中 |
| `www.dxz99wyr.cn` | 小程序网站 | 前端 | ✅ 使用中 [后续替换到二级域名] |
| `api-resume.dxz99wyr.cn` | 个人简历后台 API | 后端 | ⏳ 占位,待实现 |
| `api-miniapp.dxz99wyr.cn` | 小程序后台 API | 后端 | ✅ 已接入真实后端 (:3000) |
### 待开发
| 子域名 | 用途 | 类型 | 状态 |
|--------|------|------|------|
| `img.dxz99wyr.cn` | 图床网站 | 服务 | 📋 待开发 |
| `dash.dxz99wyr.cn` | 服务监控网站 | 服务 | 🔧 部署中(详见 `Dash.md` |
| `logs.dxz99wyr.cn` | 日志监控网站 | 服务 | 📋 待开发 |
| `git.dxz99wyr.cn` | 私有 Git 仓库 + CI/CD | 服务 | 🔧 部署中(详见 `Git.md` |
> DNS A 记录:所有子域名均指向 `8.136.137.59`,已经在阿里云域名控制台配置。
>
> **ICP 备案合规要求**:所有涉及二级域名对外展示的页面,**一律在页面底部中间位置**添加 ICP 备案号 `浙ICP备2026030774号-1`,并链接到 `https://beian.miit.gov.cn`。这是法律合规要求,新增任何服务时不可遗漏。
### 待开发服务说明
**1. 图床网站 `img.dxz99wyr.cn`**
- 用途:存储个人网站(me.dxz99wyr.cn)上传的图片内容,提供图片外链
- 需要:图片上传接口、存储管理、访问权限控制
**2. 服务监控网站 `dash.dxz99wyr.cn`**
- 用途:在线监控服务器 CPU、内存、磁盘使用率
- 监控各 Docker 容器的运行状态(up/down/restart
- 监控系统各端口的占用状态、对应服务
- 可选方案:Grafana + Prometheus、或轻量自建面板
**3. 日志网站 `logs.dxz99wyr.cn`**
- 用途:汇总展示所有 Docker 容器的运行日志
- 提供历史和实时日志查看
- 支持按服务、时间过滤
- 可选方案:ELK (Elasticsearch + Logstash + Kibana)、Grafana Loki、或自建简易面板
**4. 私有 Git 仓库 `git.dxz99wyr.cn`**
- 用途:存档所有项目的源代码(包括本 ALiYunManager 项目)
- 配套 CI/CD:配置 Git Webhook + 脚本,实现 `git push` 后自动拉取代码并部署到对应服务,不再需要手动 ssh 部署
- 可选方案:Gitea(轻量)、GitLab CE、Gogs
---
## 三、端口分配(关键:防止冲突)
### 对外网开放的端口
| 端口 | 用途 | 备注 |
|------|------|------|
| `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 网络互通,**不要额外映射宿主机端口**
- **新增待开发服务(img/dash/logs/git)同理**,全部挂到 main-nginx 后面,内部 80 通信,不暴露新端口到外网
---
## 四、现有 Nginx 链路(两层代理)
```
外网请求
┌─────────────────────────────────────────────────────────┐
│ beian-nginx (宿主机 :80/:443) │ ← 第1层:入口
│ 容器名: beian-nginx │
│ 所属网络: beian-docker_default │
│ │
│ 目前已配置中转: │
│ ✅ me.dxz99wyr.cn → :8080 │
│ ✅ www.dxz99wyr.cn → :8080 │
│ ✅ api-resume.dxz99wyr.cn → :8080 │
│ ✅ api-miniapp.dxz99wyr.cn → :8080 │
│ ✅ git.dxz99wyr.cn → :8080 │
│ ✅ dash.dxz99wyr.cn → :8080 │
│ ✅ /quanyi → 静态页面 (原有服务) │
└──────────────┬──────────────────────────────────────────┘
│ 中转请求到 172.19.0.1:8080 (Docker网关=宿主机)
┌─────────────────────────────────────────────────────────┐
│ main-nginx (Docker :8080/:8443) │ ← 第2层:分发
│ 容器名: main-nginx │
│ 所属网络: aliyun-app-network │
│ │
│ 路由表 (已配置): │
│ me.dxz99wyr.cn → resume-web:80 │
│ www.dxz99wyr.cn → miniapp-web:80 │
│ api-resume.dxz99wyr.cn → resume-api:80 │
│ api-miniapp.dxz99wyr.cn → host.docker.internal:3000 │
│ │
│ 路由表 (待添加,新服务上线时): │
│ img.dxz99wyr.cn → img-service:80 │
│ dash.dxz99wyr.cn → dash-service:80 │
│ logs.dxz99wyr.cn → logs-service:80 │
│ git.dxz99wyr.cn → git-service:80 │
└──────────────┬──────────────────────────────────────────┘
│ 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 # www.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/ # 小程序后台(占位 → 实际走宿主机3000)
└── scripts/
├── init-server.sh # 新服务器初始化(安装 Docker 等)
├── setup-ssl.sh # SSL 证书申请(Certbot
├── update-service.sh # 更新单个服务
├── backup.sh # 备份配置和证书
└── logrotate-nginx # 日志轮转配置
```
---
## 七、环境变量(.env 当前值)
```
DOMAIN_RESUME_WEB=me.dxz99wyr.cn
DOMAIN_MINIAPP_WEB=www.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
# -- 待开发服务(上线时取消注释) --
# DOMAIN_IMG=img.dxz99wyr.cn
# DOMAIN_DASHBOARD=dash.dxz99wyr.cn
# DOMAIN_LOGS=logs.dxz99wyr.cn
# DOMAIN_GIT=git.dxz99wyr.cn
```
---
## 八、操作注意事项(AI 助手必读)
### 全局铁律(所有新增内容必须遵守)
**规则 1 — 文件存储路径**
- 所有新增项目的文件**一律存储在 `/home/` 目录下**,子目录以项目名命名(如 `/home/Git/``/home/Dash/`)。
- **能放在 Docker 容器里的,就不要放在宿主机上**。配置文件、脚本等通过 volume 挂载进容器,不要在宿主机直接运行。
**规则 2 — 脚本后台运行 & 开机自启**
- 所有需要持续运行的脚本/服务,启动时必须使用后台方式(nohup、screen、tmux 或 Docker 容器),**保证关闭 SSH 会话后不受影响**。
- 必须配置**开机自启动**,云服务器重启后自动恢复运行。
- Docker 容器:`restart: always`(已在所有 docker-compose.yml 中统一配置)
- 宿主机脚本/进程:必须配置 systemd service 或 crontab `@reboot` 条目
- Docker 守护进程自启:`systemctl enable docker`(已由 `scripts/init-server.sh` 配置)
**规则 3 — SSL 证书自动化**
- 所有涉及在线 Web 访问的服务,**必须通过 Certbot 自动配置 SSL 证书**(参考 `scripts/setup-ssl.sh`)。
- 证书到期前 3 天**自动续期**,通过 crontab 定时任务实现:
```
0 3 * * * certbot renew --quiet --deploy-hook 'docker exec main-nginx nginx -s reload'
```
- 新增服务上线时,同步更新 certbot 证书覆盖的域名列表。
**规则 4 — 优先使用国内镜像源**
- 所有涉及下载的操作(pip install、npm install、apt-get、apk add、docker pull、git clone 等),**优先查找并使用国内镜像源**,提升下载速度。
- 常用国内源:
- Docker Hub:阿里云容器镜像服务、腾讯云 `mirror.ccs.tencentyun.com`
- Python pip:清华 `pypi.tuna.tsinghua.edu.cn`、阿里 `mirrors.aliyun.com/pypi/simple`
- Node.js npm:淘宝 `registry.npmmirror.com`
- Alpine apk:清华 `mirrors.tuna.tsinghua.edu.cn/alpine`、中科大 `mirrors.ustc.edu.cn/alpine`
- Debian/Ubuntu apt:阿里 `mirrors.aliyun.com/ubuntu`、清华 `mirrors.tuna.tsinghua.edu.cn/ubuntu`
- Git clone:优先使用 Docker 内网 HTTP(如 `http://gitea:3000/...`),不走外网
- Dockerfile 中 `RUN` 命令在安装包前先替换为国内源。
**规则 5 — 服务修改隔离**
- 修改某一服务时,**不准修改非该服务的内容**,包括但不限于:其他服务的网页页面、nginx 配置、反向代理规则、重定向、Docker 容器配置。
- 如果发现其他服务存在问题,**一律先告知用户**,不得自行改动。
- **用户未正面答复确认的**(如"知道了"、"先不管"、"改"等),AI 助手在之后的每次会话中,**都需要主动提醒用户**,直到用户给出正面答复为止。
### 绝对不能违反的合规要求
0. **所有二级域名的页面底部中间必须显示 ICP 备案号**:`浙ICP备2026030774号-1`,并链接到 `https://beian.miit.gov.cn`。新增任何服务时不可遗漏。
### 绝对不能做的事
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. 在 `/home/<项目名>/` 下创建项目目录(遵守规则 1
2. 所有服务逻辑放入 Docker 容器,宿主机仅保留 docker-compose.yml 和配置文件(遵守规则 1)
3. 在 `nginx/conf.d/` 下创建对应的反向代理 `.conf` 文件(参考已有配置)
4. 在 `.env` 中添加新子域名变量
5. 在本项目 `docker-compose.yml` 中添加新服务定义,确保 `restart: always`(遵守规则 2
6. 在 beian-nginx 中追加对应的中转 server 块
7. 在阿里云 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
```
---
## 九、待办清单
| # | 事项 | 优先级 | 所属服务 |
|---|------|--------|----------|
| 1 | beian-nginx 补充中转配置(me、www、api-resume | ✅ 已完成 | 基础设施 |
| 2 | 替换 `services/resume-web/html/` 为真实简历代码 | 🔴 高 | me.dxz99wyr.cn |
| 3 | 实现个人简历后台真实后端代码(`services/resume-api/` | 🟡 中 | api-resume.dxz99wyr.cn |
| 4 | 配置 HTTPS / SSL 证书(运行 `./scripts/setup-ssl.sh` | 🟡 中 | 全部 |
| 5 | 新建图床服务 `img.dxz99wyr.cn` | 🟢 低 | img |
| 6 | 部署监控面板 `dash.dxz99wyr.cn`Dashy + Netdata + 状态API | 🔧 进行中 | dash |
| 7 | 新建日志面板 `logs.dxz99wyr.cn`(汇总所有 Docker 日志) | 🟢 低 | logs |
| 8 | 部署私有 Git 仓库 `git.dxz99wyr.cn`Gitea + Webhook 自动部署) | 🔧 进行中 | git |
| 9 | 配置 Git Webhook + 自动部署流水线(git push → 自动拉代码部署) | 🔧 进行中 | git/CICD |
| 10 | 配置日志轮转 (logrotate) | 🟢 低 | 基础设施 |
| 11 | 小程序网站后续替换为二级域名 | 🟢 低 | www.dxz99wyr.cn |