N年前,我在阿里云买了一台ECS云服务器,当时 CentOS 7 正是主流的服务器操作系统,所以我基于 CentOS 7 ,安装了 Nginx、PHP7、Mysql、Redis 搭建了一个简易博客系统,该系统整体架构如下:
用户通过 http/https 访问博客系统,使用 Nginx 做代理转发,自动将 http 转换为 https,转发到博客系统,博客系统的PHP环境、mysql 、redis 都是直接安装在 ECS 上。使用 Git 做博客系统代码的版本控制。
这样搭建的环境在当时并没有什么问题,而且也很简单,能快速部署博客系统,我也一直没再更新这个环境,直到最近我需要在服务器上构建别的应用时发现了不少问题。
1、CentOS 7 已经于 2024年6月30日正式结束支持,并且 CentOS 8 也早在 2021年12月31日终止支持,要在 CentOS 上升级软件变的很困难,操作繁琐,所以需要考虑更换操作系统。
2、原先的架构模式过于简单,对于多版本的软件环境支持不是很友好,比如有多个基于PHP的系统,采用的是PHP6、PHP7、PHP8等多个版本,再比如有多个Go版本的项目,要在一台服务器上搭建这么多版本的环境也很麻烦,所以考虑采用 Docker 使用镜像构建独立的容器,屏蔽环境差异。
说干就干,开始折腾这好久没搞的服务器环境,新的环境架构图如下:
主要重构的内容包括下面这些,在后面的文章中将一一讲解如何操作及避坑:
1、阿里云服务器ECS更换操作系统,从 CentOS 7 更换为 Alibaba Cloud Linux(阿里云自研的基于 CentOS 的操作系统)
2、安装 Nginx + SSL 做代理转发
3、安装 Git 做代码版本控制
4、安装 Docker 管理镜像和容器
5、应用系统全部由 Docker 容器实现,这样不同版本的环境都可独立运行,docker 容器的端口映射到宿主机端口,这样可以通过访问宿主机的端口来访问容器。对于 web 应用,可以由宿主机的 nginx 做代理转发,让访问变的更加灵活,比如通过 https 访问宿主机,由宿主机使用 http 转发到内部端口,映射到 docker 容器内端口,在 docker 内网中进行网络通信。
在实操之前,建议多用用阿里云提供的免费服务,例如阿里云效,可以使用 git 托管代码;阿里云容器镜像服务,可以托管自己的镜像,这对于后面引用自己制作的镜像,避免直接下载过慢非常友好。
这个操作非常简单,直接在阿里云控制台里操作即可。
需要特别注意:
1、备份好自己的代码和数据,更换操作系统后,数据将全部丢失。
2、更换后,阿里云会建议使用密钥对登录服务器,如果选择了使用密钥对,那么会在 ~/.ssh 目录下生成一个 authorized_keys 的文件,这个不可以删除,否则无法使用密钥对登录。之所以特别强调,因为后面安装 git 时会用到这个目录,防止被误删,导致无法登录。