项目背景
手里有 4 台云服务器,分布在国内三个区域和东南亚,涵盖三家云厂商。之前一直处于"买了就吃灰"的状态,决定把它们盘活,搭建一套完整的个人云平台,同时系统性学习云计算和运维技能。
资源清单
四台机器配置都不高,但胜在分布广、厂商多,正好练习多云管理的场景。
架构设计
用户访问
│
stulinux.icu (已备案)
↓
S4 · 对外门面
Nginx 反代 + SSL
博客 / 备案网站
│
┌──────────────┼──────────────┐
↓ ↓ ↓
S1 · 应用层 S3 · 监控中心 S2 · 境外节点
Docker 容器 Prometheus CI Runner
Portainer Grafana 海外探测
每台服务器有明确的职责分工,避免"一台机器跑所有东西"的混乱局面。
已完成的工作
Day 1-2:环境统一
目标:四台机器形成统一可管理的资源池。
创建统一的运维用户,部署 SSH 密钥实现免密登录
关闭密码登录,配置 SSH 安全加固
四台全部部署 fail2ban 防暴力破解(其中一台系统比较特殊,需要源码编译安装)
编写 SSH config 别名,一条命令就能登录任意一台
踩坑: 其中一台的系统防火墙默认把 SSH 端口拦住了,差点把自己锁在外面。教训是改防火墙时一定要先加新规则再删旧规则。
Day 3-4:容器化底座
目标:统一使用 Docker 作为应用部署基础。
四台全部安装 Docker + Docker Compose
国内节点配置镜像加速(境外节点直连 Docker Hub)
所有节点配置日志大小限制,防止磁盘被日志撑爆
部署 Portainer 实现可视化容器管理
踩坑: 其中一台国产操作系统默认仓库只有 Docker 18.x 老版本,需要手动配置 CentOS 8 仓库才能装到较新版本,而且系统的版本变量需要手动修正。
Day 5-6:防火墙与网络
目标:最小化攻击面,HTTPS 全覆盖。
三家云厂商控制台配置安全组(入方向最小化)
系统层配置 firewalld / ufw 双层防护
通过 Nginx Proxy Manager 统一管理反向代理
Let's Encrypt 自动 HTTPS 证书(90 天自动续期)
所有管理端口通过子域名反代访问,不直接暴露端口号
Cloudflare Tunnel 解决跨云厂商域名访问限制
踩坑: 域名备案绑定在 A 厂商,在 B 厂商的服务器上通过域名访问标准 Web 端口会被拦截。尝试了 Nginx 反代、Certbot DNS 验证、Cloudflare 灵活 SSL 等多种方案都失败,最终用 Cloudflare Tunnel(出站连接绕过入站端口限制)才解决。
Day 7:博客上线
目标:搭建技术博客,输出学习记录。
Docker Compose 部署 Halo 博客 + PostgreSQL 数据库
JVM 内存优化(限制堆内存,适配小内存服务器)
NPM 反代 + Let's Encrypt 证书
也就是你正在看的这个站点!
技术栈一览
下一步计划
第二周:监控体系
S3 部署 Prometheus + Grafana,四台机器全节点接入
Alertmanager 配置告警推送
S2 部署 Blackbox Exporter 实现多地域可用性探测
第三周:自动化与 DevOps
Ansible 批量管理,把手动操作全部改写成 Playbook
Gitea + CI/CD 流水线,境外 Runner 加速构建
备份策略 + 灾备演练
写在最后
这个项目的初衷是把"吃灰服务器"变成"简历亮点"。一周下来,最大的感受是:运维的核心不是会敲命令,而是理解每一层的职责和它们之间的关系——安全组和防火墙是两层独立的过滤、反向代理和后端应用各管各的事、DNS 和证书各有各的验证链路。
每一步都踩了坑,但踩坑本身就是最好的学习。后续会持续更新这个系列,欢迎关注。