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

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

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

背景

迁移背景

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

    sql 复制代码
    sudo systemctl start nginx
  • 设置开机启动

    bash 复制代码
    sudo systemctl enable nginx
  • 检查 Nginx 状态

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

    lua 复制代码
    sudo systemctl status nginx

安装 MySQL

安装应用
  • 安装 MySQL

    sql 复制代码
    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

    sql 复制代码
    sudo systemctl start mysqld
  • 设置开机启动

    bash 复制代码
    sudo systemctl enable mysqld
  • 查看 MySQL 状态

    lua 复制代码
    sudo systemctl status mysqld
  • 停止 MySQL

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

    sql 复制代码
    	[mysqld]
    	skip-grant-tables
    	...
    	  
  • 停止 MySQL

  • 启动 MySQL

  • 无密码登录

    mysql -u root
    
  • 切换 MySQL 数据库

    USE mysql
    
  • 设置密码

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

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

  • 登录 root 账号

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

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

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

    sql 复制代码
    GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'%';
  • 刷新权限

    ini 复制代码
    FLUSH PRIVILEGES;
新建数据库
  • 登录数据库

    css 复制代码
    mysql -u root -p 
  • 创建数据库

    ini 复制代码
    CREATE DATABASE my_new_database;
连接数据库
  • 用数据库工具正常连接

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

安装 Git

  • 安装 Git

    sudo yum install git
    
  • 查看版本

    css 复制代码
    git --version

安装 Node

  • 安装 nvm

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

  • 查看 nvm 版本

    css 复制代码
    nvm --version
  • 安装 Node

    nvm install 16.20.2
    
  • 查看 Node 版本

    css 复制代码
    node --version 

杂谈

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

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

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

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

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

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

浏览知识共享许可协议

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

相关推荐
M_emory_16 分钟前
解决 git clone 出现:Failed to connect to 127.0.0.1 port 1080: Connection refused 错误
前端·vue.js·git
Ciito19 分钟前
vue项目使用eslint+prettier管理项目格式化
前端·javascript·vue.js
成都被卷死的程序员1 小时前
响应式网页设计--html
前端·html
mon_star°1 小时前
将答题成绩排行榜数据通过前端生成excel的方式实现导出下载功能
前端·excel
Zrf21913184551 小时前
前端笔试中oj算法题的解法模版
前端·readline·oj算法
文军的烹饪实验室2 小时前
ValueError: Circular reference detected
开发语言·前端·javascript
Martin -Tang3 小时前
vite和webpack的区别
前端·webpack·node.js·vite
迷途小码农零零发3 小时前
解锁微前端的优秀库
前端
王解4 小时前
webpack loader全解析,从入门到精通(10)
前端·webpack·node.js
我不当帕鲁谁当帕鲁4 小时前
arcgis for js实现FeatureLayer图层弹窗展示所有field字段
前端·javascript·arcgis