阿里云Ubuntu24搭建个人云平台

最近我购买了个人域名,一直在思考怎么去搭建个人全栈云平台,包括个人博客、品牌站点、管理后台(前后端分离)、小程序/APP后台服务、OpenClaw等。

之前有试过方案是静态网站托管在Cloudflare Pages上,另外将OpenClaw和其他动态服务都部署在家里的Raspberry上面, 然后再通过Cloudflare Tunnel做内网穿透。

但是这里有个问题就是域名没办法做ICP备案了,因为域名备案必须有一个真实托管IP。因此最终我还是选择了阿里云主机。 这里我选择阿里云性价比最高的轻量级应用服务器,首次购买一年才几百块钱。刚开始不用买太好的配置,先把东西做出来后面再升级。

最终我的架构是这样子的:

  • 个人品牌站点、管理后台服务、小程序/APP后台服务全部部署在阿里云轻量级应用服务器上。
  • 所有服务统一使用Nginx反向代理,通过二级子域名去访问。
  • Nginx开启SSL/TLS,并且Nginx上面要配置Let’s Encrypt证书(支持泛域名),使用Certbot脚本支持自动延期证书。
  • 个人品牌站点统一使用www域名www.xiongneng.me去访问,并开启CDN加速。
  • 管理后台(包括前端页面和后端服务)使用子域名admin.xiongneng.me去访问。
  • 小程序/APP后台服务使用统一的FastAPI服务,并通过api.xiongneng.me去访问。
  • 所有后端服务中涉及到数据库全部使用SQLite实现。
  • 所有前端页面中涉及到图片资源的全部使用腾讯云COS服务,并开启CDN加速。
  • 家里的一台Raspberry用于安装OpenClaw智能体平台。并通过长连接方式连接飞书平台,避免开放公网IP。

云服务器基础环境准备

登录服务器后,首先更新系统并安装项目所需的必要软件包。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 1. 更新系统并安装基础依赖
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget gnupg2 ca-certificates lsb-release ufw build-essential python3 python3-pip python3-venv git nginx

# 2. 安装 Node.js 22.x (用于管理后台前端构建)
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -  # 设置 NodeSource 仓库
sudo apt-get install -y nodejs       # 安装 Node.js
node -v && npm -v                    # 验证安装

# 3. 配置基础防火墙 (ufw)
sudo ufw allow OpenSSH               # 允许 SSH (端口 22)
sudo ufw allow 'Nginx Full'          # 允许 Nginx (端口 80 和 443)
sudo ufw enable                      # 启用防火墙

安装并配置 Nginx 反向代理

Nginx 将作为所有服务的统一入口,负责接收外部请求并将其分发到对应的内部服务。

1
2
3
4
5
6
7
# 1. 确认 Nginx 已安装并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx

# 2. 配置 Nginx 核心文件 (/etc/nginx/nginx.conf)
# 使用你熟悉的编辑器打开它 (如 vim 或 nano)
sudo vim /etc/nginx/nginx.conf

