DJM CMS AI 部署说明(纯文本版) 适用版本:1.0.157 及以上 安装包:从 https://cloud.duojumi.com/api/public/v1/cms/installers/newest?channel=stable&os=linux&arch=amd64 读取 download_url 与 package_sha256,下载后校验;也可以从 https://cms.duojumi.com/download 手动下载。 注意:releases 接口只提供升级包(只有 releases/<版本> 目录),不能用于全新安装。 官网教程:https://cms.duojumi.com/install/ai-deploy == 边界 == AI 能完成下载、解压、改配置、跑迁移、装 systemd、配 Nginx、做健康检查。 域名解析、放行 80/443 端口、证书签发失败时的人工处理仍然需要人配合。 流程必须是"先出计划、确认后执行",不要让 AI 一把梭。 == 红线 == 1. 先计划后执行:先列出将要执行的命令和会创建的文件,人工确认后再动手。 2. 不碰其他站点:只允许在指定安装目录内操作,目标目录已存在就停下来询问。 3. 密码不回贴对话:管理员密码写入 0600 文件,只告诉人文件路径,不要打印到对话、日志或截图。 4. 失败即停:校验不过、端口被占用、证书申请失败都要停下来说明原因,不要跳过。 == 可复制提示词 == 帮我在这台服务器上部署 DJM CMS。先给执行计划,我确认后再动手。 环境信息: - 域名:(已解析到本机,HTTPS 用 Let's Encrypt) - 安装目录: - 安装包:读取 https://cloud.duojumi.com/api/public/v1/cms/installers/newest?channel=stable&os=linux&arch=amd64 的 download_url 和 package_sha256,下载到 /root/djm-installer.zip 并校验 sha256 - 数据库:SQLite - 后台入口:随机生成,形如 /manage-xxxxxxxx - 管理员:admin,密码用 openssl rand -base64 24 生成,写入 /root/cms-admin-password(权限 0600) - 进程:systemd 单元 djm-cms.service,ExecStart=<安装目录>/djm-cms serve,Restart=on-failure,KillMode=process,RestartSec=5 - 反向代理:Nginx 反代 127.0.0.1:23180,并申请 HTTPS 证书 红线: - 不要修改安装目录以外的任何站点或目录;目标目录已存在就停下来问我 - 不要结束或重启与本项目无关的进程;端口 23180 被占用先停下来问我 - 管理员密码只写入 0600 文件,不要打印到对话、日志或截图,最后只告诉我文件路径 - 任一步失败就停下来说明原因,不要跳过校验 执行顺序: 1. 检查系统:CPU 架构、systemd、nginx、23180 端口占用、磁盘空间 2. 校验安装包 sha256 后解压 3. 运行 sh install.sh <安装目录>;数据库配置问题回答 n(SQLite 由你直接改配置) 4. 编辑 <安装目录>/shared/configs/app.yaml: app.environment 改为 production; database.driver 改为 sqlite,path 填 storage/database/djm.sqlite; server.addr 改为 "127.0.0.1:23180"; 用 openssl rand -base64 32 分别生成 3 个独立密钥,写入 auth / member / comment 的 identity_hash_key 5. 在安装目录执行 ./djm-cms migrate,再执行: ./djm-cms install --admin-user admin --admin-password-file /root/cms-admin-password \ --site-name "<站点名称>" --site-domain --admin-path <随机后台入口> 6. 创建并 enable systemd 单元,启动后检查 curl http://127.0.0.1:23180/health/live 与 /health/ready 7. 配置 Nginx 反代与 HTTPS,确认 https:/// 和后台登录页都返回 200 (后台是单页应用,用 curl 验证时加 -H 'Accept: text/html',否则会被当成资源请求返回 404) 8. 最后告诉我:后台地址、用户名、密码文件路径、服务名、日志查看命令 验收标准: - /health/ready 返回 200,首页与后台登录页均返回 200 - systemctl is-enabled djm-cms 为 enabled,systemctl is-active 为 active - 任一验收项失败:回滚本次新建的目录和 systemd 单元,并说明失败原因 == 执行清单 == 1. 系统检查:架构与安装包一致;23180 端口空闲 2. 下载校验:sha256sum 与官网值一致 3. 解压安装:sh install.sh <目录>,生成 current、releases、shared 4. 配置:SQLite、production、3 个独立密钥、监听 127.0.0.1,app.yaml 无 change-me 5. 迁移:./djm-cms migrate 退出码 0,无待执行迁移 6. 创建账号:./djm-cms install ... 输出管理员 ID,安装模式自动关闭 7. 守护:systemd 单元 is-enabled=enabled、is-active=active 8. 反向代理:首页、后台、/health/ready 均 200 补充: - Restart=on-failure + KillMode=process 可让在线升级自动完成;1.0.157 起 Restart=always 也可以。 - 不用 systemd 时,可在 app.yaml 配置 deploy.restart_command。 == 人工兜底 == 1. journalctl -u djm-cms -n 200 --no-pager 2. <安装目录>/shared/logs/ 3. cd <安装目录> && ./djm-cms doctor 4. nginx -t 与 /var/log/nginx/error.log 5. https://<域名>/health/live 与 /health/ready 面板环境反复出错时切回人工教程: - 宝塔面板:安装包内 INSTALL-BT.md - 普通 Linux:安装包内 INSTALL-SERVER.md