记录一次自己的服务器迁移过程

记录一次自己的服务器迁移过程

💡 原文中文,约2900字,阅读约需7分钟。
📝

内容提要

阿里云最近降价超过20%,我购买了ECS并计划迁移华为云的服务。项目由多个Github私有仓库组成,使用Github Action进行自动构建和部署。通过SSH连接阿里云服务器,安装git和docker,配置镜像源后成功启动项目。数据库使用PostgreSQL进行备份和恢复,最终完成数据迁移和健康检查。

🔎

延伸解读

迁移前的容器化与自动化准备

文章中的服务所有组件早已容器化,业务镜像使用私有仓库,且通过Github Action自动构建并推送镜像,使用git sha作为Tag。部署文件仓库在目标服务器拉取,并触发Action更新环境变量。这种设计使得迁移时只需在服务器上执行git pull和docker compose up即可,大幅降低了迁移复杂度。

网络与安全组配置的注意事项

迁移到阿里云ECS后,作者发现SSH连不上,原因是安全组未放行端口。需要手动开放TCP 22/80/443和UDP 500/4500(用于ipsec)。此外,作者将专有网络设置在函数计算FC网络内,便于未来内网调用。这些配置对迁移成功至关重要,读者需根据自身需求调整安全组规则。

数据库迁移的实操与简化

作者使用PostgreSQL,通过pg_dump和pg_restore进行备份恢复。由于已有cron job每日备份,直接手动触发job,下载备份文件,再通过scp上传到新服务器,在容器内执行pg_restore并重启容器。作者也提到更稳妥的做法是备份整个pg数据卷,但因其数据不重要而选择简化。

迁移后的验证与工具选择

迁移完成后,作者通过预设的health check接口验证服务,虽然报数据库错误,但同步数据后恢复正常。作者还提到阿里云有Mac arm64客户端,比华为云CodeArt仅支持Windows更方便。此外,使用Caddy自动申请HTTPS证书,简化了配置。这些细节体现了个人项目迁移中注重效率与便利的取舍。

❓

Q&A

为什么选择阿里云而不是华为云进行服务器迁移?

因为阿里云最近降价超过20%,我选择了更便宜的服务。

如何通过SSH连接阿里云服务器?

需要打开TCP的22/80/443端口和UDP的500/4500端口,然后使用SSH命令连接。

在迁移过程中如何备份和恢复PostgreSQL数据库?

使用pg_dump进行备份,使用pg_restore进行恢复,具体命令为pg_dump -Fc和pg_restore -d。

项目中如何使用Github Action进行自动构建?

通过Github Action自动构建镜像并推送到私有镜像仓库,使用git sha作为镜像的Tag。

迁移过程中遇到的网络问题如何解决?

将部署文件仓库同步到gitee私有仓库,以避免拉取失败的问题。

如何配置Docker镜像源以加速下载?

通过修改/etc/docker/daemon.json文件,添加阿里云和其他镜像源的地址。

🏷️

标签

➡️

继续阅读