From 70353ef4c46f07313797b516e096c61ce1d1f7b8 Mon Sep 17 00:00:00 2001 From: cnb Date: Mon, 31 Aug 2026 22:48:35 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E5=8D=B8=E8=BD=BD=20Komari=20Lite=20?= =?UTF-8?q?=E5=B9=B6=E7=A7=BB=E9=99=A4=E9=A6=96=E9=A1=B5=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8=E7=8A=B6=E6=80=81=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 7 ++- README.md | 18 ++---- index.html | 2 - komari/docker-compose.yml | 14 ----- lzwlab.status.nginx.conf | 67 -------------------- setup.md | 124 +++----------------------------------- 6 files changed, 17 insertions(+), 215 deletions(-) delete mode 100644 komari/docker-compose.yml delete mode 100644 lzwlab.status.nginx.conf diff --git a/CHANGELOG.md b/CHANGELOG.md index de7a67e..f9f6409 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,10 +31,14 @@ - 更新 README.md 与 setup.md :补充 RustDesk 自建服务器部署记录与客户端配置说明。 - 更新首页 index.html :欢迎卡片新增“📊 服务器状态”入口(https://status.lzwlab.cn/)。 - 更新 README.md 与 setup.md :补充 Komari Lite 服务器监控部署记录与使用说明。 +- 更新 README.md 与 setup.md :移除 Komari Lite 使用说明,setup.md 第 11 节改为“已卸载”记录。 ### Removed -- 移除首页欢迎卡中的“网站搭建成功!这是部署在个人云服务器上的第一个页面。”提示信息,首页仅保留标题、Powered by Nginx 徽标与“文件快传”“Git 服务”“服务器状态”三个入口链接。 +- 移除首页欢迎卡中的“网站搭建成功!这是部署在个人云服务器上的第一个页面。”提示信息,首页仅保留标题、Powered by Nginx 徽标与“文件快传”“Git 服务”两个入口链接。 +- 移除 Komari Lite 服务器监控(https://status.lzwlab.cn/):从服务器卸载容器/镜像/数据目录,删除 status.lzwlab.cn 的 nginx 配置与 Let's Encrypt 证书。 +- 删除仓库内 komari/docker-compose.yml 与 lzwlab.status.nginx.conf 。 +- 更新首页 index.html :移除“📊 服务器状态”入口链接。 ### Fixed @@ -48,7 +52,6 @@ - RustDesk 服务使用 hbbs 首次启动自动生成的自建密钥(服务器 /opt/rustdesk/data/id_ed25519.pub),客户端必须配置该 Key 才能连接服务器。 - 应用登录密码仅以 scrypt 哈希保存在 /etc/lzwlab-transfer/config.json (root:lzwlab 640),不在代码或仓库中保存明文。 - 会话 Cookie 启用 Secure/HttpOnly/SameSite=Lax,登录接口按 IP 限流,写接口校验 X-Requested-With 头。 -- Komari Lite 容器端口只绑定 127.0.0.1,公网仅经 nginx HTTPS 访问 status.lzwlab.cn;面板管理员账号在首次打开时创建,凭据仅记录于 Authentication.md。 ## [1.0.0] - 2026-08-24 diff --git a/README.md b/README.md index 4273844..08644ad 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,15 @@ # lzwlab.cn 站点部署仓库 -lzwlab.cn 个人云服务器上的站点部署项目:包含站点欢迎页、nginx 站点配置、TLS 证书、远程运维脚本,以及从首页链接进入的“文件快传”在线文件暂存工具。上线效果:http 请求自动 301 跳转到 https,`https://lzwlab.cn` 与 `https://www.lzwlab.cn` 均正常展示欢迎页,`https://lzwlab.cn/transfer/` 提供登录鉴权的文件上传/下载服务。服务器上还以 Docker 部署了 RustDesk 自建远程桌面服务(hbbs/hbbr,客户端以域名 `lzwlab.cn` 接入)、Gitea Git 服务(入口 `https://lzwlab.cn/git/`,首页提供“🐙 进入 Git 服务”按钮)与 Komari Lite 服务器监控面板(入口 `https://status.lzwlab.cn/`,首页提供“📊 服务器状态”按钮)。 +lzwlab.cn 个人云服务器上的站点部署项目:包含站点欢迎页、nginx 站点配置、TLS 证书、远程运维脚本,以及从首页链接进入的“文件快传”在线文件暂存工具。上线效果:http 请求自动 301 跳转到 https,`https://lzwlab.cn` 与 `https://www.lzwlab.cn` 均正常展示欢迎页,`https://lzwlab.cn/transfer/` 提供登录鉴权的文件上传/下载服务。服务器上还以 Docker 部署了 RustDesk 自建远程桌面服务(hbbs/hbbr,客户端以域名 `lzwlab.cn` 接入)与 Gitea Git 服务(入口 `https://lzwlab.cn/git/`,首页提供“🐙 进入 Git 服务”按钮)。 ## 功能特性 -- 静态欢迎页:`index.html`,响应式渐变卡片,中文标题“欢迎访问 lzwlab.cn”,并提供“📦 进入文件快传”“🐙 进入 Git 服务”“📊 服务器状态”三个入口。 +- 静态欢迎页:`index.html`,响应式渐变卡片,中文标题“欢迎访问 lzwlab.cn”,并提供“📦 进入文件快传”“🐙 进入 Git 服务”两个入口。 - HTTPS 全站:`lzwlab.nginx.conf` 将 80 端口请求 301 跳转到 443;443 端口启用 TLS 1.2/1.3 与 HTTP/2,证书链由 TrustAsia 签发。 - 文件快传(`/transfer/`):指定用户登录后才能使用,PC/手机自适应;支持多文件上传与下载进度、有效期设置(默认 7 天,最短 1 小时,最长 30 天)、缓存列表与手动删除;过期文件由 systemd 定时器每 10 分钟自动清理。 - 远程运维脚本:`remote.py` 基于 Paramiko,支持执行远程命令(可 sudo)与上传文件,凭据自动从 `Authentication.md` 解析,无需在命令行传密码。 - RustDesk 自建服务器:Docker Compose 部署 hbbs(ID/注册服务器)+ hbbr(中继服务器),host 网络监听 21115-21119,客户端以域名 `lzwlab.cn` 接入,客户端配置说明见 [setup.md](setup.md) 第 9 节。 - Gitea Git 服务(`https://lzwlab.cn/git/`):Docker 部署 Gitea 1.27.2(SQLite),管理员私有单实例,关闭开放注册;支持 HTTPS 克隆与 SSH 克隆(端口 2222),部署记录见 [setup.md](setup.md) 第 10 节。 -- Komari Lite 服务器监控(`https://status.lzwlab.cn/`):Docker 部署 [nuomiiiii/komari](https://github.com/nuomiiiii/komari) 分支(注意与上游 komari-monitor/komari 不同,镜像为 `ghcr.io/nuomiiiii/komari`),容器仅监听 127.0.0.1:25774,由 nginx 反代并启用 WebSocket;部署记录见 [setup.md](setup.md) 第 11 节。 - 完整部署记录:`setup.md` 覆盖从环境检查、安装 nginx、上传站点、HTTPS 配置到验证的全过程,并附踩坑记录。 - 文档维护技能:`.dsh/skills/maintain-docs/`,用于在项目修改后自动更新本 README 与 CHANGELOG.md。 @@ -21,7 +20,6 @@ lzwlab.cn 个人云服务器上的站点部署项目:包含站点欢迎页、n ├── Authentication.md # 服务器凭据(机密,勿公开/勿提交) ├── index.html # 站点欢迎页 ├── lzwlab.nginx.conf # nginx 站点配置(HTTP→HTTPS、TLS、HTTP/2) -├── lzwlab.status.nginx.conf # status.lzwlab.cn 站点配置(Komari Lite 反代、WebSocket) ├── lzwlab.cn_nginx/ # TLS 证书与私钥(私钥勿公开/勿提交) │ ├── lzwlab.cn.csr │ ├── lzwlab.cn.key @@ -43,8 +41,6 @@ lzwlab.cn 个人云服务器上的站点部署项目:包含站点欢迎页、n │ └── docker-compose.yml ├── gitea/ # Gitea Git 服务 Compose 配置(容器 gitea,SQLite) │ └── docker-compose.yml -├── komari/ # Komari Lite 服务器监控 Compose 配置(容器 komari,ghcr.io/nuomiiiii/komari) -│ └── docker-compose.yml ├── setup.md # 完整部署记录 └── .dsh/skills/maintain-docs/ # 文档维护技能(README/CHANGELOG) └── SKILL.md @@ -54,8 +50,8 @@ lzwlab.cn 个人云服务器上的站点部署项目:包含站点欢迎页、n - 本地(运维机):Python 3 + Paramiko(`pip install paramiko`)。 - 服务器:Ubuntu 24.04 LTS、nginx 1.24(systemd 管理)、Python 3.12、Flask 3.0.2 与 gunicorn 20.1(apt 安装)。 -- 服务器:Docker 29.1.3(apt docker.io + docker-compose-v2,已配置 daocloud 镜像加速)运行 RustDesk hbbs/hbbr、Gitea Git 服务与 Komari Lite 监控面板。 -- 域名 `lzwlab.cn` / `www.lzwlab.cn` 的 DNS 已解析到服务器;`status.lzwlab.cn` 需先在 DNSPod 添加 A 记录(Komari Lite 公网入口与证书签发的前提,见 [setup.md](setup.md) 第 11.5 节)。 +- 服务器:Docker 29.1.3(apt docker.io + docker-compose-v2,已配置 daocloud 镜像加速)运行 RustDesk hbbs/hbbr 与 Gitea Git 服务。 +- 域名 `lzwlab.cn` / `www.lzwlab.cn` 的 DNS 已解析到服务器。 ## 安装 @@ -89,7 +85,6 @@ LZWLAB_APP_PASSWORD='$PASS' python deploy_transfer.py --username admin curl -s -o /dev/null -w "%{http_code}\n" https://lzwlab.cn/ # 200 curl -s -o /dev/null -w "%{http_code}\n" https://lzwlab.cn/transfer/ # 200(登录页) curl -s -o /dev/null -w "%{http_code}\n" https://lzwlab.cn/git/ # 200(Git 服务登录页) -curl -s -o /dev/null -w "%{http_code}\n" https://status.lzwlab.cn/ # 200(Komari Lite 面板) ``` ## 部署说明 @@ -102,7 +97,6 @@ curl -s -o /dev/null -w "%{http_code}\n" https://status.lzwlab.cn/ # 200( - 文件快传:应用代码安装到 `/opt/lzwlab-transfer`,数据目录 `/var/lib/lzwlab-transfer`,配置 `/etc/lzwlab-transfer/config.json`(root:lzwlab 640);gunicorn 监听 `127.0.0.1:8090`,由 nginx 将 `/transfer/` 反向代理到该端口,systemd 定时器每 10 分钟执行一次过期清理。 - RustDesk:Compose 文件安装在 `/opt/rustdesk`(hbbs+hbbr,host 网络,数据目录 `/opt/rustdesk/data`);客户端 ID 服务器/中继/Key 配置见 [setup.md](setup.md) 第 9 节。 - Gitea:Compose 文件安装在 `/opt/gitea`(容器 `gitea`,SQLite 数据卷 `/opt/gitea/gitea`,Web 仅监听 `127.0.0.1:3000`,SSH 映射 `2222→22`);nginx 按 Gitea 官方 sub-path 方案将 `/git/` 反代到 3000 端口;管理员账号与密码记录在 `Authentication.md`,注册已关闭、安装器已锁定。详见 [setup.md](setup.md) 第 10 节。 -- Komari Lite:Compose 文件安装在 `/opt/komari`(容器 `komari`,镜像 `ghcr.io/nuomiiiii/komari:latest`,仅监听 `127.0.0.1:25774`,数据卷 `/opt/komari/data`);nginx 站点 `status.lzwlab.cn` 反代到 25774(含 `/api/rpc2` 独立长连接与 WebSocket 配置),证书由 certbot 签发。首次打开面板需按初始化页创建管理员账号,详见 [setup.md](setup.md) 第 11 节。 ## 安全与凭据说明 @@ -114,7 +108,6 @@ curl -s -o /dev/null -w "%{http_code}\n" https://status.lzwlab.cn/ # 200( - RustDesk 使用 hbbs 首次启动自动生成的自建密钥(服务器 `/opt/rustdesk/data/id_ed25519.pub`),客户端必须配置该 Key 才能连接;Key 需分发给每个客户端使用,本身不属于机密凭据。 - Gitea 关闭开放注册并锁定安装器;管理员密码只记录在 `Authentication.md`,对外文档一律用 `$PASS` 代替。 - Gitea SSH 克隆端口为 2222,需在腾讯云安全组放行 TCP 2222 后才能从公网使用;HTTPS 克隆与网页访问不受影响。 -- Komari Lite 容器端口只绑定 127.0.0.1,公网仅经 nginx HTTPS 访问 `status.lzwlab.cn`;面板管理员账号在首次打开时按初始化页创建,凭据只记录在 `Authentication.md`。 ## 参考资料 @@ -124,8 +117,5 @@ curl -s -o /dev/null -w "%{http_code}\n" https://status.lzwlab.cn/ # 200( - [deploy_transfer.py](deploy_transfer.py):文件快传部署脚本 - [rustdesk/docker-compose.yml](rustdesk/docker-compose.yml):RustDesk 自建服务器 Compose 配置 - [gitea/docker-compose.yml](gitea/docker-compose.yml):Gitea Git 服务 Compose 配置 -- [komari/docker-compose.yml](komari/docker-compose.yml):Komari Lite 服务器监控 Compose 配置 -- [lzwlab.status.nginx.conf](lzwlab.status.nginx.conf):status.lzwlab.cn nginx 反代配置 -- [Komari Lite 文档](https://lite.komari.wiki/):快速开始与 [Docker 部署](https://lite.komari.wiki/install/docker)、[反向代理](https://lite.komari.wiki/security/reverse-proxy) 参考 - [Gitea 官方文档](https://docs.gitea.com/):安装与反向代理(sub-path)参考 - [transfer/](transfer/):文件快传应用源码 diff --git a/index.html b/index.html index 794bf3d..8ec2acb 100644 --- a/index.html +++ b/index.html @@ -61,8 +61,6 @@ 📦 进入文件快传
🐙 进入 Git 服务 -
- 📊 服务器状态 \ No newline at end of file diff --git a/komari/docker-compose.yml b/komari/docker-compose.yml deleted file mode 100644 index e1f6b86..0000000 --- a/komari/docker-compose.yml +++ /dev/null @@ -1,14 +0,0 @@ -# Komari Lite 服务器监控(nuomiiiii/komari,不是上游 komari-monitor/komari) -# 参考 https://lite.komari.wiki/guide/start 与 https://lite.komari.wiki/install/docker -services: - komari: - image: ghcr.io/nuomiiiii/komari:latest - container_name: komari - restart: unless-stopped - volumes: - - ./data:/app/data - - /etc/timezone:/etc/timezone:ro - - /etc/localtime:/etc/localtime:ro - ports: - # Web 仅监听本机 127.0.0.1:25774,由 nginx 通过 https://status.lzwlab.cn/ 反代 - - "127.0.0.1:25774:25774" diff --git a/lzwlab.status.nginx.conf b/lzwlab.status.nginx.conf deleted file mode 100644 index 2d212e3..0000000 --- a/lzwlab.status.nginx.conf +++ /dev/null @@ -1,67 +0,0 @@ -# Komari Lite 服务器监控:https://status.lzwlab.cn/ -# 反代本机 127.0.0.1:25774(Docker 容器 komari,镜像 ghcr.io/nuomiiiii/komari) -# 注意:Komari Lite 是 nuomiiiii/komari 分支,不是上游 komari-monitor/komari -# 参考 https://lite.komari.wiki/guide/start 与 https://lite.komari.wiki/security/reverse-proxy - -# HTTP:仅用于 certbot http-01 挑战,其余 301 到 HTTPS -server { - listen 80; - listen [::]:80; - server_name status.lzwlab.cn; - - location /.well-known/acme-challenge/ { - root /var/www/certbot; - } - # 注意:301 必须放在 location / 内,server 级 return 会在 location 匹配前执行, - # 导致 ACME 挑战路径也被重定向(踩坑记录见 setup.md) - location / { - return 301 https://$host$request_uri; - } -} - -server { - listen 443 ssl http2; - listen [::]:443 ssl http2; - server_name status.lzwlab.cn; - - # 由 certbot 为 status.lzwlab.cn 签发(DNS 解析生效后执行 certbot) - ssl_certificate /etc/letsencrypt/live/status.lzwlab.cn/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/status.lzwlab.cn/privkey.pem; - - ssl_protocols TLSv1.2 TLSv1.3; - ssl_session_cache shared:SSL:10m; - ssl_session_timeout 10m; - - location / { - # HEAD 探测直接返回 204,避免被代理策略误判 - if ($request_method = HEAD) { - return 204; - } - proxy_pass http://127.0.0.1:25774; - proxy_set_header Host $http_host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_http_version 1.1; - # WebSocket(远程终端/实时数据)必须保留 Upgrade 头 - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - # 禁用代理缓冲,实时数据即时推送 - proxy_buffering off; - proxy_request_buffering off; - client_max_body_size 50M; - } - - # Agent RPC2:独立长连接超时与 Origin,避免状态连接被普通页面策略提前断开 - location ^~ /api/rpc2 { - proxy_pass http://127.0.0.1:25774; - proxy_http_version 1.1; - proxy_set_header Host $http_host; - proxy_set_header Origin $scheme://$http_host; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_read_timeout 3600s; - proxy_send_timeout 3600s; - proxy_buffering off; - } -} diff --git a/setup.md b/setup.md index 5c73561..47de0dc 100644 --- a/setup.md +++ b/setup.md @@ -496,127 +496,19 @@ sudo docker exec -u git gitea gitea admin user list # 用户列表 - 镜像使用官方新仓库 `docker.gitea.com/gitea:1.27.2`(腾讯云可直连,无需镜像加速);若改用 Docker Hub 的 `gitea/gitea` 则会走 daocloud 加速。 -## 11. 部署 Komari Lite 服务器监控(https://status.lzwlab.cn/) +## 11. Komari Lite 服务器监控(已卸载) -### 11.1 方案与要点 +> 该服务曾部署到 https://status.lzwlab.cn/,后按需求从服务器卸载,首页入口已删除。此前的部署配置与完整记录见 git 历史(commit bdffcee / 60b9ce1)。nginx server 级 return 的踩坑保留在下方“附:踩坑记录”第 6 条。 -- 组件:**Komari Lite**(GitHub [nuomiiiii/komari](https://github.com/nuomiiiii/komari) 分支)。⚠️ 它与上游 **Komari**(komari-monitor/komari)是两个不同的工具:镜像、文档站点与 Agent 下载源都不同,不能混用。Lite 镜像为 `ghcr.io/nuomiiiii/komari:latest`,文档站 https://lite.komari.wiki/ ,配套 Agent 为 nuomiiiii/komari-agent。本次部署版本:服务端 2.2.3(构建码 0huo552)。 -- 部署方式:Docker Compose(服务器已有 Docker 29.1.3 + compose-v2),容器名 `komari`,数据卷 `/opt/komari/data`,Web 端口只绑定 `127.0.0.1:25774`。 -- 入口:`https://status.lzwlab.cn/`(首页欢迎页“📊 服务器状态”按钮),nginx 反代到 25774 并保留 WebSocket;证书由 certbot 签发。 -- 参考文档:https://lite.komari.wiki/guide/start 、https://lite.komari.wiki/install/docker 、https://lite.komari.wiki/security/reverse-proxy 。 - -### 11.2 踩坑:Komari 与 Komari Lite 不是同一个工具 - -- 先前准备工作误用了上游镜像 `ghcr.io/komari-monitor/komari`(文档站 komari.wiki)。Komari Lite 是独立分支:镜像 `ghcr.io/nuomiiiii/komari`、文档站 lite.komari.wiki、Agent 下载源 nuomiiiii/komari-agent,数据库迁移与后台功能均以 Lite 分支为准。 -- 腾讯云直连 ghcr.io 拉取镜像层会卡住(仅完成 manifest 阶段),改用 NJU 镜像站秒下: +卸载命令: ```bash -sudo docker pull ghcr.nju.edu.cn/nuomiiiii/komari:latest -sudo docker tag ghcr.nju.edu.cn/nuomiiiii/komari:latest ghcr.io/nuomiiiii/komari:latest -``` - -(仓库内 compose 文件保持官方 `ghcr.io/nuomiiiii/komari` 镜像名,便于后续 pull 更新。) - -### 11.3 部署命令 - -Compose 文件为仓库内 `komari/docker-compose.yml`: - -```bash -# 本地:SFTP 上传 komari/docker-compose.yml 到 /tmp -# 远程: -sudo cp -a /opt/komari/docker-compose.yml /opt/komari/docker-compose.yml.bak-$(date +%Y%m%d-%H%M%S) -sudo install -m 644 -o root -g root /tmp/komari-compose.yml /opt/komari/docker-compose.yml -sudo rm -f /tmp/komari-compose.yml -sudo docker tag ghcr.nju.edu.cn/nuomiiiii/komari:latest ghcr.io/nuomiiiii/komari:latest -cd /opt/komari && sudo docker compose up -d -# 清理误拉的上游镜像 -sudo docker rmi ghcr.nju.edu.cn/komari-monitor/komari:latest -``` - -验证结果: - -```bash -sudo docker ps --filter name=komari # Up,127.0.0.1:25774->25774/tcp -sudo docker logs --tail 25 komari -# Komari Monitor 2.2.3 (0huo552) -# First-run installation guide is available on 0.0.0.0:25774 -curl -s -o /dev/null -w "%{http_code} -> %{redirect_url}\n" http://127.0.0.1:25774/ -# 307 -> /install(首次初始化页,创建管理员账号) -``` - -### 11.4 nginx 反代(/etc/nginx/sites-available/status.lzwlab.cn) - -配置为仓库内 `lzwlab.status.nginx.conf`,要点(按 Lite 官方反向代理文档): - -- `location /`:HEAD 请求直接返回 204;保留 Upgrade/Connection 头(远程终端、实时数据用 WebSocket);`proxy_buffering off`、`client_max_body_size 50M`。 -- `location ^~ /api/rpc2`:Agent 状态长连接单独配置(补 Origin 头、读写超时 3600s),避免被普通页面策略提前断开。 -- 80 端口只保留 `/.well-known/acme-challenge/`(certbot webroot 验证,root=/var/www/certbot),其余 301 跳 HTTPS。 -- ⚠️ 80 端口的 301 必须写在 `location / { return 301 ...; }` 内:server 级 `return` 在 rewrite 阶段(location 匹配之前)就终结请求,会把 ACME 挑战路径也一起 301,导致证书签发/续期失败(详见“附:踩坑记录”第 6 条)。 -- 443 证书路径指向 `/etc/letsencrypt/live/status.lzwlab.cn/`(certbot 签发后生效)。 - -安装顺序(证书未签发前不能启用 443 块,否则 `nginx -t` 报证书文件不存在): - -```bash -# 1) 先只启用 HTTP 挑战块(服务器临时文件 status.lzwlab.cn-http) -sudo install -m 644 -o root -g root /tmp/status-http.conf /etc/nginx/sites-available/status.lzwlab.cn-http -sudo ln -sf /etc/nginx/sites-available/status.lzwlab.cn-http /etc/nginx/sites-enabled/status.lzwlab.cn-http -sudo install -m 644 -o root -g root /tmp/lzwlab-status.conf /etc/nginx/sites-available/status.lzwlab.cn +cd /opt/komari && sudo docker compose down +sudo docker rmi ghcr.io/nuomiiiii/komari:latest ghcr.nju.edu.cn/nuomiiiii/komari:latest +sudo rm -f /etc/nginx/sites-enabled/status.lzwlab.cn /etc/nginx/sites-available/status.lzwlab.cn /etc/nginx/sites-available/status.lzwlab.cn-http /etc/nginx/sites-available/status.lzwlab.cn.bak-* +sudo certbot delete --cert-name status.lzwlab.cn --non-interactive +sudo rm -rf /var/www/certbot /opt/komari sudo nginx -t && sudo systemctl reload nginx -# 2) 证书签发后(见 11.5,脚本或手工执行): -sudo ln -sf /etc/nginx/sites-available/status.lzwlab.cn /etc/nginx/sites-enabled/status.lzwlab.cn -sudo rm -f /etc/nginx/sites-enabled/status.lzwlab.cn-http -sudo nginx -t && sudo systemctl reload nginx -``` - -### 11.5 DNS 与证书(Let's Encrypt) - -`status.lzwlab.cn` 在 DNSPod(腾讯云云解析)上没有解析记录(权威 NXDOMAIN),公网入口与证书签发依赖该记录。处理方式: - -1. 在 DNSPod 控制台为 `lzwlab.cn` 添加 A 记录:主机记录 `status`,记录值 `1.15.225.173`(本次部署时由仓库使用者添加)。 -2. 服务器上放了一个自动收尾脚本 `/tmp/status-watch.sh`(nohup 后台运行,日志 `/tmp/komari-status-watch.log`),每 45 秒检测一次解析:DNS 生效后它自动尝试 certbot 签发。首次尝试因 11.4 所述的 301 坑失败(ACME 挑战被 301 到 HTTPS 后 404),修复配置后改为手工签发成功(脚本已完成使命并清理): - -```bash -sudo certbot certonly --webroot -w /var/www/certbot -d status.lzwlab.cn \ - --non-interactive --agree-tos -m admin@lzwlab.cn --keep-until-expiring -# Successfully received certificate(ECDSA,有效期至 2026-11-24) -``` - -3. 证书签发后启用 443 站点并移除临时 HTTP 块(脚本会自动做,失败时手工执行): - -```bash -sudo ln -sf /etc/nginx/sites-available/status.lzwlab.cn /etc/nginx/sites-enabled/status.lzwlab.cn -sudo rm -f /etc/nginx/sites-enabled/status.lzwlab.cn-http -sudo nginx -t && sudo systemctl reload nginx -``` - -证书续期:certbot webroot 方式已注册 systemd 定时器自动续期;80 端口 `/.well-known/acme-challenge/` 位置保留在 `status.lzwlab.cn` 站点的 80 server 块中,续期验证直接可用(已验证该路径返回 404/200 而非 301)。 - -### 11.6 验证结果(公网) - -```bash -curl -s -o /dev/null -w "%{http_code} -> %{redirect_url} ssl=%{ssl_verify_result}\n" http://status.lzwlab.cn/ -# 301 -> https://status.lzwlab.cn/(HTTP 强制跳 HTTPS) -curl -s -o /dev/null -w "%{http_code} -> %{redirect_url} ssl=%{ssl_verify_result}\n" https://status.lzwlab.cn/ -# 307 -> https://status.lzwlab.cn/install ssl=0(首次为 /install 初始化页,证书链受信任) -curl -sL https://status.lzwlab.cn/ | grep -o '.*' # Komari Lite -curl -s https://lzwlab.cn/ | grep -o '服务器状态' # 服务器状态(首页按钮已生效) -echo | openssl s_client -connect status.lzwlab.cn:443 -servername status.lzwlab.cn -alpn h2,http/1.1 2>/dev/null \ - | grep -E "subject=|issuer=|ALPN" # CN=status.lzwlab.cn / Let's Encrypt / h2 -``` - -### 11.7 首次使用 - -1. 打开 `https://status.lzwlab.cn/`,按初始化页创建管理员账号(凭据自行保管,只记录在 `Authentication.md`)。 -2. 登录后在“账户与安全”启用两步验证;“服务器”中添加节点并复制 Agent 安装参数(Agent 使用 nuomiiiii/komari-agent 2.2.0.2)。 -3. 配置数据保留天数、流量限额与重置日;测试通知渠道后启用告警;最后完整备份一次 `/opt/komari/data`。 - -### 11.8 运维 - -```bash -cd /opt/komari && sudo docker compose ps # 容器状态 -sudo docker logs -f komari # 日志 -sudo docker pull ghcr.io/nuomiiiii/komari:latest && cd /opt/komari && sudo docker compose up -d # 升级(必要时走 ghcr.nju.edu.cn 镜像) -# 备份:面板数据全部在数据卷内,直接备份 /opt/komari/data/ 即可 ``` ## 附:踩坑记录