博客

  • Spartan Host 斯巴达西雅图 AS9929 限量版深度测评

    🏆【传家宝系列】Spartan Host 斯巴达西雅图 AS9929 限量版深度测评

    测评声明: 本报告基于 2024 年首发批次硬件参数及 2025-2026 年网络链路实测整理。


    📌 产品背景

    在 VPS 圈内,Spartan Host(斯巴达) 一直以“稳如泰山”的口碑和高性价比的 Cera 线路闻名。2024 年上半年,官方低调推出了基于 AS9929(联通精品网) 线路的限量版套餐。这款年付 $122.40(原价 $153 使用永久 8 折优惠码)的产品,凭借其顶级的硬件配置和近乎完美的网络表现,迅速成为二级市场的“理财产品”。


    🛠 核心硬件规格

    这款机器之所以被称为“水桶机”,是因为它在硬件上没有任何缩水:

    规格项目详细参数
    处理器 (CPU)AMD Ryzen 9 7950X (2 vCPU) – 旗舰级高频表现
    内存 (RAM)2GB DDR5 – 读写速度极快
    存储 (Disk)50GB NVMe SSD – 高 IOPS 保证
    流量 (Traffic)1TB / 月 – 1Gbps 峰值带宽
    防御 (DDoS)默认 20Gbps (由 CeraNetworks 提供,可洗 CC)
    续费价格$122.40 / 年 (永久 8 折后价格)

    🌐 网络线路深度解析

    1. 三网回程 AS9929 (CU II)

    该产品最大的卖点在于其回程线路。AS9929 是联通的精品骨干网,定位对标电信的 CN2 GIA:

    • 电信用户: 借由 Cera 优化的中转,回程强制走 9929,绕过了拥堵的 163 骨干网。
    • 联通用户: 核心受众,直连精品网,延迟与稳定性达到极致。
    • 移动用户: 同样通过 9929 优化回国,解决了西雅图方向延迟抖动较大的通病。

    2. 晚高峰表现

    根据长期监测,该机房在晚高峰(20:00 – 23:00)的丢包率通常保持在 1% 以下,4K 视频起步速度极快,是追求极致观影和远程办公体验的首选。


    🚀 性能实测 (Benchmark)

    CPU 跑分

    得益于 Ryzen 7950X,其单核性能堪称恐怖。在 Geekbench 测试中:

    • 单核得分: ~2100+
    • 多核得分: ~4000+

    注:这使得它在运行 WordPress、Docker 容器或复杂脚本时,响应速度比普通的 Xeon 核心快出 50% 以上。

    磁盘 IO 测试

    “`text
    Reading speed: 2.2 GB/s
    Writing speed: 1.8 GB/s

  • 使用Docker部署WordPress

    一、获取docker安装文档(基于Debian13)

    https://docs.docker.com/engine/install/debian

    二、创建目录(方便管理项目文件以及配置)

    mkdir -p /root/wordpress-app && cd /root/wordpress-app

    三、创建 docker-compose.yml

    使用 nano docker-compose.yml 命令创建文件,并将以下内容粘贴进去。这个配置包含了 WordPress 容器和 MySQL 8.0 数据库。

    services:
      db:
        image: mysql:8.0
        container_name: wordpress_db
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: your_root_password  # 修改为你的数据库管理员密码
          MYSQL_DATABASE: wordpress
          MYSQL_USER: wordpress_user
          MYSQL_PASSWORD: wordpress_password       # 修改为你的数据库用户密码
        volumes:
          - db_data:/var/lib/mysql
        networks:
          - wp_network
    
      wordpress:
        image: wordpress:latest
        container_name: wordpress_app
        restart: always
        ports:
          - "8080:80"  # 外部访问端口,如果你想用 80 端口,改为 "80:80"
        environment:
          WORDPRESS_DB_HOST: db:3306
          WORDPRESS_DB_USER: wordpress_user
          WORDPRESS_DB_PASSWORD: wordpress_password # 必须与上面 db 处的密码一致
          WORDPRESS_DB_NAME: wordpress
        volumes:
          - wp_data:/var/www/html
        depends_on:
          - db
        networks:
          - wp_network
    
    networks:
      wp_network:
        driver: bridge
    
    volumes:
      db_data:
      wp_data:

    四、启动部署

    在当前目录下运行以下命令:(cd /root/wordpress-app)

    docker compose up -d

    -d 表示在后台运行

    五、验证运行状态

    检查容器是否正常启动:

    docker compose ps

    能看到 wordpress_appwordpress_db 两个容器的状态都是 Up

    六、访问与配置

    1. 打开浏览器,输入服务器 IP 地址和端口:http://你的服务器IP:8080
    2. 你将看到 WordPress 的安装界面。
    3. 按照提示选择语言、设置网站标题、管理员账号和密码。

    七、部署Nginx

    想通过域名(如 blog.youer.com)访问,需要您安装最新版的Nginx,配置一个反向代理:

    先执行

    apt update
    apt install -y nginx

    创建反向代理配置文件

    Nginx 的配置建议每个站点一个文件。创建一个新文件(以你的域名命名,例如 blog.conf):

    nano /etc/nginx/sites-available/wordpress

    将以下内容粘贴进去(注意修改 server_name):

    server {
        listen 80;
        server_name blog.youer.com; # 这里改成你解析好的域名
    
        # 限制上传文件大小(WordPress 上传插件或主题需要)
        client_max_body_size 64M;
    
        location / {
            proxy_pass http://127.0.0.1:8080; # 对应 Docker 中的端口
            
            # 传递真实的客户端信息给后端
            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;
    
            # 解决 WordPress 登录重定向循环的问题
            proxy_redirect off;
        }
    }

    启用配置并重启

    在 Debian/Ubuntu 系统中,你需要将文件从 sites-available 软链接到 sites-enabled

    # 1. 建立软链接启用配置
    ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
    
    # 2. 测试配置文件语法是否正确
    nginx -t
    
    # 3. 如果显示 syntax is ok,则重启 Nginx
    systemctl restart nginx

    开启 HTTPS (强烈建议)

    既然用了反代,用 Certbot 申请免费的 Let’s Encrypt 证书非常简单:

    # 安装 Certbot
    apt install -y python3-certbot-nginx
    
    # 运行申请脚本(按提示输入邮箱,选 A 和 Y)
    certbot --nginx -d blog.youer.com

    Certbot 会自动修改你的 Nginx 配置文件,把 80 端口强制跳转到 443

    八、常用维护命令

    查看日志(排查报错):docker compose logs -f

    停止并删除容器docker compose down

    重启服务docker compose restart

    备份数据

    • 数据库数据存在 db_data 卷中。
    • 网页文件存在 wp_data 卷中。
    • 物理路径通常在 /var/lib/docker/volumes/ 下。

  • 使用Python3+Nginx写一个监控补货站点

    第一阶段:基础环境准备

    在开始之前,确保你的 Linux 服务器(Ubuntu/Debian 推荐)环境是干净且完备的。

    • 安装必要系统组件
    # 更新系统
    apt update && apt upgrade -y
    # 安装 Python 环境及工具
    apt install -y python3 python3-pip google-chrome-stable nginx curl psmisc
    • 安装 Python 依赖库
    # DrissionPage: 网页自动化
    # Flask/Flask-CORS: 订阅接口
    # pytz: 上海时区处理
    pip3 install DrissionPage Flask flask_cors pytz --break-system-packages
    

    1.5权限与防火墙配置

    在脚本运行前,必须打通 80 端口访问通道:

    • 创建目录并赋权(使用 nano 编辑时可直接执行以下命令):
    mkdir -p /var/www/html
    chown -R www-data:www-data /var/www/html
    chmod -R 755 /var/www/html
    
    • 放行端口(确保云服务器防火墙和系统防火墙双重放行):
    ufw allow 80/tcp    # 网页访问
    ufw allow 5000/tcp  # 订阅接口
    ufw allow 587/tcp   # 邮件发送

    第二阶段:核心代码部署

    我们需要在 /root 目录下创建两个 Python 文件。

    1. 订阅后端 (sub_server.py)

    nano /root/sub_server.py

    用于接收用户在网页上填写的邮箱。

    • 代码要点:监听 5000 端口,将邮箱写入 subscribers.txt
    • 启动命令nohup python3 /root/sub_server.py > /root/sub_server.log 2>&1 &

    2. 库存监测器 (spartan_monitor.py)

    nano /root/spartan_monitor.py

    这是最核心的脚本。

    • 代码要点
      • MONITOR_CONFIG: 填入你要监控的 PID(ProductID)。
      • MAIL_SETTINGS: 填入你的 QQ 邮箱和 16位授权码
      • SERVER_IP: 必须填入你的公网 IP,否则网页点击订阅会没反应。
      • SAVE_PATH: 默认 /var/www/html/index.html

    第三阶段:文件与目录结构检查

    请确认你的服务器文件布局如下:

    文件路径作用说明备注
    /root/spartan_monitor.py监测脚本手动运行一次测试逻辑
    /root/sub_server.py订阅 API必须保持后台持续运行
    /root/subscribers.txt邮箱数据库权限建议 644,每行一个邮箱
    /root/stock_status.json状态机缓存脚本自动生成,对比上次库存
    /var/www/html/index.html前端展示页确保 Nginx 拥有读取权限

    第四阶段:自动化与持久化 (关键点)

    • 让订阅接口永不掉线

    使用 nohup 启动后,即使你关闭 SSH 窗口,它也会运行。

    nohup python3 /root/sub_server.py > /root/sub_server.log 2>&1 &
    • 让监测脚本定时运行

    我们使用 Crontab 来实现每 5 分钟自动巡检一次。

    crontab -e

    在文件最下方加入:

    # 每5分钟运行一次监测脚本,并输出日志到 cron_log.log 方便排错
    */5 * * * * /usr/bin/python3 /root/spartan_monitor.py >> /root/cron_log.log 2>&1

    第五阶段:如何进行一次完整的“补货测试”?

    为了确认邮件能不能发出来,你不需要等官方补货,可以手动触发:

    • 添加测试邮箱:手动在 /root/subscribers.txt 填入你的测试邮箱。
    • 修改缓存骗过脚本
      • 打开 /root/stock_status.json
      • 找一个现在状态是 AVAILABLE 的产品,把值改成 "SOLD OUT"
    • 手动运行脚本
    python3 /root/spartan_monitor.py

    查看结果:脚本会发现状态从 “SOLD OUT” 变回了真实网页的 “AVAILABLE”,从而判定为“刚刚补货”,立刻发信。

    第六阶段:常见问题排查 (故障手册)

    • 网页时钟不走:检查网页源代码里的 iso_time 是否正确生成,且浏览器没报错。
    • 订阅显示“后端未连接”:检查服务器 5000 端口是否在防火墙(如腾讯云/阿里云的安全组)放行。
    • 邮件报 SSL 错误:确认代码里使用的是 server.starttls() 而不是 SMTP_SSL(对于 587 端口)。
    • DrissionPage 启动失败:通常是因为残留的 Chrome 进程太多,代码里的 pkill -9 chrome 会尝试清理,如果还不行,请增加服务器 Swap 交换内存。

    日常维护与测试

    • 文件与路径一览表
    文件路径作用运维操作
    /root/sub_server.py订阅 API若点击订阅没反应,重启此脚本
    /root/subscribers.txt邮箱数据库可用 nano 手动增删邮箱
    /root/stock_status.json库存记录删掉此文件可强制脚本触发一次提醒
    /var/www/html/index.html前端展示页直接浏览器访问 http://你的IP 查看
    • 如何重启订阅后端?

    如果你改了代码或者发现后端死掉了,先杀掉它再重启:

    pkill -f sub_server.py
    nohup python3 /root/sub_server.py > /root/sub_server.log 2>&1 &

    核心逻辑复习

    本系统采用 “状态机对比” 模式:

    • 第 1 步:从 stock_status.json 获取上一次状态。
    • 第 2 步:爬取 Spartan 官网获取当前状态。
    • 第 3 步:对比。只有 [之前是 SOLD OUT][现在是 AVAILABLE] 时,才会发送邮件。
    • 第 4 步:更新 JSON 文件和网页。

    这套流程现在已经刻在你的服务器里了。下一步:建议你在浏览器打开你的 IP 地址,亲自测试一下订阅功能是否能正常将邮箱写入 /root/subscribers.txt

    注意❗

    Traceback (most recent call last):
    
      File "/root/spartan_monitor.py", line 234, in <module>
    
        check_stock()
    
      File "/root/spartan_monitor.py", line 96, in check_stock
    
        page = ChromiumPage(co)
    
               ^^^^^^^^^^^^^^^^
    
      File "/usr/local/lib/python3.11/dist-packages/DrissionPage/_pages/chromium_page.py", line 23, in __new__
    
        browser = Chromium(addr_or_opts=addr_or_opts)
    
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
      File "/usr/local/lib/python3.11/dist-packages/DrissionPage/_base/chromium.py", line 41, in __new__
    
        is_headless, browser_id, is_exists, ws_only = run_browser(opt)
    
                                                      ^^^^^^^^^^^^^^^^
    
      File "/usr/local/lib/python3.11/dist-packages/DrissionPage/_base/chromium.py", line 501, in run_browser
    
        is_exists = connect_browser(chromium_options)
    
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
      File "/usr/local/lib/python3.11/dist-packages/DrissionPage/_functions/browser.py", line 38, in connect_browser
    
        raise BrowserConnectError(_S._lang.BROWSER_CONNECT_ERR1_, port, port, ADDRESS=address)
    
    DrissionPage.errors.BrowserConnectError: 
    
    Browser connect failed, check whether the port 9222 is a browser and "--remote-debugging-port=9222" startup item is added.
    
    Address: 127.0.0.1:9222
    
    Version: 4.1.1.2
    

    这个错误 DrissionPage.errors.BrowserConnectError 是自动化脚本中最常见的报错之一。它意味着 DrissionPage 无法连接到 Chrome 浏览器

    由于你是在 Linux 服务器上以 root 身份运行,通常由以下三个原因造成:

    1. 核心原因:Chrome 无法在 root 模式下正常启动

    Chrome 默认禁止以 root 身份运行,除非添加 --no-sandbox 参数。虽然代码里写了,但如果后台有残留的 Chrome 进程(死锁状态),DrissionPage 尝试启动新实例时会失败。

    解决方法:彻底清理残留进程 在终端运行:

    # 强制杀死所有 Chrome 进程
    pkill -9 chrome
    pkill -9 chromium

    2. 环境兼容性:缺少运行依赖

    在 Linux (Ubuntu/Debian) 上运行 Headless Chrome 需要一些底层的图形库支持(即使你不使用显示器)。

    解决方法:补充安装依赖

    apt-get update
    apt-get install -y libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxrandr2 libgbm1 libasound2

    3. 代码微调:显式指定无沙盒模式

    请使用 nano /root/spartan_monitor.py 检查你的 check_stock 函数,确保 co (ChromiumOptions) 的设置部分是这样的:

    def check_stock():
        # 强制清理(双重保险)
        os.system("pkill -9 chrome > /dev/null 2>&1")
        
        co = ChromiumOptions()
        co.set_browser_path(CHROME_PATH)
        
        # 必须包含以下几项
        co.set_argument('--no-sandbox')            # root 运行必备
        co.set_argument('--headless')              # 服务器无界面必备
        co.set_argument('--disable-gpu')           # 减少资源占用
        co.set_argument('--disable-dev-shm-usage') # 防止内存不足导致的崩溃
        co.set_argument('--remote-debugging-port=9222') # 显式指定端口
        
        # 如果还是报错,尝试添加这一行,指定一个干净的用户数据目录
        co.set_user_data_path('/tmp/chrome_user_data')
        
        page = ChromiumPage(co)
        # ... 后续代码

    4. 权限问题:/tmp 目录

    有时候 Chrome 无法在默认的 /tmp 目录下创建临时文件。 你可以尝试手动创建刚才指定的目录并赋权:

    mkdir -p /tmp/chrome_user_data
    chmod -R 777 /tmp/chrome_user_data
    

    验证步骤

    修改完代码并清理进程后,直接手动运行:

    python3 /root/spartan_monitor.py

    如果看到以下输出,说明修好了: [2025-xx-xx] 检查中...

  • 使用Docker-Compose部署Nginx Proxy Manager

    本次教程基于Debian12_x86系统

    1. 更新系统

    首先,确保你的系统是最新的。

    apt update && apt upgrade -y

    2. 安装 Docker 和 Docker Compose

    安装 Docker 的必要依赖包

    apt install -y apt-transport-https ca-certificates curl software-properties-common

    添加 Docker 的 GPG 密钥

    curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

    设置 Docker 的 stable 仓库

    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

    更新包列表并安装 Docker :

    apt update
    apt install -y docker-ce docker-ce-cli containerd.io

    安装 Docker Compose

    sudo curl -L "https://github.com/docker/compose/releases/download/v2.39.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose

    创建一个项目目录
    首先,创建一个独立的目录来存放所有相关文件,避免文件混乱。

    mkdir -p ~/nginx-proxy-manager
    cd ~/nginx-proxy-manager

    创建 docker-compose.yml 文件

    nano docker-compose.yml

    粘贴下方代码

    services:
    app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    environment:
    TZ: "Australia/Brisbane"
    ports:
    - '80:80'
    - '81:81'
    - '443:443'
    volumes:
    - ./data:/data
    - ./letsencrypt:/etc/letsencrypt


    保存并退出:

    按 Ctrl + X 退出编辑器

    按 Ctrl + O 保存文件

    按 Enter 确认文件名

    验证文件是否创建成功

    创建完成后,使用以下命令检查文件内容:

    查看文件内容

    cat docker-compose.yml

    或者查看文件详细信息

    ls -la docker-compose.yml

    启动服务

    docker-compose up -d
    

    后续管理 Nginx Proxy Manager Docker 指令:

    # 启动服务
    docker-compose up -d
    
    # 查看日志
    docker-compose logs
    
    # 停止服务
    docker-compose down
    
    # 重启服务
    docker-compose restart

    常见 YAML 格式错误

    • 缩进问题:必须使用空格,不能使用 Tab 键
    • 冒号后面必须有空格key: value 而不是 key:value
    • 字符串引号:可以使用单引号、双引号或不使用引号,但要保持一致
    • 列表格式:使用 - 开头表示列表项

    文稿参考:https://nginxproxymanager.com/

  • 安装 Immich

    要求

    • 具有至少 4GB RAM 和 2 个 CPU 内核的系统。
    • Docker

    设置服务器

    第 1 步 – 下载所需的文件

    创建一个您选择的目录(例如 )来保存 和 文件。./immich-appdocker-compose.yml.env

    移动到您创建的目录

    mkdir ./immich-app
    cd ./immich-app

    通过运行以下命令下载 docker-compose.yml 和 example.env

    获取docker-compose.yml文件

    wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml

    获取 .env 文件

    wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

    或者,您可以从浏览器下载这两个文件,并将它们移动到您创建的目录,在这种情况下,请确保将重命名为 。example.env.env

    步骤 2 – 使用自定义值填充 .env 文件

    默认环境变量内容

    # You can find documentation for all the supported env variables at https://docs.immich.app/install/environment-variables

    # The location where your uploaded files are stored
    UPLOAD_LOCATION=./library

    # The location where your database files are stored. Network shares are not supported for the database
    DB_DATA_LOCATION=./postgres

    # To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
    # TZ=Etc/UTC

    # The Immich version to use. You can pin this to a specific version like "v2.1.0"
    IMMICH_VERSION=v2

    # Connection secret for postgres. You should change it to a random password
    # Please use only the characters `A-Za-z0-9`, without special characters or spaces
    DB_PASSWORD=postgres

    # The values below this line do not need to be changed
    ###################################################################################
    DB_USERNAME=postgres
    DB_DATABASE_NAME=immich
    • 填充您存储备份资产的首选位置。它应该是服务器上具有足够可用空间的新目录。UPLOAD_LOCATION
    • 考虑更改为自定义值。Postgres 不公开,因此此密码仅用于本地身份验证。 为避免 Docker 解析此值时出现问题,最好仅使用字符 。 是一个方便的实用程序。DB_PASSWORDA-Za-z0-9pwgen
    • 通过取消注释该行来设置您的时区。TZ=
    • 如有必要,填充自定义数据库信息。

    第 3 步 – 启动容器

    从您在步骤 1 中创建的目录(现在应该包含您的自定义和文件),运行以下命令以将 Immich 作为后台服务启动:docker-compose.yml.env

    启动容器

    docker compose up -d

    试用 Web 应用

    第一个注册的用户将是管理员用户。管理员用户将能够将其他用户添加到应用程序中。

    要注册管理员用户,请访问 Web 应用程序,然后单击“入门”按钮。http://<machine-ip-address>:2283

    按照提示注册为管理员用户并登录应用程序。

    下载移动应用程序

    手机应用程式可从以下位置下载:

  • Spartanhost 建站首选!

    斯巴达VPS,做站首选!高性能+优化+防御
    口碑商家,稳定性和工单服务都不错!

    西雅图机房,带20G DDoS防护
    (加钱可上200G防护,流量用超限速不停机)

    AMD E5-2690v4(三网4837)
    • 4C4G60G 5T流量(10Gbps)
    💰 月付16刀(优惠后)
    💴 年付8折+优惠码:153.6刀
    链接:https://billing.spartanhost.net/aff.php?aff=2704&pid=341
    优惠码:KVM20
    (E5款性能就相对一般了,当然价格也低一些)

    AMD 7950x/9950x(三网4837)
    • 4C4G100G 5T流量(10Gbps)
    💰 月付19.2刀(优惠后)
    💴 年付8折+优惠码:184刀
    链接:https://billing.spartanhost.net/aff.php?aff=2704&pid=372
    优惠码:KVM20

    AMD 7950x/9950x (9929&CMIN2)
    • 4C4G100G 2T流量(200Mbps)
    💰 月付24刀(无优惠码)
    💴 年付85折:244刀
    链接:https://billing.spartanhost.net/aff.php?aff=2704&pid=426

    🚀【线路简介】
    • AS4837 是联通的主干网络,优于163主干,不及CN2GIA等顶级优化;强制三网4837可以缓解电信走163主干晚高峰的拥堵情况。
    • AS9929 是联通的精品国际线路,相比4837主干,延迟和丢包控制更优,国际出口更稳定。
    • CMIN2 是移动 2022 年推出的精品国际路线,旨在提供类似于电信 CN2 GIA 的高质量网络体验。

    9929+cmin2 对于联通、移动来说都是自家最好的线路;电信则是搭乘了联通的“私人飞机”表现也是非常不错的。

    (带防御的线路,相比不带防御的相同路线,延迟均会有所提高)

    数据参数来自 xiaoge