服务器迁移踩坑流水账
0x1 起因
近几年因为各种原因,陆续囤了好几台便宜的 vps,平均每台每月也就一两刀,上面跑了好些服务,用来自动处理我上传的文件或者汇集资讯什么的,前段时间想了想,这样几台机子管理起来太麻烦了,打算把所有服务合并到一台机子上,又恰好有朋友买了新 vps,价格也不贵,于是开始了这次的折腾。
0x2 环境部署
由于这两年使用的包都是随用随装的,有些不再使用也只是停止掉了却没有删除,盘点了一番后决定重头搭建。
由于以前对服务器不甚熟悉,所有都是按照教程怼一波依赖配置一下就完事了,这也导致了各种奇怪问题,配置冲突,端口在很久之前开过程序占用了结果用不了,文件系统挂载了然后其他程序写了东西进去,结果重启的时候挂载没了,文件就不见了,诸如此类千奇百怪的问题,现在算是有那么点经验了,决定直接上 docker,避免环境污染,也方便以后迁移数据到其他地方。
不过,不管扯再多,新服务器到手肯定要先改一波 ssh
编辑配置的时候,取消掉以上 3 行的注释
完事之后先更一波依赖,以免出现安全问题,我使用的是 ubuntu,因此包管理器是 apt
然后装上 docker,短暂的等待后顺利装上,我的 vps 是十来刀一年的小盘鸡,不过带宽倒是不错,每月 1T 上下行对等 500M 入口还不算流量,挂块 s3 当数据盘用可以假装自己是大盘鸡。
然后虚拟方案应该是 KVM,因为听说 OpenVZ 很难装 docker,就没买更便宜的,虽然现在用的贵一点,不过装 docker 没毛病就好。
不得不说国外的 vps 就是爽,之前用套路云慢的一批不说下包还各种断网,不过毕竟是白嫖的,也不能要求太多(不过听朋友说交钱也是又贵又烂)。
然后还得装上 docker-compose,这是一个 python 写的软件,因此要先装上 python,然后用 pip 安装。
docker-compose 主要用于管理多个容器的启动顺序、环境变量、依赖等等配置。
譬如说一个容器依赖 mysql、php,代码存放在 github,拥有几个编译时环境变量用于生成不同功能的镜像,这时候如果手动拉取代码,手动编译镜像,编译完之后还要先让 mysql 和 php 的镜像跑起来,然后让几个镜像之间的网络互通,这几步下来怕是要执行七八条命令,还容易按错。
如果日后 vps 性能不够,想要迁移到新主机呢?鬼知道当初打了什么命令,就算记录下来了,也难保日后因为某些需求改动过命令,又忘记更新记录,这时候就很蛋疼了。
而 docker-compose 就是要为你代劳这些,你可以通过编写一个简单的配置文件来组织一堆镜像的启动配置,在修改的时候也只要修改配置文件,docker-compose 会只对修改部分进行更新,只要你注意把需要保存的数据通过 volume 挂载到外部就好。
扯了这么多,是时候上代码了
完事。
看文档的时候看官方的口气好像还可以跑在 docker 容器里,也就是说我可以将几个容器打包起来塞在一个容器里跑么?
等之后有机会试试,如果没问题再更新下相关流程,现在就先让他在外面跑吧。
0x3 应用部署

0x4 碰到的一些问题
1.GCP 的免费小鸡卡死后重启,Docker 报错。
ERROR: for xxxx Cannot start service caddy: driver failed programming external connectivity on endpoint xxxx (68a87a19192a87f801ffcf3991938aade311cdb75ed2f121cb5b81064a1bfff9): Bind for 0.0.0.0:443 failed: port is already allocated
需要删除所有容器和网络记录:
GCP 的免费机性能真的烂,卡的一笔,不过也比弟弟云的好。
2.GCP 默认没用 swap 分区
用了一段时间之后发现死机都是因为内存爆了,看了一下发现居然没有 swap 分区,那就手动配置一个吧。
这时候 swap 分区在重启后不会自动挂载上,用 vim 打开/etc/fstab,加上一行:
就可以自动挂载了。
3.时间无法同步
有些服务商不知道为何把时间同步的端口给屏蔽了,可以手动请求 google 的网页,那响应时间设置为当前时间
0x5 后记
