我有一个旧网站,它在单个 LEMP Ubuntu 服务器上运行,其中安装了许多服务:NGINX、MySQL、PHP、Redis、Certbot、Postfix、WP-CLI、AWS-CLI、Fail2Ban、cron 作业和一些自定义脚本。
现在,由于我不想在实时服务器上升级 Ubuntu,当 Ubuntu 版本即将到期时,我总是将网站迁移到带有新 LTS Ubuntu 的新 VM 上,在那里我会事先手动确保每个服务都已安装和配置。
我有一份文档概述了需要安装、配置的内容以及如何安装、配置,但我发现这种手动方法非常繁琐、耗时且容易出错。服务器现在在 Ubuntu 18.04 上运行,虽然我在该服务器上启用了 ESM,允许我更新到 2028 年,但我想是时候将网站迁移到 Ubuntu 22.04 了。例如,VS Code 停止支持 Ubuntu 18.04 进行远程访问。
我想做的是写一个Python 脚本自动安装和配置新服务器上的每个服务或使用Docker基本上做同样的事情,每个服务都在一个巨大的 docker compose 文件中精心定义,其中服务共享卷,并且它们使用自定义配置文件。
你会怎么做?有什么更合理的方法吗?或者我应该继续手动安装所有内容,反正迁移很少发生。
答案1
我建议您花一些精力研究一下 docker-compose,从版本更新对底层操作系统和软件包的影响来看,这无疑是阻力最小的路径(现在您只需要关心 docker 版本和更新)。
如果您确实想要或更喜欢使用裸机或 VM 设置,那么在 22.04 中手动完成一次整个过程是值得的,因为 4 年来基础操作系统上的很多东西都会发生变化(即使我从 20.04 升级到 22.04 也不顺利),然后将其转换为 Ansible 脚本,这样您就可以轻松切换目标(vSphere、AWS、GCP 或本地,如 Oracle VirtualBox)。IAC(基础设施即代码)。
一切顺利。
答案2
选择 Docker Compose 可以提供一种标准化且简化的方法来管理不同环境中的服务。通过在单个 Docker Compose 文件中定义所有服务,您可以获得可移植性、可扩展性和部署一致性。
使用 Docker Compose,您可以轻松定义每项服务、指定依赖项以及配置卷和网络。这简化了设置过程,并确保只需一个命令即可启动整个堆栈,从而减少出现错误和不一致的可能性。
此外,Docker Compose 可让您轻松对整个基础架构配置进行版本控制,从而促进协作和可重复性。您可以轻松地与团队成员共享 Docker Compose 文件,或使用它在从开发到生产的不同环境中部署堆栈。
总的来说,利用 Docker Compose 可以为您的服务管理提供一个强大而灵活的解决方案,提供易于部署、可扩展性和一致性,同时减少设置和维护所需的手动工作量。