<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://md5.pw/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lusky0</id>
	<title>md5.pw - 用户贡献 [zh]</title>
	<link rel="self" type="application/atom+xml" href="https://md5.pw/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lusky0"/>
	<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=Special:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/Lusky0"/>
	<updated>2026-06-21T00:19:27Z</updated>
	<subtitle>用户贡献</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://md5.pw/index.php?title=CLIProxyAPI_Docker_%E9%83%A8%E7%BD%B2%E6%95%99%E7%A8%8B&amp;diff=2222</id>
		<title>CLIProxyAPI Docker 部署教程</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=CLIProxyAPI_Docker_%E9%83%A8%E7%BD%B2%E6%95%99%E7%A8%8B&amp;diff=2222"/>
		<updated>2026-05-09T10:46:07Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​创建页面，内容为“# CLIProxyAPI Docker 部署教程  &amp;gt; 环境：Debian 13 | Docker Compose | Nginx 反向代理 &amp;gt; 访问域名：`xxx.com`  ------  ## 一、安装系统依赖  ```bash apt update &amp;amp;&amp;amp; apt upgrade -y apt install -y git nginx curl  # 安装 Docker bash &amp;lt;(curl -fsSL https://get.docker.com) systemctl enable --now docker ```  ------  ## 二、部署 CLIProxyAPI  ### 2.1 克隆项目  ```bash git clone https://github.com/router-for-me/CLIProxyAPI.git cd CLIProxyAPI cp c…”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# CLIProxyAPI Docker 部署教程&lt;br /&gt;
