Files
aliyun-manager/PROJECT_CONTEXT.md

17 KiB
Raw Permalink Blame History

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 助手在之后的每次会话中,都需要主动提醒用户,直到用户给出正面答复为止。

绝对不能违反的合规要求

  1. 所有二级域名的页面底部中间必须显示 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 配置的标准流程

# 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.cnDashy + Netdata + 状态API 🔧 进行中 dash
7 新建日志面板 logs.dxz99wyr.cn(汇总所有 Docker 日志) 🟢 logs
8 部署私有 Git 仓库 git.dxz99wyr.cnGitea + Webhook 自动部署) 🔧 进行中 git
9 配置 Git Webhook + 自动部署流水线(git push → 自动拉代码部署) 🔧 进行中 git/CICD
10 配置日志轮转 (logrotate) 🟢 基础设施
11 小程序网站后续替换为二级域名 🟢 www.dxz99wyr.cn