记录一次降本的服务器迁移操作日志
本文不对任何服务器厂商做推广,也不做测评。
背景
迁移背景
个人有一个小站,服务器要到期了,之前买的服务太贵,近期各大服务器厂商都在推出 99 的服务器,果断换之。
换之前有一个想法一直困惑着我,有没有一种方案可以最快的帮我完成迁移(不考虑掏钱给服务器厂商),第一反应是要不要试试 Docker,于是做了初步学习,跟后端朋友聊起此事,想问问他们有没有好点的方案(是选择把应用放到一个容器里好,还是不同应用放到不同容器里),最后他们说我这种单应用服务,直接写个 Shell 脚本就好了,没必要搞那么复杂。
好家伙,听到"复杂"两个字,又激起了我的兴趣,于是去研究些一次性能到位的 Shell 安装脚本。在研究的过程中发现,各个社区里大家提供的方案,好像都没有办法正常的安装,或多或少有些问题,没法达到我的预期。
AI 时代,借助 Kimi Chat 的能力去找寻答案,也遇到了上面的问题,拿到的脚本根本没法一键安装。
期间也尝试过直接用宝塔面板搭建,后面发现宝塔里面要安装一些特定版本的软件,居然还要收费,果断又放弃了。
最后决定手撸一遍安装流程,然后记录下来,再考虑有没有可能写到一个 Shell 脚本里。
技术背景
站点所用的技术栈为 Eggjs + MySQL
操作系统:阿里云 Alibaba Clound Linux 3.2104 LTS 64
安装软件:Nginx + MySQL + Git + Node
tips: 项目比较小,所以部署比较简单,通过 git 拉取代码,npm install 安装依赖,npm start 启动项目。所以没有使用 CI 相关操作。
目录
-
安装 Nginx
-
安装 MySQL
-
安装应用
-
设置登录账号密码
-
-
安装 Git
-
安装 Node
安装 Nginx
-
安装 Nginx
sudo yum install nginx
-
启动 Nginx
sqlsudo systemctl start nginx
-
设置开机启动
bashsudo systemctl enable nginx
-
检查 Nginx 状态
luasudo systemctl status nginx
-
查看 Nginx 的配置文件目录(默认: /etc/nginx/conf)
luasudo systemctl status nginx
安装 MySQL
安装应用
-
安装 MySQL
sqlwget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm && yum -y install mysql57-community-release-el7-10.noarch.rpm && yum -y install mysql-community-server --nogpgcheck
-
启动 MySQL
sqlsudo systemctl start mysqld
-
设置开机启动
bashsudo systemctl enable mysqld
-
查看 MySQL 状态
luasudo systemctl status mysqld
-
停止 MySQL
arduinosystemctl stop mysqld
设置登录账号密码
-
修改
/etc/my.cnf
文件,增加 skip-grant-tablessql[mysqld] skip-grant-tables ...
-
停止 MySQL
-
启动 MySQL
-
无密码登录
mysql -u root
-
切换 MySQL 数据库
USE mysql
-
设置密码
sqlUPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root' AND Host='localhost';
-
刷新权限
iniFLUSH PRIVILEGES;
-
修改
/etc/my.cnf
文件,删除 skip-grant-tables,并重新启动 MySQL -
登录 root 账号
cssmysql -u root -p
-
如果不能执行命令,需要重置 root 密码
sqlALTER USER 'newuser'@'localhost' IDENTIFIED BY 'new_password';
-
创建新用户(%表示可以在远端任意IP访问)
sqlCREATE USER 'newuser'@'%' IDENTIFIED BY 'your_password';
-
设置权限,允许从任何地方访问并管理所有数据库
sqlGRANT ALL PRIVILEGES ON *.* TO 'newuser'@'%';
-
刷新权限
iniFLUSH PRIVILEGES;
新建数据库
-
登录数据库
cssmysql -u root -p
-
创建数据库
iniCREATE DATABASE my_new_database;
连接数据库
-
用数据库工具正常连接
-
注意云服务器的安全组端口要放行,否则也会连接不成功
安装 Git
-
安装 Git
sudo yum install git
-
查看版本
cssgit --version
安装 Node
-
安装 nvm
bashcurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
-
关闭并重新打开终端
-
查看 nvm 版本
cssnvm --version
-
安装 Node
nvm install 16.20.2
-
查看 Node 版本
cssnode --version
杂谈
-
没有最优的解决方案,只有最适合的解决方案,这也是我从
Docker -> Shell -> 宝塔面板搭建 -> 手动安装
这一整个流程下来的实践之后的思考。 -
最终我没有选择将上述步骤写为 Shell ,原因有两个:
-
我发现按照步骤手动按照并没有花费我很多时间,因此与其去写一个 Shell ,不如写一个文档,后面迁移或搭建也会快很多
-
比较花费时间的地方有两个,第一个是在下载这些应用时网络耗时(有时甚至需要重新下载,因此这个在 Shell 中可能还不好控制),第二个是安装完应用之后的配置,比如 MySQL 的配置、Nginx 的配置,因此在迁移前,务必做好数据库的备份导出以及 Nginx 配置文件的备份,后面服务器搭建好之后,可以直接导入就可以了。
-
-
要注意在配置服务器时,安全组对应的接口要打开,否则也可以能导致应用无法正常连接。
-
迁移后要对域名服务器解析做调整。
浏览知识共享许可协议
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。