&lt;br /&gt;
&amp;gt; 环境：Debian 13 | Docker Compose | Nginx 反向代理&lt;br /&gt;
&amp;gt; 访问域名：`xxx.com`&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
## 一、安装系统依赖&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
apt update &amp;amp;&amp;amp; apt upgrade -y&lt;br /&gt;
apt install -y git nginx curl&lt;br /&gt;
&lt;br /&gt;
# 安装 Docker&lt;br /&gt;
bash &amp;lt;(curl -fsSL https://get.docker.com)&lt;br /&gt;
systemctl enable --now docker&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
## 二、部署 CLIProxyAPI&lt;br /&gt;
&lt;br /&gt;
### 2.1 克隆项目&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
git clone https://github.com/router-for-me/CLIProxyAPI.git&lt;br /&gt;
cd CLIProxyAPI&lt;br /&gt;
cp config.example.yaml config.yaml&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### 2.2 编辑配置文件&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
nano config.yaml&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
写入以下配置：&lt;br /&gt;
&lt;br /&gt;
```yaml&lt;br /&gt;
port: 8317&lt;br /&gt;
&lt;br /&gt;
auth-dir: &amp;quot;~/.cli-proxy-api&amp;quot;&lt;br /&gt;
&lt;br /&gt;
request-retry: 3&lt;br /&gt;
&lt;br /&gt;
quota-exceeded:&lt;br /&gt;
  switch-project: true&lt;br /&gt;
  switch-preview-model: true&lt;br /&gt;
&lt;br /&gt;
api-keys:&lt;br /&gt;
  - &amp;quot;your-api-key&amp;quot;        # 客户端访问时使用的 Key，先随便填一个，后续可在面板修改&lt;br /&gt;
&lt;br /&gt;
remote-management:&lt;br /&gt;
  allow-remote: true&lt;br /&gt;
  secret-key: &amp;quot;your-management-password&amp;quot;    # 管理面板登录密码&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
&amp;gt; `api-keys` 不能留空，先填一个占位，进管理面板后再改。&lt;br /&gt;
&amp;gt; `secret-key` 首次启动后会自动 bcrypt 加密写回配置，用明文登录即可。&lt;br /&gt;
&lt;br /&gt;
### 2.3 修改 docker-compose.yml&lt;br /&gt;
&lt;br /&gt;
将 8317 和 8085 绑定到本地，OAuth 回调端口保持公网可达：&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
nano docker-compose.yml&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
找到 `ports` 部分，修改为：&lt;br /&gt;
&lt;br /&gt;
```yaml&lt;br /&gt;
ports:&lt;br /&gt;
  - &amp;quot;127.0.0.1:8317:8317&amp;quot;    # 主 API，走 Nginx 反代&lt;br /&gt;
  - &amp;quot;127.0.0.1:8085:8085&amp;quot;    # 内部端口（实际未使用）&lt;br /&gt;
  - &amp;quot;1455:1455&amp;quot;               # OAuth 回调（Claude/Codex）&lt;br /&gt;
  - &amp;quot;54545:54545&amp;quot;             # OAuth 回调（Gemini CLI）&lt;br /&gt;
  - &amp;quot;51121:51121&amp;quot;             # OAuth 回调（Antigravity）&lt;br /&gt;
  - &amp;quot;11451:11451&amp;quot;             # OAuth 回调（其他）&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### 2.4 启动服务&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
bash docker-build.sh&lt;br /&gt;
# 出现选项时输入 1 回车（使用预构建镜像，速度快）&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
或直接：&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
docker compose up -d&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
验证服务正常运行：&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
docker compose ps&lt;br /&gt;
ss -tlnp | grep 8317    # 应看到 127.0.0.1:8317&lt;br /&gt;
tail -f ./logs/main.log  # 实时日志&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
## 三、配置防火墙&lt;br /&gt;
&lt;br /&gt;
放行 OAuth 回调端口（API 端口由 Nginx 代理，无需放行）：&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
# ufw&lt;br /&gt;
ufw allow 1455/tcp&lt;br /&gt;
ufw allow 54545/tcp&lt;br /&gt;
ufw allow 51121/tcp&lt;br /&gt;
ufw allow 11451/tcp&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
## 四、配置 Nginx&lt;br /&gt;
&lt;br /&gt;
### 4.1 创建站点配置&lt;br /&gt;
&lt;br /&gt;
先只写 HTTP 块，等 certbot 申请完证书后再补 HTTPS：&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
cat &amp;gt; /etc/nginx/sites-available/xxx.com &amp;lt;&amp;lt; &#039;EOF&#039;&lt;br /&gt;
server {&lt;br /&gt;
    listen 80;&lt;br /&gt;
    listen [::]:80;&lt;br /&gt;
    server_name xxx.com;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        return 301 https://$host$request_uri;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### 4.2 启用站点&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
ln -s /etc/nginx/sites-available/xxx.com /etc/nginx/sites-enabled/&lt;br /&gt;
nginx -t &amp;amp;&amp;amp; systemctl reload nginx&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### 4.3 申请 HTTPS 证书&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
apt install -y certbot python3-certbot-nginx&lt;br /&gt;
certbot --nginx -d xxx.com&lt;br /&gt;
systemctl enable --now certbot.timer&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### 4.4 替换为完整配置&lt;br /&gt;
&lt;br /&gt;
certbot 申请成功后，覆盖写入完整的 Nginx 配置：&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
cat &amp;gt; /etc/nginx/sites-available/xxx.com &amp;lt;&amp;lt; &#039;EOF&#039;&lt;br /&gt;
# HTTP → 强制跳转 HTTPS&lt;br /&gt;
server {&lt;br /&gt;
    listen 80;&lt;br /&gt;
    listen [::]:80;&lt;br /&gt;
    server_name xxx.com;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        return 301 https://$host$request_uri;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# HTTPS 主配置&lt;br /&gt;
server {&lt;br /&gt;
    listen 443 ssl;&lt;br /&gt;
    listen [::]:443 ssl;&lt;br /&gt;
    server_name xxx.com;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate     /etc/letsencrypt/live/xxx.com/fullchain.pem;&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/xxx.com/privkey.pem;&lt;br /&gt;
    include             /etc/letsencrypt/options-ssl-nginx.conf;&lt;br /&gt;
    ssl_dhparam         /etc/letsencrypt/ssl-dhparams.pem;&lt;br /&gt;
&lt;br /&gt;
    # 主 API&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass         http://127.0.0.1:8317;&lt;br /&gt;
        proxy_http_version 1.1;&lt;br /&gt;
&lt;br /&gt;
        proxy_set_header   Host              $host;&lt;br /&gt;
        proxy_set_header   X-Real-IP         $remote_addr;&lt;br /&gt;
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;&lt;br /&gt;
        proxy_set_header   X-Forwarded-Proto $scheme;&lt;br /&gt;
&lt;br /&gt;
        # SSE 流式响应必须关闭缓冲&lt;br /&gt;
        proxy_buffering    off;&lt;br /&gt;
        proxy_cache        off;&lt;br /&gt;
&lt;br /&gt;
        proxy_read_timeout    300s;&lt;br /&gt;
        proxy_connect_timeout 75s;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
nginx -t &amp;amp;&amp;amp; systemctl reload nginx&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
## 五、访问管理面板&lt;br /&gt;
&lt;br /&gt;
浏览器打开：&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
https://xxx.com/management.html&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
- **服务器地址**：自动填入 `https://xxx.com`&lt;br /&gt;
- **管理密钥**：填写 `config.yaml` 中 `secret-key` 的值&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
## 六、添加 OAuth 认证&lt;br /&gt;
&lt;br /&gt;
在服务器上执行对应命令生成认证链接：&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
cd ~/CLIProxyAPI&lt;br /&gt;
&lt;br /&gt;
# Claude&lt;br /&gt;
docker compose exec cli-proxy-api /CLIProxyAPI/CLIProxyAPI -no-browser --claude-login&lt;br /&gt;
&lt;br /&gt;
# Gemini CLI&lt;br /&gt;
docker compose exec cli-proxy-api /CLIProxyAPI/CLIProxyAPI -no-browser --login&lt;br /&gt;
&lt;br /&gt;
# OpenAI Codex&lt;br /&gt;
docker compose exec cli-proxy-api /CLIProxyAPI/CLIProxyAPI -no-browser --codex-login&lt;br /&gt;
&lt;br /&gt;
# Qwen&lt;br /&gt;
docker compose exec cli-proxy-api /CLIProxyAPI/CLIProxyAPI -no-browser --qwen-login&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
复制输出的 `ssh` 隧道命令，**在本地电脑终端**执行（替换实际 SSH 端口）：&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
ssh -p 你的SSH端口 -R 1455:localhost:1455 root@服务器IP&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
然后在服务器终端复制授权链接 → 本地浏览器打开 → 登录授权 → 认证文件自动保存。&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
## 七、客户端使用&lt;br /&gt;
&lt;br /&gt;
| 项目         | 值                                     |&lt;br /&gt;
| ------------ | -------------------------------------- |&lt;br /&gt;
| API Endpoint | `https://xxx.com`                      |&lt;br /&gt;
| API Key      | `config.yaml` 中 `api-keys` 里设置的值 |&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
## 八、常用运维命令&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
cd ~/CLIProxyAPI&lt;br /&gt;
&lt;br /&gt;
# 查看运行状态&lt;br /&gt;
docker compose ps&lt;br /&gt;
&lt;br /&gt;
# 实时日志&lt;br /&gt;
tail -f ./logs/main.log&lt;br /&gt;
&lt;br /&gt;
# 重启服务&lt;br /&gt;
docker compose restart&lt;br /&gt;
&lt;br /&gt;
# 升级到最新版&lt;br /&gt;
docker compose pull &amp;amp;&amp;amp; docker compose up -d&lt;br /&gt;
&lt;br /&gt;
# 停止服务&lt;br /&gt;
docker compose down&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
## 各端口说明&lt;br /&gt;
&lt;br /&gt;
| 端口    | 用途                    | 是否公网         |&lt;br /&gt;
| ------- | ----------------------- | ---------------- |&lt;br /&gt;
| `8317`  | 主 API 服务             | 否（Nginx 代理） |&lt;br /&gt;
| `8085`  | 内部端口                | 否               |&lt;br /&gt;
| `1455`  | Claude/Codex OAuth 回调 | ✅ 必须           |&lt;br /&gt;
| `54545` | Gemini CLI OAuth 回调   | ✅ 必须           |&lt;br /&gt;
| `51121` | Antigravity OAuth 回调  | ✅ 必须           |&lt;br /&gt;
| `11451` | 其他 OAuth 回调         | ✅ 必须           |&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=%E9%83%A8%E7%BD%B2https%E4%B8%AD%E8%BD%AC%E6%9C%8D%E5%8A%A1%E6%95%99%E7%A8%8B&amp;diff=790</id>
		<title>部署https中转服务教程</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=%E9%83%A8%E7%BD%B2https%E4%B8%AD%E8%BD%AC%E6%9C%8D%E5%8A%A1%E6%95%99%E7%A8%8B&amp;diff=790"/>
		<updated>2025-12-23T09:44:55Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​创建页面，内容为“== 为什么要做https转发 == 因为公司业务在美国，服务器已经使用很久，迁移非常麻烦，现在正好有瓦工稳定机器故想到这个解决方案，可能不是最优，但是目前满足我的业务稳定分享给大家，如有不足欢迎大佬们指点。   == 部署Nginx == ==== 宿主机先创建这些文件 ==== &amp;lt;pre&amp;gt; /home/docker/nginx/nginx.conf /home/docker/nginx/conf.d /home/docker/nginx/log /home/docker/nginx/html /home/…”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 为什么要做https转发 ==&lt;br /&gt;
因为公司业务在美国，服务器已经使用很久，迁移非常麻烦，现在正好有瓦工稳定机器故想到这个解决方案，可能不是最优，但是目前满足我的业务稳定分享给大家，如有不足欢迎大佬们指点。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 部署Nginx ==&lt;br /&gt;
==== 宿主机先创建这些文件 ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/docker/nginx/nginx.conf&lt;br /&gt;
/home/docker/nginx/conf.d&lt;br /&gt;
/home/docker/nginx/log&lt;br /&gt;
/home/docker/nginx/html&lt;br /&gt;
/home/docker/nginx/ssl&lt;br /&gt;
/home/docker/letsencrypt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 安装docker ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -fsSL https://get.docker.com -o install-docker.sh&lt;br /&gt;
sudo sh install-docker.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== 启动脚本startNginx.sh =====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker run \&lt;br /&gt;
-p 80:80 \&lt;br /&gt;
-p 443:443 \&lt;br /&gt;
-p 8081:8081 \&lt;br /&gt;
--name nginx \&lt;br /&gt;
-v /home/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \&lt;br /&gt;
-v /home/docker/nginx/conf.d:/etc/nginx/conf.d \&lt;br /&gt;
-v /home/docker/nginx/log:/var/log/nginx \&lt;br /&gt;
-v /home/docker/nginx/html:/usr/share/nginx/html \&lt;br /&gt;
-v /home/docker/nginx/ssl:/etc/nginx/ssl \&lt;br /&gt;
-v /home/docker/letsencrypt:/var/www/letsencrypt \&lt;br /&gt;
-d nginx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 证书自动续期ssl_auto.sh ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# ==============================&lt;br /&gt;
#  智能 SSL 自动管理脚本&lt;br /&gt;
#  - 每日检查证书剩余天数&lt;br /&gt;
#  - ≤30 天自动续期&lt;br /&gt;
#  - webroot 模式（不中断服务）&lt;br /&gt;
# ========== 运行模式 ==========&lt;br /&gt;
DRY_RUN=false   # true = 测试模式（不真正续期）&lt;br /&gt;
# ==============================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NGINX_CONTAINER=&amp;quot;nginx&amp;quot;&lt;br /&gt;
WEBROOT=&amp;quot;/home/docker/letsencrypt&amp;quot;&lt;br /&gt;
SSL_DIR=&amp;quot;/home/docker/nginx/ssl&amp;quot;&lt;br /&gt;
RENEW_BEFORE_DAYS=30&lt;br /&gt;
&lt;br /&gt;
DOMAINS=(&lt;br /&gt;
  &amp;quot;xxxxx&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;============================&amp;quot;&lt;br /&gt;
echo &amp;quot; 🔐 SSL 自动检查启动 $(date)&amp;quot;&lt;br /&gt;
echo &amp;quot;============================&amp;quot;&lt;br /&gt;
&lt;br /&gt;
mkdir -p &amp;quot;$WEBROOT/.well-known/acme-challenge/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
need_restart_nginx=false&lt;br /&gt;
&lt;br /&gt;
for DOMAIN in &amp;quot;${DOMAINS[@]}&amp;quot;; do&lt;br /&gt;
  CERT_PATH=&amp;quot;/etc/letsencrypt/live/$DOMAIN/fullchain.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;&amp;quot;&lt;br /&gt;
  echo &amp;quot;👉 检查域名：$DOMAIN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  # 如果证书不存在，直接申请&lt;br /&gt;
  if [ ! -f &amp;quot;$CERT_PATH&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;⚠  未发现证书，立即申请&amp;quot;&lt;br /&gt;
    renew=true&lt;br /&gt;
  else&lt;br /&gt;
    # 获取过期时间&lt;br /&gt;
    expire_date=$(openssl x509 -enddate -noout -in &amp;quot;$CERT_PATH&amp;quot; | cut -d= -f2)&lt;br /&gt;
    expire_ts=$(date -d &amp;quot;$expire_date&amp;quot; +%s)&lt;br /&gt;
    now_ts=$(date +%s)&lt;br /&gt;
&lt;br /&gt;
    days_left=$(( (expire_ts - now_ts) / 86400 ))&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;📅 剩余有效期：$days_left 天&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if [ &amp;quot;$days_left&amp;quot; -le &amp;quot;$RENEW_BEFORE_DAYS&amp;quot; ]; then&lt;br /&gt;
      echo &amp;quot;⏰ 低于 $RENEW_BEFORE_DAYS 天，需要续期&amp;quot;&lt;br /&gt;
      renew=true&lt;br /&gt;
    else&lt;br /&gt;
      echo &amp;quot;✅ 证书仍然有效，跳过&amp;quot;&lt;br /&gt;
      renew=false&lt;br /&gt;
    fi&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
#   if [ &amp;quot;$renew&amp;quot; = true ]; then&lt;br /&gt;
#     echo &amp;quot;🔄 正在申请/续期：$DOMAIN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#     certbot certonly \&lt;br /&gt;
#       --webroot -w &amp;quot;$WEBROOT&amp;quot; \&lt;br /&gt;
#       -d &amp;quot;$DOMAIN&amp;quot; \&lt;br /&gt;
#       --non-interactive \&lt;br /&gt;
#       --agree-tos \&lt;br /&gt;
#       -m admin@$DOMAIN&lt;br /&gt;
&lt;br /&gt;
#     if [ $? -ne 0 ]; then&lt;br /&gt;
#       echo &amp;quot;❌ 续期失败：$DOMAIN&amp;quot;&lt;br /&gt;
#       continue&lt;br /&gt;
#     fi&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$renew&amp;quot; = true ]; then&lt;br /&gt;
  echo &amp;quot;🔄 正在申请/续期：$DOMAIN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  CERTBOT_ARGS=(&lt;br /&gt;
    certonly&lt;br /&gt;
    --webroot -w &amp;quot;$WEBROOT&amp;quot;&lt;br /&gt;
    -d &amp;quot;$DOMAIN&amp;quot;&lt;br /&gt;
    --non-interactive&lt;br /&gt;
    --agree-tos&lt;br /&gt;
    -m admin@$DOMAIN&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
  if [ &amp;quot;$DRY_RUN&amp;quot; = true ]; then&lt;br /&gt;
    CERTBOT_ARGS+=(--dry-run)&lt;br /&gt;
    echo &amp;quot;🧪 DRY-RUN 模式：仅测试，不会真正更新证书&amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  certbot &amp;quot;${CERTBOT_ARGS[@]}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  if [ $? -ne 0 ]; then&lt;br /&gt;
    echo &amp;quot;❌ 续期失败：$DOMAIN&amp;quot;&lt;br /&gt;
    # 这里之后你可以接邮件/钉钉告警&lt;br /&gt;
    continue&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;✅ certbot 执行成功：$DOMAIN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  # dry-run 模式不做后续动作&lt;br /&gt;
  if [ &amp;quot;$DRY_RUN&amp;quot; = true ]; then&lt;br /&gt;
    echo &amp;quot;🧪 DRY-RUN 模式：跳过证书复制与 Nginx 重启&amp;quot;&lt;br /&gt;
    continue&lt;br /&gt;
  fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;✅ 续期成功：$DOMAIN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # 复制到 nginx ssl 目录&lt;br /&gt;
    cp -f /etc/letsencrypt/live/$DOMAIN/fullchain.pem \&lt;br /&gt;
      $SSL_DIR/$DOMAIN.pem&lt;br /&gt;
    cp -f /etc/letsencrypt/live/$DOMAIN/privkey.pem \&lt;br /&gt;
      $SSL_DIR/$DOMAIN.key&lt;br /&gt;
&lt;br /&gt;
    chmod 644 $SSL_DIR/$DOMAIN.pem&lt;br /&gt;
    chmod 600 $SSL_DIR/$DOMAIN.key&lt;br /&gt;
&lt;br /&gt;
    need_restart_nginx=true&lt;br /&gt;
    echo &amp;quot;📦 证书已更新到 Nginx 目录&amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
# 如有证书更新才重启 nginx&lt;br /&gt;
if [ &amp;quot;$need_restart_nginx&amp;quot; = true ]; then&lt;br /&gt;
  echo &amp;quot;&amp;quot;&lt;br /&gt;
  echo &amp;quot;🔄 重启 Nginx 容器&amp;quot;&lt;br /&gt;
  docker restart $NGINX_CONTAINER&lt;br /&gt;
  echo &amp;quot;✅ Nginx 重启完成&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;&amp;quot;&lt;br /&gt;
  echo &amp;quot;ℹ️  无证书变更，无需重启 Nginx&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;quot;&lt;br /&gt;
echo &amp;quot;🎉 SSL 检查完成&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Nginx.conf配置文件 ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 80;&lt;br /&gt;
    server_name xxx;&lt;br /&gt;
&lt;br /&gt;
    location /.well-known/acme-challenge/ {&lt;br /&gt;
        alias /var/www/letsencrypt/.well-known/acme-challenge/;&lt;br /&gt;
        try_files $uri =404;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        return 301 https://$host$request_uri;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
upstream put_api_backend {&lt;br /&gt;
    server xxxxx:443;&lt;br /&gt;
    keepalive 100;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
    listen 443 ssl;&lt;br /&gt;
    server_name xxx;&lt;br /&gt;
&lt;br /&gt;
    ssl_certificate     /etc/nginx/ssl/xxx.pem;&lt;br /&gt;
    ssl_certificate_key /etc/nginx/ssl/xxx.key;&lt;br /&gt;
&lt;br /&gt;
    ssl_protocols TLSv1.2 TLSv1.3;&lt;br /&gt;
    ssl_ciphers HIGH:!aNULL:!MD5;&lt;br /&gt;
&lt;br /&gt;
    access_log /var/log/nginx/xxx.access.log;&lt;br /&gt;
    error_log  /var/log/nginx/xxx.error.log warn;&lt;br /&gt;
&lt;br /&gt;
    # ACME challenge（HTTPS 续期仍然需要）&lt;br /&gt;
    location /.well-known/acme-challenge/ {&lt;br /&gt;
        alias /var/www/letsencrypt/.well-known/acme-challenge/;&lt;br /&gt;
        try_files $uri =404;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # API 中转&lt;br /&gt;
    location /api {&lt;br /&gt;
        proxy_pass https://put_api_backend;&lt;br /&gt;
        proxy_ssl_server_name on;&lt;br /&gt;
&lt;br /&gt;
        proxy_http_version 1.1;&lt;br /&gt;
        proxy_set_header Connection &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        proxy_set_header Host xxx;&lt;br /&gt;
        proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
        proxy_set_header X-Forwarded-Proto https;&lt;br /&gt;
&lt;br /&gt;
        proxy_connect_timeout 5s;&lt;br /&gt;
        proxy_read_timeout    30s;&lt;br /&gt;
        proxy_send_timeout    30s;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # 其他路径拒绝&lt;br /&gt;
    location / {&lt;br /&gt;
        return 404;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 重启Nginx ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker exec -it nginx nginx -t&lt;br /&gt;
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok&lt;br /&gt;
nginx: configuration file /etc/nginx/nginx.conf test is successful&lt;br /&gt;
root@ubuntu:/home/docker/nginx# docker exec -it nginx nginx -s reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=%E6%B5%8B%E8%AF%84&amp;diff=784</id>
		<title>测评</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=%E6%B5%8B%E8%AF%84&amp;diff=784"/>
		<updated>2025-12-21T02:45:23Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​创建页面，内容为“  == MageBox-Pro使用测评 ==  {| class=&amp;quot;wikitable&amp;quot; |+ 机器配置 |- ! VPS !! SKU !! CPU !! RAM !! SSD !! Traffic !! IP !! 价格 |- | BandwagonHOST ||  NODESEEK-MEGABOX-PRO || 2C || 2G ||  40G || 2T / 2.5Gbps || IPv4 / IPv6 || **$45.68/Annually**   |}  == 系统参数硬件性能 == thumb  == Tdog — IPv4 质量测试 == {| class=&amp;quot;wikitable&amp;quot; |+ tcp |- ! CM !! CU !! CT |- |  thumb  ||  File:2-1.webp|thum…”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== MageBox-Pro使用测评 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 机器配置&lt;br /&gt;
|-&lt;br /&gt;
! VPS !! SKU !! CPU !! RAM !! SSD !! Traffic !! IP !! 价格&lt;br /&gt;
|-&lt;br /&gt;
| BandwagonHOST ||  NODESEEK-MEGABOX-PRO || 2C || 2G ||  40G || 2T / 2.5Gbps || IPv4 / IPv6 || **$45.68/Annually**  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 系统参数硬件性能 ==&lt;br /&gt;
[[File:Magebox配置信息.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Tdog — IPv4 质量测试 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ tcp&lt;br /&gt;
|-&lt;br /&gt;
! CM !! CU !! CT&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
[[File:1-1.webp|thumb]]&lt;br /&gt;
 || &lt;br /&gt;
[[File:2-1.webp|thumb]]&lt;br /&gt;
 || &lt;br /&gt;
[[File:31.webp|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Connectivity ==&lt;br /&gt;
[[File:41.webp|thumb]]&lt;br /&gt;
&lt;br /&gt;
== 去程路由 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 去程路由&lt;br /&gt;
|-&lt;br /&gt;
! 区域 !! CM !! CU !! CT&lt;br /&gt;
|-&lt;br /&gt;
| 北京 || &lt;br /&gt;
[[File:51.webp|thumb]]&lt;br /&gt;
 || &lt;br /&gt;
[[File:61.webp|thumb]]&lt;br /&gt;
 || &lt;br /&gt;
[[File:71.webp|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| 上海 || &lt;br /&gt;
[[File:81.webp|thumb]]&lt;br /&gt;
 || &lt;br /&gt;
[[File:91.webp|thumb]]&lt;br /&gt;
 || &lt;br /&gt;
[[File:101.webp|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| 广东 || &lt;br /&gt;
[[File:111.webp|thumb]]&lt;br /&gt;
 || &lt;br /&gt;
[[File:121.webp|thumb]]&lt;br /&gt;
 || &lt;br /&gt;
[[File:131.webp|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 回程路由 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 回程路由&lt;br /&gt;
|-&lt;br /&gt;
! 区域 !! 北京 !! 上海 !! 广东&lt;br /&gt;
|-&lt;br /&gt;
| IPv4 || &lt;br /&gt;
[[File:141.webp|thumb]]&lt;br /&gt;
 || &lt;br /&gt;
[[File:151.webp|thumb]]&lt;br /&gt;
 || &lt;br /&gt;
[[File:16.webp|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 国内三网延迟 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 国内三网延迟&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
[[File:17.webp|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IP 质量 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ IP 质量&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
[[File:18.webp|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 流媒体解锁 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 流媒体解锁&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
[[File:19.webp|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 全网请求时间 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
[[File:20.webp|thumb]]&lt;br /&gt;
 || &lt;br /&gt;
[[File:21.webp|thumb]]&lt;br /&gt;
 || &lt;br /&gt;
[[File:22.webp|thumb]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
[[File:23.webp|thumb]]&lt;br /&gt;
 || &lt;br /&gt;
[[File:24.webp|thumb]]&lt;br /&gt;
 || &lt;br /&gt;
[[File:25.webp|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 心跳线 ==&lt;br /&gt;
[[File:26.webp|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
== Speedtest ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:27.webp|thumb]] || &lt;br /&gt;
[[File:28.webp|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Speedtest（本地电信 100M · Reality） ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 多线程 !! 标题文本&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
[[File:29.webp|thumb]]&lt;br /&gt;
 || &lt;br /&gt;
[[File:30.webp|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Cloudflare（本地电信 100M · Reality） ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
[[File:32.webp|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fast（本地电信 100M · Reality） ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
[[File:33.webp|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fiber （本地电信 100M · Reality） ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
[[File:34.webp|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== YouTube（本地电信 100M · Reality） ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:35.webp|thumb]] || [[File:36.webp|thumb]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:36.webp&amp;diff=780</id>
		<title>File:36.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:36.webp&amp;diff=780"/>
		<updated>2025-12-20T06:58:04Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;36&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:35.webp&amp;diff=779</id>
		<title>File:35.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:35.webp&amp;diff=779"/>
		<updated>2025-12-20T06:57:40Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;35&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:34.webp&amp;diff=778</id>
		<title>File:34.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:34.webp&amp;diff=778"/>
		<updated>2025-12-20T06:55:42Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;34&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:33.webp&amp;diff=777</id>
		<title>File:33.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:33.webp&amp;diff=777"/>
		<updated>2025-12-20T06:54:41Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;33&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:32.webp&amp;diff=776</id>
		<title>File:32.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:32.webp&amp;diff=776"/>
		<updated>2025-12-20T06:53:53Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;32&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:30.webp&amp;diff=775</id>
		<title>File:30.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:30.webp&amp;diff=775"/>
		<updated>2025-12-20T06:52:25Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;30&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:29.webp&amp;diff=774</id>
		<title>File:29.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:29.webp&amp;diff=774"/>
		<updated>2025-12-20T06:51:55Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;29&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:28.webp&amp;diff=773</id>
		<title>File:28.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:28.webp&amp;diff=773"/>
		<updated>2025-12-20T06:49:40Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;28&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:27.webp&amp;diff=772</id>
		<title>File:27.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:27.webp&amp;diff=772"/>
		<updated>2025-12-20T06:48:02Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;27&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:26.webp&amp;diff=771</id>
		<title>File:26.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:26.webp&amp;diff=771"/>
		<updated>2025-12-20T06:45:22Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;26&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:25.webp&amp;diff=770</id>
		<title>File:25.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:25.webp&amp;diff=770"/>
		<updated>2025-12-20T06:43:56Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;25&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:24.webp&amp;diff=769</id>
		<title>File:24.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:24.webp&amp;diff=769"/>
		<updated>2025-12-20T06:43:31Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;24&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:23.webp&amp;diff=768</id>
		<title>File:23.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:23.webp&amp;diff=768"/>
		<updated>2025-12-20T06:43:00Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;23&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:22.webp&amp;diff=767</id>
		<title>File:22.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:22.webp&amp;diff=767"/>
		<updated>2025-12-20T06:42:31Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;22&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:21.webp&amp;diff=766</id>
		<title>File:21.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:21.webp&amp;diff=766"/>
		<updated>2025-12-20T06:42:01Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;21&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:20.webp&amp;diff=765</id>
		<title>File:20.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:20.webp&amp;diff=765"/>
		<updated>2025-12-20T06:41:31Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;20&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:19.webp&amp;diff=764</id>
		<title>File:19.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:19.webp&amp;diff=764"/>
		<updated>2025-12-20T06:37:27Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;19&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:18.webp&amp;diff=763</id>
		<title>File:18.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:18.webp&amp;diff=763"/>
		<updated>2025-12-20T06:36:27Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;18&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:17.webp&amp;diff=762</id>
		<title>File:17.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:17.webp&amp;diff=762"/>
		<updated>2025-12-20T06:34:49Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;17&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:16.webp&amp;diff=761</id>
		<title>File:16.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:16.webp&amp;diff=761"/>
		<updated>2025-12-20T06:32:50Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;16&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:151.webp&amp;diff=760</id>
		<title>File:151.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:151.webp&amp;diff=760"/>
		<updated>2025-12-20T06:31:43Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;151&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:141.webp&amp;diff=759</id>
		<title>File:141.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:141.webp&amp;diff=759"/>
		<updated>2025-12-20T06:23:54Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;141&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:131.webp&amp;diff=758</id>
		<title>File:131.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:131.webp&amp;diff=758"/>
		<updated>2025-12-20T06:21:34Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;131&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:121.webp&amp;diff=757</id>
		<title>File:121.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:121.webp&amp;diff=757"/>
		<updated>2025-12-20T06:21:00Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;121&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:111.webp&amp;diff=756</id>
		<title>File:111.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:111.webp&amp;diff=756"/>
		<updated>2025-12-20T06:20:31Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;111&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:101.webp&amp;diff=755</id>
		<title>File:101.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:101.webp&amp;diff=755"/>
		<updated>2025-12-20T06:19:58Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;101&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:91.webp&amp;diff=754</id>
		<title>File:91.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:91.webp&amp;diff=754"/>
		<updated>2025-12-20T06:19:26Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;91&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:81.webp&amp;diff=753</id>
		<title>File:81.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:81.webp&amp;diff=753"/>
		<updated>2025-12-20T06:18:55Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;81&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:71.webp&amp;diff=752</id>
		<title>File:71.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:71.webp&amp;diff=752"/>
		<updated>2025-12-20T06:18:18Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;71&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:61.webp&amp;diff=751</id>
		<title>File:61.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:61.webp&amp;diff=751"/>
		<updated>2025-12-20T06:17:48Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;61&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:51.webp&amp;diff=750</id>
		<title>File:51.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:51.webp&amp;diff=750"/>
		<updated>2025-12-20T06:16:32Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;51&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:41.webp&amp;diff=749</id>
		<title>File:41.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:41.webp&amp;diff=749"/>
		<updated>2025-12-20T06:13:21Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;21&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:31.webp&amp;diff=748</id>
		<title>File:31.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:31.webp&amp;diff=748"/>
		<updated>2025-12-20T06:11:33Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;12&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:2-1.webp&amp;diff=747</id>
		<title>File:2-1.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:2-1.webp&amp;diff=747"/>
		<updated>2025-12-20T06:10:57Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;2&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:1-1.webp&amp;diff=746</id>
		<title>File:1-1.webp</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:1-1.webp&amp;diff=746"/>
		<updated>2025-12-20T06:09:55Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;1&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:Magebox%E9%85%8D%E7%BD%AE%E4%BF%A1%E6%81%AF.png&amp;diff=745</id>
		<title>File:Magebox配置信息.png</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:Magebox%E9%85%8D%E7%BD%AE%E4%BF%A1%E6%81%AF.png&amp;diff=745"/>
		<updated>2025-12-20T06:05:15Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;magebox配置信息&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=File:%E7%93%A6%E5%B7%A5%E7%89%B9%E4%BB%B7%E9%85%8D%E7%BD%AE.jpg&amp;diff=555</id>
		<title>File:瓦工特价配置.jpg</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=File:%E7%93%A6%E5%B7%A5%E7%89%B9%E4%BB%B7%E9%85%8D%E7%BD%AE.jpg&amp;diff=555"/>
		<updated>2025-12-05T14:54:57Z</updated>

		<summary type="html">&lt;p&gt;Lusky0：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;mageboxpro清单&lt;/div&gt;</summary>
		<author><name>Lusky0</name></author>
	</entry>
</feed>