Compare commits
4
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
67caaa428e | ||
|
|
70353ef4c4 | ||
|
|
60b9ce1866 | ||
|
|
bdffcee0ee |
@@ -17,6 +17,12 @@
|
||||
- 上传时可按 1 小时~30 天设置文件有效期(默认 7 天),过期文件由 systemd 定时器每 10 分钟自动删除。
|
||||
- 新增应用源码目录 transfer/ (Flask + gunicorn + SQLite)与幂等部署脚本 deploy_transfer.py 。
|
||||
- 新增 systemd 单元 lzwlab-transfer.service 与 lzwlab-transfer-cleanup.{service,timer} 。
|
||||
- 新增 Komari Lite 服务器监控(https://status.lzwlab.cn/):Docker Compose 部署 nuomiiiii/komari 分支(镜像 ghcr.io/nuomiiiii/komari,服务端 2.2.3),与上游 komari-monitor/komari 是两个不同的工具。
|
||||
- 新增 komari/docker-compose.yml 与 lzwlab.status.nginx.conf :容器仅监听 127.0.0.1:25774,nginx 反代含 /api/rpc2 独立长连接与 WebSocket 配置,证书由 certbot(webroot)签发。
|
||||
- setup.md 新增第 11 节:Komari Lite 部署过程、反代配置、DNS/证书自动收尾与验证结果。
|
||||
- 新增 Beszel 服务器监控(https://lzwlab.cn/beszel/):Docker Compose 部署 Beszel hub(henrygd/beszel:latest,容器 beszel,仅监听 127.0.0.1:8092),通过 USER_EMAIL/USER_PASSWORD 自动创建首个管理员。
|
||||
- 新增 beszel/docker-compose.yml;nginx 按 Beszel 官方子路径方案将 /beszel/ 反代到 8092(含 WebSocket)。
|
||||
- setup.md 新增第 12 节:Beszel 部署过程、子路径反代、Agent 接入说明与验证结果。
|
||||
|
||||
### Changed
|
||||
|
||||
@@ -26,10 +32,24 @@
|
||||
- 更新首页 index.html :欢迎卡片下方增加文件快传入口链接。
|
||||
- 更新 lzwlab.nginx.conf :新增 /transfer/ 反向代理到本机 8090 端口,上传/下载超时调整为 3600 秒,上传体积上限 5120 MB。
|
||||
- 更新 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 节改为“已卸载”记录。
|
||||
- 更新首页 index.html :新增“📊 服务器状态”入口(/beszel/)。
|
||||
- 更新 lzwlab.nginx.conf :新增 /beszel/ 反向代理到本机 8092 端口。
|
||||
- 更新 README.md 与 setup.md :补充 Beszel 服务器监控部署记录。
|
||||
|
||||
### Removed
|
||||
|
||||
- 移除首页欢迎卡中的“网站搭建成功!这是部署在个人云服务器上的第一个页面。”提示信息,首页仅保留标题、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 :移除 Komari Lite 的“📊 服务器状态”入口链接。
|
||||
|
||||
### Fixed
|
||||
|
||||
- 修正监控工具选型:将误准备的上游 Komari(ghcr.io/komari-monitor/komari)镜像与配置替换为 Komari Lite(ghcr.io/nuomiiiii/komari),服务器上误拉的上游镜像已删除。
|
||||
- 修复 status.lzwlab.cn 的 80 端口重定向写法:server 级 return 301 会先于 location 匹配执行,导致 ACME 挑战路径被重定向、证书无法签发;改为 location / 内重定向后 certbot 签发成功(Let's Encrypt ECDSA,有效期至 2026-11-24)。
|
||||
|
||||
### Security
|
||||
|
||||
@@ -38,6 +58,7 @@
|
||||
- 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 头。
|
||||
- Beszel hub 端口仅绑定 127.0.0.1,公网仅经 nginx HTTPS 访问 /beszel/;管理员凭据仅记录于 Authentication.md,首次创建后清空服务器 .env 中的明文密码。
|
||||
|
||||
## [1.0.0] - 2026-08-24
|
||||
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
# 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 服务”按钮)。
|
||||
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 服务”按钮)与 Beszel 服务器监控(入口 `https://lzwlab.cn/beszel/`,首页提供“📊 服务器状态”按钮)。
|
||||
|
||||
## 功能特性
|
||||
|
||||
- 静态欢迎页:`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 节。
|
||||
- Beszel 服务器监控(`https://lzwlab.cn/beszel/`):Docker 部署 Beszel hub(容器 `beszel`,仅监听 127.0.0.1:8092),nginx 子路径 `/beszel/` 反代并支持 WebSocket;部署记录见 [setup.md](setup.md) 第 12 节。
|
||||
- 完整部署记录:`setup.md` 覆盖从环境检查、安装 nginx、上传站点、HTTPS 配置到验证的全过程,并附踩坑记录。
|
||||
- 文档维护技能:`.dsh/skills/maintain-docs/`,用于在项目修改后自动更新本 README 与 CHANGELOG.md。
|
||||
|
||||
@@ -41,6 +42,8 @@ lzwlab.cn 个人云服务器上的站点部署项目:包含站点欢迎页、n
|
||||
│ └── docker-compose.yml
|
||||
├── gitea/ # Gitea Git 服务 Compose 配置(容器 gitea,SQLite)
|
||||
│ └── docker-compose.yml
|
||||
├── beszel/ # Beszel 服务器监控 Compose 配置(容器 beszel,hub)
|
||||
│ └── docker-compose.yml
|
||||
├── setup.md # 完整部署记录
|
||||
└── .dsh/skills/maintain-docs/ # 文档维护技能(README/CHANGELOG)
|
||||
└── SKILL.md
|
||||
@@ -50,7 +53,7 @@ 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 服务。
|
||||
- 服务器:Docker 29.1.3(apt docker.io + docker-compose-v2,已配置 daocloud 镜像加速)运行 RustDesk hbbs/hbbr、Gitea Git 服务与 Beszel hub。
|
||||
- 域名 `lzwlab.cn` / `www.lzwlab.cn` 的 DNS 已解析到服务器。
|
||||
|
||||
## 安装
|
||||
@@ -85,6 +88,7 @@ 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://lzwlab.cn/beszel/ # 200(Beszel 监控面板)
|
||||
```
|
||||
|
||||
## 部署说明
|
||||
@@ -97,6 +101,7 @@ curl -s -o /dev/null -w "%{http_code}\n" https://lzwlab.cn/git/ # 200(G
|
||||
- 文件快传:应用代码安装到 `/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 节。
|
||||
- Beszel:Compose 文件安装在 `/opt/beszel`(容器 `beszel`,镜像 `henrygd/beszel:latest`,仅监听 `127.0.0.1:8092`,数据卷 `/opt/beszel/beszel_data`);nginx 按 Beszel 官方 sub-path 方案将 `/beszel/` 反代到 8092,`APP_URL=https://lzwlab.cn/beszel`;管理员账号与密码记录在 `Authentication.md`。添加被监控节点需在 Web 面板“Add System”中生成 Agent 配置,详见 [setup.md](setup.md) 第 12 节。
|
||||
|
||||
## 安全与凭据说明
|
||||
|
||||
@@ -108,6 +113,7 @@ curl -s -o /dev/null -w "%{http_code}\n" https://lzwlab.cn/git/ # 200(G
|
||||
- RustDesk 使用 hbbs 首次启动自动生成的自建密钥(服务器 `/opt/rustdesk/data/id_ed25519.pub`),客户端必须配置该 Key 才能连接;Key 需分发给每个客户端使用,本身不属于机密凭据。
|
||||
- Gitea 关闭开放注册并锁定安装器;管理员密码只记录在 `Authentication.md`,对外文档一律用 `$PASS` 代替。
|
||||
- Gitea SSH 克隆端口为 2222,需在腾讯云安全组放行 TCP 2222 后才能从公网使用;HTTPS 克隆与网页访问不受影响。
|
||||
- Beszel hub 容器端口只绑定 127.0.0.1,公网仅经 nginx HTTPS 访问 `/beszel/`;管理员密码只记录在 `Authentication.md`。
|
||||
|
||||
## 参考资料
|
||||
|
||||
@@ -117,5 +123,7 @@ curl -s -o /dev/null -w "%{http_code}\n" https://lzwlab.cn/git/ # 200(G
|
||||
- [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 配置
|
||||
- [beszel/docker-compose.yml](beszel/docker-compose.yml):Beszel 服务器监控 hub Compose 配置
|
||||
- [Beszel 文档](https://www.beszel.dev/zh/guide/what-is-beszel):安装、[子路径反向代理](https://www.beszel.dev/zh/guide/reverse-proxy) 参考
|
||||
- [Gitea 官方文档](https://docs.gitea.com/):安装与反向代理(sub-path)参考
|
||||
- [transfer/](transfer/):文件快传应用源码
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
# Beszel 服务器监控(hub)
|
||||
# 文档:https://www.beszel.dev/zh/guide/getting-started 与 /hub-installation
|
||||
# 注意:子路径部署需设置 APP_URL=https://lzwlab.cn/beszel,nginx 反代见 lzwlab.nginx.conf
|
||||
services:
|
||||
beszel:
|
||||
image: henrygd/beszel:latest
|
||||
container_name: beszel
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- .env # 服务器 /opt/beszel/.env(0600,首次启动时用于创建管理员,之后可清空)
|
||||
environment:
|
||||
APP_URL: https://lzwlab.cn/beszel
|
||||
ports:
|
||||
# Web 仅监听本机 127.0.0.1:8092(本机 8090 已被文件快传占用),由 nginx 经 /beszel/ 反代
|
||||
- "127.0.0.1:8092:8090"
|
||||
volumes:
|
||||
- ./beszel_data:/beszel_data
|
||||
healthcheck:
|
||||
test: ['CMD', '/beszel', 'health', '--url', 'http://localhost:8090']
|
||||
interval: 120s
|
||||
start_period: 10s
|
||||
timeout: 5s
|
||||
@@ -61,6 +61,8 @@
|
||||
<a class="tool-link" href="/transfer/">📦 进入文件快传</a>
|
||||
<br>
|
||||
<a class="tool-link" href="/git/">🐙 进入 Git 服务</a>
|
||||
<br>
|
||||
<a class="tool-link" href="/beszel/">📊 服务器状态</a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -59,4 +59,25 @@ server {
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_read_timeout 300s;
|
||||
}
|
||||
|
||||
# Beszel 服务器监控:/beszel/ 反代到本机 8092 端口(Docker 容器 beszel)
|
||||
# 子路径方案参考 https://www.beszel.dev/zh/guide/reverse-proxy
|
||||
location = /beszel {
|
||||
return 301 /beszel/;
|
||||
}
|
||||
location /beszel/ {
|
||||
client_max_body_size 10M;
|
||||
proxy_read_timeout 360s;
|
||||
proxy_http_version 1.1;
|
||||
# WebSocket(Agent 连接 /api/beszel/agent-connect)必须保留 Upgrade 头
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host $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;
|
||||
# 去掉 /beszel 前缀后转发给 Beszel hub
|
||||
rewrite /beszel/(.*) /$1 break;
|
||||
proxy_pass http://127.0.0.1:8092;
|
||||
}
|
||||
}
|
||||
@@ -495,6 +495,115 @@ sudo docker exec -u git gitea gitea admin user list # 用户列表
|
||||
- Gitea 子路径部署必须同时满足两点:`ROOT_URL` 带 `/git/` 后缀,且 nginx 使用官方 rewrite 方案剥离前缀(直接 `proxy_pass http://127.0.0.1:3000/;` 会破坏前缀与 `%2F` 转义)。
|
||||
- 镜像使用官方新仓库 `docker.gitea.com/gitea:1.27.2`(腾讯云可直连,无需镜像加速);若改用 Docker Hub 的 `gitea/gitea` 则会走 daocloud 加速。
|
||||
|
||||
|
||||
## 11. Komari Lite 服务器监控(已卸载)
|
||||
|
||||
> 该服务曾部署到 https://status.lzwlab.cn/,后按需求从服务器卸载,首页入口已删除。此前的部署配置与完整记录见 git 历史(commit bdffcee / 60b9ce1)。nginx server 级 return 的踩坑保留在下方“附:踩坑记录”第 6 条。
|
||||
|
||||
卸载命令:
|
||||
|
||||
```bash
|
||||
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
|
||||
```
|
||||
|
||||
## 12. 部署 Beszel 服务器监控(https://lzwlab.cn/beszel/)
|
||||
|
||||
### 12.1 方案与要点
|
||||
|
||||
- 组件:Beszel **hub**(基于 PocketBase 的 Web 面板,Docker 镜像 `henrygd/beszel:latest`)。每个被监控服务器再运行一个 **agent**(`henrygd/beszel-agent`),由用户在 Web 面板中添加系统时生成配置。
|
||||
- 入口:按需求将 Beszel 主页反代到主站子路径 `https://lzwlab.cn/beszel/`(首页欢迎页“📊 服务器状态”按钮)。
|
||||
- 端口:Beszel 默认端口 8090 与本机文件快传的 gunicorn(127.0.0.1:8090)冲突,因此容器 8090 只映射到宿主机 `127.0.0.1:8092`。
|
||||
- 子路径关键配置:hub 的 `APP_URL` 必须设为 `https://lzwlab.cn/beszel`,否则通知链接与 Agent 配置生成会指向错误地址。
|
||||
- 参考文档:https://www.beszel.dev/zh/guide/getting-started 、https://www.beszel.dev/zh/guide/hub-installation 、https://www.beszel.dev/zh/guide/reverse-proxy 。
|
||||
|
||||
### 12.2 部署命令
|
||||
|
||||
Compose 文件为仓库内 `beszel/docker-compose.yml`,服务器安装到 `/opt/beszel/`。首次启动通过 `.env`(root:root 0600)设置 `USER_EMAIL` / `USER_PASSWORD` 自动创建第一个管理员:
|
||||
|
||||
```bash
|
||||
# 本地:SFTP 上传 beszel/docker-compose.yml 与临时 .env 到 /tmp
|
||||
# 远程:
|
||||
sudo mkdir -p /opt/beszel
|
||||
sudo install -m 600 -o root -g root /tmp/beszel.env /opt/beszel/.env
|
||||
sudo install -m 644 -o root -g root /tmp/beszel-compose.yml /opt/beszel/docker-compose.yml
|
||||
sudo rm -f /tmp/beszel.env /tmp/beszel-compose.yml
|
||||
cd /opt/beszel && sudo docker compose up -d
|
||||
# 验证管理员已创建后,清空 .env 中的明文密码(管理员账号已持久化在 beszel_data)
|
||||
sudo sh -c 'echo > /opt/beszel/.env' && sudo chmod 600 /opt/beszel/.env
|
||||
cd /opt/beszel && sudo docker compose up -d
|
||||
```
|
||||
|
||||
`.env` 内容(仅首次启动需要,密码记录在 `Authentication.md`):
|
||||
|
||||
```dotenv
|
||||
USER_EMAIL=beszel@lzwlab.cn
|
||||
USER_PASSWORD=$PASS
|
||||
```
|
||||
|
||||
### 12.3 nginx 反代(/beszel/)
|
||||
|
||||
按 Beszel 官方 “使用 Nginx 在子路径提供服务” 方案,在 `lzwlab.nginx.conf` 的 443 server 块新增(已并入仓库配置):
|
||||
|
||||
```nginx
|
||||
location = /beszel {
|
||||
return 301 /beszel/;
|
||||
}
|
||||
location /beszel/ {
|
||||
client_max_body_size 10M;
|
||||
proxy_read_timeout 360s;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host $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;
|
||||
rewrite /beszel/(.*) /$1 break;
|
||||
proxy_pass http://127.0.0.1:8092;
|
||||
}
|
||||
```
|
||||
|
||||
改配置后执行 `sudo nginx -t && sudo systemctl reload nginx`。
|
||||
|
||||
### 12.4 验证结果
|
||||
|
||||
```bash
|
||||
sudo docker ps --filter name=beszel # Up (healthy),127.0.0.1:8092->8090/tcp
|
||||
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8092/ # 200(本机 hub)
|
||||
# 公网:
|
||||
curl -s -o /dev/null -w "%{http_code} -> %{redirect_url}\n" https://lzwlab.cn/beszel
|
||||
# 301 -> https://lzwlab.cn/beszel/
|
||||
curl -s -o /dev/null -w "%{http_code}\n" https://lzwlab.cn/beszel/ # 200
|
||||
curl -sL https://lzwlab.cn/beszel/ | grep -o '<title>.*</title>' # <title>Beszel</title>
|
||||
curl -s https://lzwlab.cn/ | grep -o '服务器状态' # 服务器状态(首页按钮已生效)
|
||||
```
|
||||
|
||||
### 12.5 添加监控节点(Agent)
|
||||
|
||||
1. 打开 `https://lzwlab.cn/beszel/`,用 `Authentication.md` 中的管理员邮箱/密码登录。
|
||||
2. 点击右上角 **Add System**,填写系统名称,选择 WebSocket 或 SSH 连接方式,复制对话框生成的 Docker Compose 或二进制安装命令到目标服务器执行。
|
||||
3. 若目标服务器就是本机,且用 Docker 运行 agent:agent 默认监听 45876,与本机其他服务无端口冲突;WebSocket 模式将 `HUB_URL` 设为 `https://lzwlab.cn/beszel`,`KEY`/`TOKEN` 使用对话框生成的值。若想监控宿主机网络/容器,需给 agent 挂载 `/var/run/docker.sock:ro` 并使用 host 网络。
|
||||
4. 完成后回到对话框点击 **Add System**,系统状态变为绿色即接入成功。
|
||||
|
||||
### 12.6 运维
|
||||
|
||||
```bash
|
||||
cd /opt/beszel && sudo docker compose ps # hub 容器状态
|
||||
sudo docker logs -f beszel # hub 日志
|
||||
cd /opt/beszel && sudo docker compose pull && sudo docker compose up -d # 升级 hub
|
||||
# 备份:PocketBase 数据在数据卷内,直接备份 /opt/beszel/beszel_data/ 即可
|
||||
```
|
||||
|
||||
### 12.7 踩坑
|
||||
|
||||
- Beszel hub 默认端口 8090 与本机文件快传 gunicorn 冲突,必须改映射(本项目使用 127.0.0.1:8092:8090)。
|
||||
- 子路径部署必须设置 `APP_URL=https://lzwlab.cn/beszel`,并让 nginx 用 rewrite 去掉 `/beszel` 前缀;否则通知链接和 Agent 配置会指向错误地址。
|
||||
- `USER_EMAIL` / `USER_PASSWORD` 只在首次启动(尚无用户)时用于创建管理员;创建完成后应清空 `.env`,避免明文密码残留在服务器配置文件中。
|
||||
## 附:踩坑记录
|
||||
|
||||
|
||||
@@ -508,3 +617,4 @@ sudo docker exec -u git gitea gitea admin user list # 用户列表
|
||||
`registry-mirrors`(docker.m.daocloud.io)后解决。
|
||||
5. `remote.py` 的 `--timeout` 参数必须放在远程命令之前(`python remote.py --timeout 500 "命令"`);
|
||||
放在命令之后会被 argparse 当作远程命令的一部分传给服务器执行。
|
||||
6. nginx 中 server 级的 `return` 在 rewrite 阶段(location 匹配之前)执行并直接终结请求:`server { location /.well-known/acme-challenge/ {...} return 301 ...; }` 的挑战路径照样会被 301,导致 certbot 签发失败(LE 跟随 301 到 HTTPS 后得到 404)。必须把重定向写进 `location / { return 301 ...; }` 内,让 location 先参与匹配。
|
||||
|
||||
Reference in New Issue
Block a user