☁️ Azure HK 🐳 Docker 🔒 HTTPS 💰 零成本
背景 #
搞后端开发,如果项目只能在本地跑,就像在健身房练卧推却从不参加比赛——练得再好也没人看到。这篇文章完整记录了我利用学生身份申请 Azure 免费云资源,一步步踩坑排雷,最终通过 Docker 容器化部署 + Let’s Encrypt SSL 证书,把 Hugo 博客跑上线的全过程。
第一步:薅微软羊毛 —— Azure 学生服务器 #
利用学校教育邮箱,开通了 Azure for Students 福利:
| 配置项 | 选择 |
|---|---|
| 区域 | 香港(低延迟,免备案) |
| 系统 | Ubuntu Server |
| 认证 | SSH 密钥对(.pem) |
拿到公网 IP 后,本以为就能起飞了,结果真正的考验才刚开始。
第二步:Windows 的 SSH 权限陷阱 #
拿到私钥后敲下 SSH 命令,直接被红字报错糊了一脸:
WARNING: UNPROTECTED PRIVATE KEY FILE!
Permissions for 'my_hk_key.pem' are too open.原因:Linux 对私钥文件权限要求极严,不允许其他用户读取。但 Windows 默认文件权限带有继承属性,非常宽泛,SSH 客户端出于安全机制直接拒绝连接。
解决方法:
- 右键
.pem文件 → 【属性】→ 【安全】→ 【高级】 - 点击【禁用继承】,删除所有其他用户权限
- 仅保留当前 Windows 用户的【完全控制】权限
再次连接,终于看到了:
azureuser@Huangzy-HK-Server:~$第三步:跨服搬砖 —— SCP 传输项目文件 #
连上服务器后敲 docker compose up -d,报错 no configuration file provided。用 find 一搜——服务器里根本没有我的代码。
这是本地开发走向云端部署最容易犯的思维跳跃:服务器和本地电脑是物理隔离的,SSH 只是拿到了钥匙,行李还得自己搬。
用 scp 把项目文件空投到服务器:
# 传输单个文件
scp -i my_hk_key.pem file.txt azureuser@<IP>:/home/azureuser/
# 传输整个目录
scp -r -i my_hk_key.pem ./project azureuser@<IP>:/home/azureuser/第四步:Docker 容器化部署 #
文件到位后,cd 进项目目录,执行部署:
cd /home/azureuser
sudo docker compose up -d看着一排排 Pulling 和 Started 亮起,服务在容器内跑起来了。
但这时候通过浏览器访问,要么端口不通,要么显示空白。还需要配置反向代理。
第五步:域名解析 + HTTPS 证书 #
不带小绿锁的网站在互联网上等于"裸奔"。
1. 域名解析 #
在域名提供商后台添加 A 记录,将域名指向服务器公网 IP:
类型: A
主机: @
值: 你的服务器IP
TTL: 6002. 申请 SSL 证书 #
使用 Let’s Encrypt 免费证书,通过 certbot 工具申请:
# 安装 certbot
sudo apt install -y certbot
# 停掉占用 80 端口的服务
sudo docker stop nginx
# 申请证书(standalone 模式)
sudo certbot certonly --standalone \
-d huzen.me -d www.huzen.me \
--email your-email@qq.com \
--agree-tos --no-eff-email申请成功后,证书自动保存到:
/etc/letsencrypt/live/huzen.me/fullchain.pem/etc/letsencrypt/live/huzen.me/privkey.pem
3. Nginx 配置 HTTPS #
# HTTP → HTTPS 重定向
server {
listen 80;
server_name huzen.me www.huzen.me;
location / {
return 301 https://$host$request_uri;
}
}
# HTTPS 主服务
server {
listen 443 ssl http2;
server_name huzen.me www.huzen.me;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}4. 自动续期 #
certbot 安装时已自动配置 cron 定时任务,证书到期前会自动续期,无需手动维护。
第六步:AI 赋能 —— OpenClaw 打造全自动运维博客 #
服务器跑起来了,小绿锁亮了,但这仅仅是底层基建。对于一名走向职场的 Java 后端选手来说,博客绝不仅仅是碎碎念的日记本,而是直面面试官的动态简历和技术实战橱窗。
正如本站首页所写:本博客由 OpenClaw 全自动搭建与运维,操作者仅负责需求指挥,未参与任何安装与编码工作。
1. 投喂核心硬核资产:
我没有让 AI 凭空捏造废话,而是把最真实的底层业务物料交给了它:我在亚信科技做 Spring Cloud 微服务重构的思考、技术派社区将 QPS 从 800 优化到 3000+ 的多级缓存调优日志,以及从 0 到 1 搭建企业级 RAG 知识库系统(Kafka + DeepSeek)的架构方案,全量投喂给了 OpenClaw。
2. 全网调研与对标:
单纯罗列代码片段对面试官毫无吸引力。我给 OpenClaw 下达指令,让它去全网搜索并拆解最高赞的后端技术博客。它不仅自动帮我敲定了 Hugo 静态框架与极客风的 Blowfish 主题,还化身资深技术面试官,严格按照 STAR 法则(情境、任务、行动、结果),将我零碎的痛点排查链路重构成了大厂标准的业务叙事逻辑。
3. 涌现与内容重塑:
吸收了顶级技术文章的排版骨架后,OpenClaw 迅速发力。短短几十秒内,它把我的个人简历和底层代码无缝融合,自动生成了《企业级 RAG 知识库系统全链路实现》、《技术派社区性能优化实战》等几篇高质量的复盘文章,并完成了自动排版与部署闭环。
结果: 原本最头疼的"如何向面试官优雅地展示高并发与微服务实战能力",在 AI 工作流的介入下迎刃而解。用 Docker 跑通服务器基建,用 OpenClaw 零代码生成并维护面试级技术沉淀。这,就是属于 AI 时代后端开发者的破局名片!
部署架构总览 #
graph TB
A[用户浏览器] -->|HTTPS| B[Nginx 反向代理]
B -->|静态文件| C[Hugo 博客]
D[Let's Encrypt] -->|SSL 证书| B
E[certbot] -->|自动续期| D
F[Azure 香港 VM] --> B
F --> C
F --> E常见踩坑记录 #
| 坑 | 现象 | 解决 |
|---|---|---|
| 私钥权限过宽 | SSH 拒绝连接 | Windows 高级安全设置禁用继承 |
| 端口被占用 | Docker 启动失败 | ss -tlnp 查占用,停掉旧容器 |
| SSL 证书缺失 | Nginx 启动失败 | 先申请证书再配置 HTTPS |
| 浏览器缓存 | 看到的是旧内容 | Ctrl+Shift+Delete 清缓存,或无痕模式 |
| 代码没传到服务器 | docker compose 报错 | scp 手动传输,本地≠服务器 |
总结 #
走通这套全流程,算是真正摸到了后端工程化部署的门道。核心就五步:搞服务器 → 传代码 → 容器化 → 配 HTTPS → AI 全自动运维。每一步都有坑,但每个坑踩过一次就再也不会忘。
纸上得来终觉浅,绝知此事要躬行。