Skip to content

一. 购买云服务器


1. 注册阿里云的账号

  • 云服务器我们可以有很多的选择:阿里云、腾讯云、华为云。
  • 目前在公司使用比较多的是阿里云
  • 选择目前使用更加广泛的阿里云来讲解
  • 我们需要注册阿里云账号 https://aliyun.com/
  • 注册即可,非常简单

2. 购买云服务器

  • 购买云服务器其实是购买一个实例
    1. 来到控制台
    2. 创建实例,选择类型和配置
    3. 配置网络安全组
    4. 创建实例

二. 配置云服务器


1. 连接云服务器

  • 通常情况下,我们会通过 ssh 连接云服务器:
    • Windows 电脑上我推荐直接使用 git bash ssh 工具
    • Mac OS 电脑上我们可以直接通过终端来使用 ssh 工具

补充:

  • 如果在计算机中想要更改主机名

  • 修改之后需要重启服务器

    shell
    hostnamectl --static set-hostname coderwhy

2. 安装 Node.js

  • 我们安装软件使用工具:dnf

    • DNF,全称 Dandified(时髦的、华丽的) Yum
    • Yum 的下一个版本,也被称之为 Yum 的替代品
    • 如果是 centos7 的版本,记得是没有自带 dnf 的,需要通过 yum 进行安装(这个自行安装一下)
    • 刚才在选择云服务器时,选择的是 centos8,所以是自带 dnf
  • 检查 dnf 是否可用:

    shell
    dnf --help
  • 如果我们希望安装一个软件包,可以进行如下的操作:

    shell
    # 搜索软件包
    dnf search nodejs
    
    # 查看软件包信息: nodejs的版本是10.21.0
    dnf info nodejs
    
    # 安装nodejs
    dnf install nodejs
  • 如果发现不是你希望使用的版本:

    • 使用更高的版本,比如最新的 LTS 或者 Current 版本

    • 这个时候我们可以使用之前讲过的一个工具:n

      shell
      # 安装n
      npm install n -g
      
      # 通过n安装最新的 lts和 current
      n install lts
      n install latest
      
      # 通过n切换版本
      n
  • 如果发现切换之后终端没有反应,可以进行重启:

    • 方式一:重新通过 ssh 建立连接
    • 方式二:重启 ssh service sshd restart

3. 安装 MySQL

3.1. 安装 MySQL

  • 我们依然使用 dnf 来安装 MySQL

    shell
    # 查找MySQL
    dnf search mysql-server
    
    # 查看MySQL,这里的版本是 8.0.30
    dnf info mysql-server
    
    # 安装MySQL,这里加 -y 的意思是依赖的内容也安装
    dnf install mysql-server -y
  • 启动 mysql-server

    shell
    # 开启MySQL后台服务
    systemctl start mysqld
    
    # 查看MySQL服务:active (running)表示启动成功
    systemctl status mysqld
    
    # 随着系统一起启动
    systemctl enable mysqld

3.2. 配置 MySQL

  • 我们之前在 Mac 或者 Windows 上安装 MySQL 时会有一些配置:

    • 比如账号密码
    • centos 中通过 dnf 安装之后,我们如何配置账号密码呢?
  • 配置 MySQL 账号和密码:

    shell
    mysql_secure_installation
    
    # 接下来有一些选项,比如密码强度等等一些
    # MySQL8 开始通常设置密码强度较强,选择 2
    # 其他的选项可以自行选择
  • 现在,我们就可以直接在服务器中操作 MySQL 了:

  • 但是如果我们希望在自己的电脑上直接连接 MySQL 呢?

  • 也就是和 MySQL 建立远程连接;

  • 比如直接 Navicat 工具中连接 MySQL

  • 这个时候必须要配置root可以远程连接:

    mysql
    # 使用mysql数据库
    use mysql;
    
    # 查看user表中,连接权限,默认看到root是localhost
    select host, user from user;
    
    # 修改权限
    update user set host = '%' where user = 'root';
    
    # 配置生效
    FLUSH PRIVILEGES;
  • 但是呢,阿里云默认有在安全组中禁止掉 3306 端的连接的
  • 所以我们需要配置 3306 的安全组

3.3. 数据库迁移

  • 我们需要将之前项目中(本地)MySQL 的数据库迁移到服务器中的 MySQL 数据库中
    • 第一步:在服务器 MySQL 中创建 coderhub 的数据库:
      • 可以通过命令,也可以通过 Navicat 直接创建
    • 第二步:在 Navicat 工具中本地 MySQL 直接导出数据库
      • 转成 SQL 文件(结构+数据)
    • 第三步:在 Navicat 工具中服务器 MySQL 中执行 MySQL
      • 运行第二步导出的 SQL 文件

三. 部署 Node 项目


3.1. 代码托管到 Git 仓库

  • GitHub 中创建仓库,并且将当前代码放到 GitHub
  • 添加 .gitignore 文件时,忽略一些文件:
    • 忽略 uploads
    • 忽略 .env
  • 这里不再给出详细的步骤,就是把代码托管到 GitHub

3.2. 代码 clone 到服务器

  • 服务器我们使用 Gitclone 代码:

    • centos8 服务器中默认是没有安装 Git
    • 我们可以通过 dnf 来安装
    shell
    dnf search git;
    dnf info git;
    # 当然你也可以直接安装(上面两个只是让大家看一下Git的详情)
    dnf install git;
  • 我们可以在根目录下创建一个自己的文件夹,比如 why

    shell
    cd /
    mkdir why
    cd why/
  • clone 项目到 why 中:

    shell
    git clone https://github.com/coderwhy/coderhub.git

3.3. VSCode 中打开代码

  • 如果我们希望在本地的 VSCode 中可以直接编辑远程的代码,可以使用一个 VSCode 的插件:remote-ssh

  • 连接远程服务器

  • 查看远程的项目代码

  • 安装项目的依赖:

    shell
    npm install
  • 配置 .env 文件

    env
    APP_HOST=http://8.134.60.235
    APP_PORT=8001
    
    MYSQL_HOST=localhost
    MYSQL_PORT=3306
    MYSQL_DATABASE=coderhub
    MYSQL_USER=root
    MYSQL_PASSWORD=Coderwhy888.
  • 注意:加入 8001 端口到安全组中

  • 测试请求的结果

3.4. pm2 启动 node 程序

  • 刚才我们是通过终端启动的 node 程序,那么如果终端被关闭掉了呢

    • 那么这个时候相当于启动的 Node 进程会被关闭掉
    • 我们将无法继续访问服务器
  • 在真实的部署过程中,我们会使用一个工具 pm2 来管理 Node 的进程:

    • PM2 是一个 Node 的进程管理器
    • 我们可以使用它来管理 Node 的后台进程
    • 这样在关闭终端时,Node 进程会继续执行,那么服务器就可以继续为前端提供服务了
  • 安装 pm2

    shell
    npm i pm2 -g
  • pm2 常用的命令:

    shell
    # 命名进程
    pm2 start app.js --name my-api 
    # 显示所有进程状态
    pm2 list               
    # 停止指定的进程
    pm2 stop 0       
    # 停止所有进程
    pm2 stop all           
    # 重启所有进程
    pm2 restart all      
    # 重启指定的id(pm2中的id)
    pm2 restart 0          
    
    # 杀死指定的进程
    pm2 delete 0           
    # 杀死全部进程
    pm2 delete all   
    
    #后台运行pm2,启动4个app.js,实现负载均衡
    pm2 start app.js -i 4

Released under the MIT License.