希望本文能给同样在“鼓捣”云服务器的你带来一些帮助!
前段时间阿里云各类产品搞打折大促销,因为我正在使用的服务器也即将到期所以就下单了一台 99元/年的 2C 2GB 3Mbps
配置的服务器。
由于资源紧张,所以在这台“丐版”服务器上部署服务需要特别的“精打细算”。应该说对于此问题,我还是有些经验的。毕竟之前使用的可是配置更低的“丐中丐版”服务器(1C 2GB 1Mbps
)。
我的需求如下
- 合理使用资源:不部署无用的服务。
- 应用容易部署:容器化,CI/CD。
- 数据方便迁移:当更换服务器时,可以直接打包数据传输。
- 系统及应用监控:对较为关键的服务和系统进行监控。
- 安全防护:避免被坏人盯上。
在很久很久以前(大概七八年前吧),当我还是一个初级菜鸟的时候在“鼓捣”服务器这件事情上掉过各种“坑”。所以,在“爬”出来的过程中也积累了许多经验。
第一个问题,如何迁移旧服务器的数据和应用?
在进行应用和数据迁移到新服务器之前,我最开始考虑和实践的方案是在新服务器上部署一个 k3s,同时将所有的应用容器化,所有的配置代码化,域名 DNS 设置泛解析。在我的设想中,如果再次遇到迁移服务器的情况。当在不同云厂商的服务器之间迁移那么只需三步就可以搞定:一将磁盘数据使用 rsync
迁移、二用脚本安装 k3s、三 clone 项目代码,使用 helm chart部署。当在同一云厂商迁移时,可以选择更快的方式,直接使用系统盘快照创建新的服务器。
当我按照方式一操作安装了 k3s 接着通过 helm chart 安装 MySQL8.0 和 Redis 之后,发现这个方案对于低配服务器来说还是过于沉重。
下图是仅仅在服务器上安装了两个服务后相关系统资源的使用情况(没有专门去优化服务配置等,在安装完 k3s 之后 cpu 使用率在 5% 左右,内存使用 43% 左右)。由于跑了 Redis 和 MySQL 服务 cpu 和内存两种资源直接不正常了。
接着我又想到一个方案那就是使用 1Panel
这种单机运维工具来管理我的服务器。之所以执着于想着选择各种工具,是想在后面的使用中少做一些配置的事情,毕竟做一遍和做 N 遍除了后者更累人之外,好像也没有什么其他的好处了。但是,不出意外的话又出意外了,在我安装了 1Panel
之后发现它也并不会给我带来很多帮助,它的内存占用大概在 120MB 左右。总之,它是个好东西但是对我来说没太大用。
后来我又认真想了想,使用这种“丐版”服务器就不能既要又要。想要使用 k3s 搞自动化、基础设施代码化,还想要少使用系统资源本身就互相矛盾。哪有想要马儿跑,又要马儿不吃草的道理。
最终还是选择了直接使用系统盘快照,制作自定义系统镜像,然后使用自定义镜像来创建新服务器。通过这种方式大概几分钟就能把所有的数据和应用原封不动的迁移过去,创建成功后修改一些 DNS 解析地址即可。(十分推荐此种方式)另外需要特别注意的是,以阿里云为例,如果新旧两台服务器不在同一区域,那么进行快照复制每GB数据收 0.5元的价格还是比较贵的。如果快照数据特别大,对价格比较敏感的话还是从头安装系统、配置环境吧。
我的一些使用场景
- N 个网站(博客等)
- N 个数据采集程序(合法的、友好的)
- N 个公众号服务接口
- 内网穿透
- 安装一些 GitHub 上好玩的应用(docker方式)
安全相关注意事项
- 服务器 ssh 关闭账号密码登陆;只允许使用密钥登陆(如果条件允许再加上IP白名单)
- 如果非得使用账号和密码登陆;那么推荐看一下我这篇教程 # 云服务器防SSH暴力破解应该怎么做?
- 不要在任何地方透露自己的服务器公网IP地址(即使你上面没有运行什么重要的服务,互联网上总有一些居心叵测的人会去 DDos 你的服务)
- 使用
cloudflare
隐藏自己网站服务器的真实公网 IP 地址 - 如果有恶意用户频繁访问你的网站,也可以使用
Fail2ban
配合你的Nginx
日志将他们都关进“小黑屋”。
个人开发
由于服务器配置过低,所以我不可能在上面部署 Jenkins
这种服务,还是直接使用 GitHub 的 Action 既省资源又能够与代码仓库无缝集成。
告警监控
受限于系统资源太少,不能自己部署 prometheus
和 grafana
等开源软件另外阿里云控制台自带的监控服务其实还是可以够用的,所以这里就不瞎折腾了。直接在控制台设置了一些告警规则,在系统负载过高或者磁盘使用量过大的时候能够邮件和短信通知就满足需求了。
对于网站的监控则选择了 https://uptimerobot.com/ 免费好用,可以邮件通知,手机上下载一个 App 基本满足通知的需求了。
其他
内网穿透推荐使用 NPS,如果你本地还有台服务器就可以通过内网穿透将云上“丐版”服务器不能做的任务交给本地服务器跑。