记录一次降本的服务器迁移操作日志

2 阅读4分钟

记录一次降本的服务器迁移操作日志

本文不对任何服务器厂商做推广,也不做测评。

背景

迁移背景

个人有一个小站,服务器要到期了,之前买的服务太贵,近期各大服务器厂商都在推出 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

    sudo systemctl start nginx
    
  • 设置开机启动

    sudo systemctl enable nginx
    
  • 检查 Nginx 状态

    sudo systemctl status nginx
    
  • 查看 Nginx 的配置文件目录(默认: /etc/nginx/conf)

    sudo systemctl status nginx
    

安装 MySQL

安装应用
  • 安装 MySQL

    wget 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

    sudo systemctl start mysqld
    
  • 设置开机启动

    sudo systemctl enable mysqld
    
  • 查看 MySQL 状态

    sudo systemctl status mysqld
    
  • 停止 MySQL

    systemctl stop mysqld
    
设置登录账号密码
  • 修改 /etc/my.cnf 文件,增加 skip-grant-tables

    	[mysqld]
    	skip-grant-tables
    	...
    	  
    
  • 停止 MySQL

  • 启动 MySQL

  • 无密码登录

    mysql -u root
    
  • 切换 MySQL 数据库

    USE mysql
    
  • 设置密码

    UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root' AND Host='localhost';
    
  • 刷新权限

    FLUSH PRIVILEGES;
    
  • 修改 /etc/my.cnf 文件,删除 skip-grant-tables,并重新启动 MySQL

  • 登录 root 账号

    mysql -u root -p 
    
  • 如果不能执行命令,需要重置 root 密码

    ALTER USER 'newuser'@'localhost' IDENTIFIED BY 'new_password';
    
  • 创建新用户(%表示可以在远端任意IP访问)

    CREATE USER 'newuser'@'%' IDENTIFIED BY 'your_password';
    
  • 设置权限,允许从任何地方访问并管理所有数据库

    GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'%';
    
  • 刷新权限

    FLUSH PRIVILEGES;
    
新建数据库
  • 登录数据库

    mysql -u root -p 
    
  • 创建数据库

    CREATE DATABASE my_new_database;
    
连接数据库
  • 用数据库工具正常连接

  • 注意云服务器的安全组端口要放行,否则也会连接不成功

安装 Git

  • 安装 Git

    sudo yum install git
    
  • 查看版本

    git --version
    

安装 Node

  • 安装 nvm

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
    
  • 关闭并重新打开终端

  • 查看 nvm 版本

    nvm --version
    
  • 安装 Node

    nvm install 16.20.2
    
  • 查看 Node 版本

    node --version 
    

杂谈

  • 没有最优的解决方案,只有最适合的解决方案,这也是我从 Docker -> Shell -> 宝塔面板搭建 -> 手动安装 这一整个流程下来的实践之后的思考。

  • 最终我没有选择将上述步骤写为 Shell ,原因有两个:

    • 我发现按照步骤手动按照并没有花费我很多时间,因此与其去写一个 Shell ,不如写一个文档,后面迁移或搭建也会快很多

    • 比较花费时间的地方有两个,第一个是在下载这些应用时网络耗时(有时甚至需要重新下载,因此这个在 Shell 中可能还不好控制),第二个是安装完应用之后的配置,比如 MySQL 的配置、Nginx 的配置,因此在迁移前,务必做好数据库的备份导出以及 Nginx 配置文件的备份,后面服务器搭建好之后,可以直接导入就可以了。

  • 要注意在配置服务器时,安全组对应的接口要打开,否则也可以能导致应用无法正常连接。

  • 迁移后要对域名服务器解析做调整。

浏览知识共享许可协议

知识共享许可协议
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。