在 http 块内,增加或修改以下配置,用于优化反向代理性能:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
http {
    # ... (保留原有基础配置) ...
    server_tokens off; # 隐藏 Nginx 版本号,增强安全性

    # 代理缓冲区优化
    proxy_buffer_size 128k;
    proxy_buffers 4 256k;
    proxy_busy_buffers_size 256k;

    # 客户端请求体大小限制 (可按需调整)
    client_max_body_size 20m;

    # 引入所有站点独立的配置文件
    include /etc/nginx/conf.d/*.conf;
}

保存文件后,测试配置并重载 Nginx

1
2
sudo nginx -t
sudo systemctl reload nginx

申请Let’s Encrypt证书并自动续期

本步骤将申请一个覆盖一级域名 xiongneng.me*.xiongneng.me 的泛域名证书,并设置自动续期任务。

配置阿里云

登录阿里云RAM访问控制页面。创建一个RAM用户,勾选“OpenAPI调用访问”,并为它授权 AliyunDNSFullAccess 权限。 生成并记录下这个用户的 AccessKey ID 和 AccessKey Secret。 在服务器上创建一个凭据文件,如 /opt/certbot_dns/credentials.ini,并写入以下内容

1
2
dns_aliyun_access_key = 你的AccessKey_ID
dns_aliyun_access_key_secret = 你的AccessKey_Secret

必须设置权限,保护密钥文件安全:

1
sudo chmod 600 /opt/certbot_dns/credentials.ini

安装插件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 创建 Python 虚拟环境
sudo apt install python3-venv
sudo python3 -m venv /opt/certbot
# 在虚拟环境中安装 Certbot 和阿里云插件
# 升级 pip
sudo /opt/certbot/bin/pip install --upgrade pip
# 安装 certbot 和阿里云插件 (以下为一行命令)
sudo /opt/certbot/bin/pip install certbot certbot-dns-aliyun
# 建立软链接
sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot

申请证书

1
2
3
4
5
6
7
sudo certbot certonly \
  --authenticator dns-aliyun \
  --dns-aliyun-credentials /opt/certbot_dns/credentials.ini \
  -d "xiongneng.me" \
  -d "*.xiongneng.me" \
  --agree-tos \
  --email yidao620@163.com

生成成功日志:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
Account registered.
Requesting a certificate for xiongneng.me and *.xiongneng.me
Waiting 30 seconds for DNS changes to propagate

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/xiongneng.me/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/xiongneng.me/privkey.pem
This certificate expires on 2026-08-08.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

设置自动续期与重载 Nginx

直接编辑 root 用户的 crontab:

1
sudo EDITOR=vim crontab -e

在文件末尾添加下面这一行即可:

1
0 2 * * * /opt/certbot/bin/certbot renew --quiet --deploy-hook "systemctl reload nginx"

解释:

  • 0 2 * * *:每天凌晨 2 点执行。
  • /opt/certbot/bin/certbot renew:调用虚拟环境中的 certbot 检查并续期证书。
  • --quiet:安静模式,没有错误不输出。
  • --deploy-hook "systemctl reload nginx":自动完成脚本的工作——续期成功后立即重载 Nginx,无需额外的脚本文件。

测试自动续期是否能成功。看到 Congratulations, all simulated renewals succeeded 就代表一切就绪。

1
sudo /opt/certbot/bin/certbot renew --dry-run

部署各个服务

管理后台前端(Vue)

假设管理后台为 admin.xiongneng.me

  • 本地打包:在项目根目录下执行 npm run build,得到 dist 文件夹。
  • 上传文件:将 dist 目录下的所有内容上传至服务器 /var/www/admin
  • Nginx 配置:创建文件 /etc/nginx/conf.d/admin.conf,内容如下
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
server {
    listen 443 ssl http2;          # 使用 SSL 并启用 HTTP/2 加速
    server_name admin.xiongneng.me;

    # 指定 SSL 证书路径
    ssl_certificate /etc/letsencrypt/live/xiongneng.me/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/xiongneng.me/privkey.pem;

    root /var/www/admin;           # 指定项目文件根目录
    index index.html;

    location / {
        try_files $uri $uri/ /index.html; # 处理 Vue Router 的 history 模式
    }
}

重载 Nginx:sudo nginx -t && sudo systemctl reload nginx

品牌站点/个人博客(静态站)

类似于管理后台前端服务,假设品牌站为 www.xiongneng.me。将静态网站文件上传至 /var/www/main。 Nginx 配置 /etc/nginx/conf.d/main.conf,结构与 admin.conf 类似,只需修改 server_nameroot 即可。

若品牌站点/个人博客使用静态站点生成器(如Hugo、Hexo),部署完成后的访问加速补充步骤请见 CDN 章节。

FastAPI 后端服务

这部分将部署一个统一的 API 服务,为管理后台前端、小程序和 APP 提供后端API数据支持。

环境准备:创建项目目录并搭建 Python 虚拟环境:

1
2
3
mkdir -p /opt/fastapi-app && cd /opt/fastapi-app
python3 -m venv venv        # 创建虚拟环境
source venv/bin/activate    # 激活虚拟环境

安装依赖

1
2
3
pip install fastapi uvicorn[standard] gunicorn
# 如果有 requirements.txt 文件,则执行:
pip install -r requirements.txt

使用 systemd 来管理 FastAPI 进程,确保其稳定运行和开机自启。创建文件 /etc/systemd/system/fastapi.service

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[Unit]
Description=FastAPI Application
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/opt/fastapi-app
Environment="PATH=/opt/fastapi-app/venv/bin"
ExecStart=/opt/fastapi-app/venv/bin/gunicorn -k uvicorn.workers.UvicornWorker -w 4 -b 127.0.0.1:8000 app.main:app
Restart=always

[Install]
WantedBy=multi-user.target

参数说明:

  • -w 4:表示启动4个工作进程,可根据服务器配置调整。
  • app.main:app:请替换为你项目中实际的模块和 FastAPI 实例位置

启动并设置服务:

1
2
3
4
sudo systemctl daemon-reload
sudo systemctl start fastapi.service
sudo systemctl enable fastapi.service
sudo systemctl status fastapi.service # 检查运行状态

小程序与 APP 后台(统一 API 服务)

在 Nginx 层面,通过不同 location 块或不同的 server_name 前缀来区分各端 API 请求,统一转发至上述 FastAPI 服务。

创建 Nginx 配置:/etc/nginx/conf.d/api.conf,内容如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
server {
    listen 443 ssl http2;
    # 可同时监听多个域名
    server_name api.xiongneng.me mini.xiongneng.me app.xiongneng.me;
    ssl_certificate /etc/letsencrypt/live/xiongneng.me/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/xiongneng.me/privkey.pem;

    location / {
        # 将请求转发到本地 8000 端口的 FastAPI 服务
        proxy_pass http://127.0.0.1:8000;

        # 设置代理头信息
        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;

        # 超时设置(按需调整)
        proxy_connect_timeout 60s;
        proxy_read_timeout 120s;
    }
}

重要: 在微信小程序后台,需要将 https://api.xiongneng.mehttps://mini.xiongneng.me 都配置为合法的 request 域名。

配置腾讯云COS

COS 绑定 static.xiongneng.me

前置条件(先确认满足)

  1. 域名 xiongneng.me 已有完整 ICP 备案(你已经办好,直接可用)
  2. 存储桶地域为国内(广州 / 上海等,非香港)
  3. 域名解析服务商:阿里云云 DNS(你的域名在阿里云,解析在阿里云后台操作)

一、腾讯云 COS 控制台添加自定义域名

  • 登录腾讯云对象存储 COS 控制台 → 进入你的图片存储桶
  • 左侧菜单:域名与传输管理 → 自定义源站域名
  • 点击【添加域名】,填写:
    • 域名:static.xiongneng.me
    • 源站类型:默认源站(仅存图片,不用静态网站源站)
    • CNAME:自动生成,复制保存(格式:桶名-APPID.cos.ap-guangzhou.myqcloud.com
    • 强制 HTTPS:勾选开启(全站 https,适配 FixIt 博客)
  • 点击【添加】,此时会提示需要配置 CNAME 解析,先放着页面,去阿里云 DNS 操作

二、阿里云 DNS 添加 CNAME 解析(关键步骤)

  • 登录阿里云云解析 DNS → 找到域名 xiongneng.me → 解析设置
  • 添加记录:
    • 记录类型:CNAME
    • 主机记录:static(只填子域名前缀,不用写完整域名)
    • 记录值:刚才 COS 页面复制的 CNAME 地址(xxx.cos.ap-guangzhou.myqcloud.com
    • TTL:10 分钟(默认即可)
  • 保存解析,等待10~30 分钟生效(各地 DNS 缓存不同)

三、申请免费 SSL 证书(实现 https 访问图片)

  • 腾讯云控制台 → SSL 证书 → 申请免费证书(DV 域名型)
  • 域名填写:static.xiongneng.me
  • 验证方式:DNS 手动验证

提交申请,进入证书验证页面,会给出两组关键信息:

  • 记录类型:TXT
  • 主机记录:一串下划线开头字符串(如_xxxx.static
  • 记录值:一长串随机字符

阿里云云解析 DNS → xiongneng.me → 解析设置 → 添加记录

  • 记录类型:TXT
  • 主机记录:复制证书页面给出的完整前缀(例如_abc123.static,不要漏 static)
  • 记录值:复制页面一长串验证文本
  • TTL:10 分钟,保存

返回腾讯云控制台

  • 等待 10~30 分钟 DNS 缓存生效,点击验证域名。显示证书申请成功
  • 开启自动续费,证书到期前30天自动生成一张新的待验证证书。
  • 返回 COS「自定义源站域名」页面,点击【绑定证书】,选中刚申请好的证书,确认绑定

证书更新 默认免费证书有效期只有90天,快到期的时候要手动更新证书。

  • 由于我上面设置了“自动续费”,到期前30天,自动生成一张新的待验证证书。
  • 去阿里云 DNS,给xiongneng.me新增 TXT 解析,等待 20~30 分钟生效;
  • 返回腾讯 SSL 控制台刷新验证,验证通过后证书签发成功;
  • 进入 COS 存储桶→自定义域名,找到static.xiongneng.me,重新绑定刚签发的新证书;
  • 开启强制 HTTPS,等待 30 分钟 CDN 全网同步,无痕窗口测试图片链接。

四、校验是否配置成功

  1. 浏览器访问:https://static.xiongneng.me/你的图片路径
  2. 正常显示图片(不会弹出下载,解决 2024 年后新桶默认域名强制下载问题)
  3. 无证书不安全提示,https 锁标正常

五、配套安全配置

1、防盗链(存储桶→安全管理→防盗链) 白名单填入:

1
2
3
4
5
xiongneng.me
www.xiongneng.me
github.com
localhost
127.0.0.1

2、CORS 跨域(FixIt 图片灯箱 / 懒加载必备) 安全管理→跨域访问 CORS,新增规则:

  • 允许来源:https://*.xiongneng.me
  • 允许方法:GET
  • 允许头部:*
  • 缓存时长:86400

六、Hugo FixIt 全站替换图片地址

  • 旧地址(COS 默认域名)https://xxx-xxx.cos.ap-guangzhou.myqcloud.com/img/photo.jpg
  • 新地址(自定义子域名)https://static.xiongneng.me/img/photo.jpg

ICP备案流程

在国内,ICP备案是网站正式上线前必须完成的合规流程。这个过程可以简单理解为:你提供个人资料和网站信息,阿里云初审,再由工信部终审。 整个过程在阿里云系统里操作很方便,通常有5个步骤,快的话1-2天,慢则20天左右

  1. 提交材料:登录阿里云备案系统(beian.aliyun.com),按要求填写你的个人信息(姓名、身份证号、地址等)和网站信息,并上传身份证、完成人脸识别等。
  2. 阿里云初审:阿里云会在1-2个工作日内完成审核。过程中可能会电话联系你核实信息,请保持手机畅通。
  3. 提交管局:初审通过后,阿里云会将你的备案申请正式提交给你所在省市的通信管理局(工信部)。
  4. 工信部短信核验:提交管局后,你会收到工信部发送的短信核验码,需要在24小时内登录工信部备案系统完成核验,否则申请会被视为放弃。
  5. 管局审核:完成核验后,管局会进行最终审核,这个过程通常需要1-20个工作日不等。

备案期间网站能访问,但是又不能有内容,其实有点搞笑。但是又不得不这样做。因此需要修改Nginx,让它默认返回503。 编辑/etc/nginx/nginx.conf ,创建一个最高优先级的 server 块,放在所有server前面,并重新加载 Nginx 即可:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
server {
    listen 80 default_server;
    # 如果有 IPv6 也需要监听
    listen [::]:80 default_server;
    server_name _;

    # 返回一个符合备案审核的响应
    return 503;
    # 或者更友好一点,但同样合规
    # return 200 "Temporarily Unavailable for ICP Filing.";
}
include /etc/nginx/conf.d/*.conf;
#include /etc/nginx/sites-enabled/*;

然后执行:

1
2
sudo nginx -t                # 测试配置
sudo systemctl reload nginx  # 重载,无需重启

后续如果网站IP变更了,还需要走变更申请流程。

公安联网备案

ICP备案完成后,还要去公安联网备案。注意备案之前不能开启CDN加速。一定要使用A记录将网站域名指向真实主机IP地址,等通过后再开启CDN。 地址:https://beian.mps.gov.cn/

后续如果网站IP变更了,还需要走变更申请流程。

配置ESA加速

在阿里云的体系里,能加速网站的“边缘安全加速资源包”主要对应 边缘安全加速 ESA (Edge Security Acceleration)。 它很适合你轻量服务器上的个人博客,官网甚至提供了免费套餐。

必须先删除原来的A记录,才能添加CNAME记录。而是DNS协议本身的技术限制:CNAME记录不能与任何其他类型的记录共存于同一个子域名下。 也就是说,对于 xiongneng.mewww.xiongneng.me,要么用A记录(直接指向IP),要么用CNAME记录(指向ESA的别名),两者不能同时存在。

进入ESA控制台后,你会看到“站点管理”的界面。要开始为你的博客接入服务,只需:

  • 点击 “新增站点”。
  • 根据页面指引,填写你的域名、选择加速区域(建议选择“中国内地”)和接入方式(如 CNAME)。
  • 选择套餐类型这一步非常关键,请务必选择 “免费版”(即我们之前讨论过的Entrance套餐),不要误选付费版。

配置 ESA 回源协议为 HTTPS。进入 ESA 控制台,在你的站点管理中找到回源规则配置,将回源协议明确设置为 HTTPS,回源端口设置为 443。

证书的配置就在 ESA 控制台里,路径是固定的:进入你的站点详情页,在左侧导航栏就能找到“边缘证书”入口。

  • 进入站点管理:登录 ESA 控制台,在“站点管理”页面点击你的目标站点,进入详情页。
  • 找到功能入口:在详情页的左侧导航栏中,找到并点击 “边缘证书”。基础和高级设置都在这里。注意这里最好申请泛域名(如 *.xiongneng.me
  • 确认HTTPS状态:进入“边缘证书”页面后,请先检查“配置状态”。如果显示“已配置”但你的网站还是HTTP访问,可以在这里开启 “强制HTTPS” 功能。

如果申请免费证书报错:

1
2
若您的 NS 站点已激活,或 CNAME 站点证书域名的 DNS 已解析至 ESA,则免费证书申请大约需要5-10分钟;
否则需要您在1小时内自行配置证书校验 DCV 信息。您可以在异步任务中查看免费证书申请状态。

则需要配置托管DCV,再次申请即可成功:

  • 获取CNAME信息:在ESA控制台左侧菜单找到“托管DCV”,复制系统生成的CNAME信息。
  • 添加CNAME记录:前往你的DNS服务商控制台,添加一条新的CNAME记录。记录类型选择CNAME,主机记录和记录值粘贴刚才复制的内容。
  • 验证生效:配置完成后,等待几分钟使其生效

个人网站切换到阿里云OSS

后来我发现个人网站完全可以使用阿里云OSS免费托管,并且也支持域名解析和备案。这样我就不用再购买ECS服务器了。省下来的钱可以购买Mac mini主机作为24小时开发机器。暂时可以在树莓派上面玩一下Hermes Agent即可,后续买了Mac mini就全部迁移过去。

首先开通OSS服务,并创建两个桶,一个用于存放博客xiongneng-blog,一个用于存放静态图片xiongneng-static。 将腾讯云COS那边的图片都同步到阿里云OSS中。

1. 腾讯云侧:创建迁移专用子账号(安全,迁移完删除密钥)

  1. 腾讯云 CAM 控制台 → 用户 → 新建用户,勾选编程访问
  2. 绑定权限策略:QcloudCOSAccessForMSPRoleQcloudMSPFullAccess
  3. 保存:SecretIdSecretKey
  4. 记录 COS 信息:
    • Bucket 完整名称:xnstatic-1253397658(必须带 APPID)
    • COS 地域 Endpoint:如cos.ap-shanghai.myqcloud.com(上海)

2. 阿里云测:完整迁移操作步骤

进入- 数据迁移服务>迁移任务:https://mgwnext.console.aliyun.com/cn-shenzhen/online-mg-task

  1. 新建源地址(腾讯 COS) 左侧「数据地址」→ 新建地址
    • 数据类型:Temcent COS
    • 地址名称:自定义如tencent-static-src
    • 地域:选你的 COS 对应地域
    • Endpoint:填 COS 地域域名
    • Bucket:完整桶名 xxx-12345678
    • SecretId / SecretKey:填入腾讯子账号密钥
    • 前缀:留空 = 迁移桶全部文件(不要填任何内容) 保存,测试连通性,显示正常即可。
  2. 新建目的地址(阿里云 OSS) 数据地址 → 新建地址
    • 数据类型:Alibaba OSS
    • 地域:和目标 static 桶同区(如深圳)
    • Bucket:xiongneng-static
  3. 创建迁移任务(全量同步) 左侧「迁移任务」→ 创建任务
    • 任务名:cos-to-oss-static-full
    • 源地址:刚才创建的腾讯 COS 地址
    • 目的地址:刚才创建的阿里云 OSS 地址
    • 迁移前缀:空(整桶迁移)
    • 执行方式:立即执行
  4. 启动任务,控制台实时看进度、失败文件、传输速度;
  5. 任务完成后,核对文件总数、目录结构完全一致。
  6. 申请证书,可以申请一个SSL个人版免费证书,域名填写static.xiongneng.me

切换静态图片访问域名

  1. 进入你的 static 图片 Bucket → 左侧【传输管理】→【域名管理】
  2. 点击【绑定域名】,输入 static.xiongneng.me,自动添加CNAME记录验证通过。

域名托管 SSL 证书(实现 HTTPS 访问)

  • 域名管理列表找到 static.xiongneng.me,右侧【证书托管】
  • 证书来源选「云盾 SSL 证书中心」,下拉选中刚申请的 static.xiongneng.me 证书
  • 确定保存,等待 10 分钟证书下发完

图片存储桶xiongneng-static防盗链设置 在防盗链的白名单Referer中配置

1
2
3
4
5
6
7
http://127.0.0.1
http://localhost
https://127.0.0.1
https://github.com
https://localhost
https://www.xiongneng.me
https://xiongneng.me

然后在跨域设置中添加规则,Origin来源填写

1
2
https://www.xiongneng.me
https://xiongneng.me

运行的Methods填写GETHEAD,缓存时间设置为86400

上面图片桶配置完成后,再配置博客静态文件桶xiongneng-blog

进入 Bucket → 数据管理 → 静态页面

  • 默认首页:index.html
  • 404 错误页面:index.html(Hugo/Vue/ 静态博客路由刷新不丢失)
  • 开启「子目录首页」(博客多目录推荐)

OSS 绑定你已备案域名(核心操作)

  1. 在Bucket概览中,外网访问域名:xiongneng-blog.oss-cn-shenzhen.aliyuncs.com
  2. Bucket 左侧「Bucket配置」→「域名管理」→「绑定域名」
    • 填入你的博客域名(如xiongneng.me和www.xiongneng.me),申请2个。
    • 根据提示添加CNAME记录@和www
  3. 验证通过后,域名绑定完成;再开启 HTTPS:
    • 数字证书管理服务/SSL证书管理 → 个人测试证书(原免费证书)。
    • 这里只需要申请www.xiongneng.me即可,会自动带上xiongneng.me主域名。
  4. 申请成功后,「Bucket配置」→「域名管理」→「证书托管」,选择上面申请好的证书。

修改 DNS 解析,切流量到 OSS

  1. 阿里云云解析 DNS → 你的域名 → 解析设置
  2. 删除原来指向 ECS 的 A 记录(旧服务器 IP)
  3. 新增 CNAME 记录:
    • 主机记录:www / @(你的博客前缀)
    • 记录类型:CNAME
    • 记录值:刚才复制的 OSS 外网域名
    • TTL:10 分钟
  4. 等待 10~30 分钟解析生效,访问域名测试网页正常打开

GitHub Action 官方 OSS 上传插件

  • 阿里云 → 访问控制 RAM → 创建 AccessKey
    • 权限:只给 OSS 读写权限 AliyunOSSFullAccess
    • 保存 AccessKey IDAccessKey Secret
  • 打开你的 GitHub 仓库 → Settings → Secrets and variables → Actions → New repository secret 添加 5 个密钥:
1
2
3
4
5
OSS_ACCESS_KEY_ID = 你的AccessKey ID
OSS_ACCESS_KEY_SECRET = 你的AccessKey Secret
OSS_BUCKET_NAME = xiongneng-blog(你的Bucket名称)
OSS_REGION = cn-shenzhen(你Bucket对应地域)
OSS_ENDPOINT = oss-cn-shenzhen.aliyuncs.com

修改hugo项目中的.github/workflows/deploy.yml,前面其他步骤不变,主要是将原来ssh登录ECS传文件,修改为ossutil2.0来同步。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# ---------- 下载并配置 ossutil ----------
- name: Setup ossutil
  run: |
    wget -q https://gosspublic.alicdn.com/ossutil/v2/2.3.0/ossutil-2.3.0-linux-amd64.zip
    unzip -q ossutil-2.3.0-linux-amd64.zip
    chmod 755 ossutil-2.3.0-linux-amd64/ossutil

- name: List OSS objects (debug)
  run: |
    ./ossutil-2.3.0-linux-amd64/ossutil ls oss://${{ secrets.OSS_BUCKET_NAME }}/ \
      --region ${{ secrets.OSS_REGION }} \
      --endpoint ${{ secrets.OSS_ENDPOINT }} \
      --access-key-id ${{ secrets.OSS_ACCESS_KEY_ID }} \
      --access-key-secret ${{ secrets.OSS_ACCESS_KEY_SECRET }} \
      --limited-num 5

# ---------- 增量同步到 OSS ----------
- name: Sync to OSS
  run: |
    ./ossutil-2.3.0-linux-amd64/ossutil sync ./public oss://${{ secrets.OSS_BUCKET_NAME }}/ \
      --region ${{ secrets.OSS_REGION }} \
      --endpoint ${{ secrets.OSS_ENDPOINT }} \
      --access-key-id ${{ secrets.OSS_ACCESS_KEY_ID }} \
      --access-key-secret ${{ secrets.OSS_ACCESS_KEY_SECRET }} \
      --delete \
      --size-only \
      --retry-times 5 \
      --parallel 32 \
      --force

ICP 备案(不用提交变更,仅自查)

  • 阿里云 ICP 备案后台查看:域名备案状态正常、主体信息无误即可;
  • 管局规则:同一阿里云账号内,域名可解析至任意大陆阿里云资源(ECS/OSS/SAE),无需变更备案
  • 仅当你后续换腾讯云 / 华为云,才需要做「接入备案」,本次迁移不用。

公安联网备案(必须手动更新服务器信息)

  1. 打开全国互联网安全管理服务平台登录账号;
  2. 找到你的网站备案条目 → 修改网站信息;
  3. 接入服务商:阿里云;服务器服务类型从「云服务器 ECS」改为「对象存储 OSS 静态网站托管」;
  4. 保存提交,即时生效,无人工审核。