一. 购买云服务器
1. 注册阿里云的账号
- 云服务器我们可以有很多的选择:阿里云、腾讯云、华为云。
- 目前在公司使用比较多的是阿里云
- 选择目前使用更加广泛的阿里云来讲解
- 我们需要注册阿里云账号 https://aliyun.com/
- 注册即可,非常简单
2. 购买云服务器
- 购买云服务器其实是购买一个实例
- 来到控制台
- 创建实例,选择类型和配置
- 配置网络安全组
- 创建实例
二. 配置云服务器
1. 连接云服务器
- 通常情况下,我们会通过
ssh
连接云服务器:Windows
电脑上我推荐直接使用git bash ssh
工具Mac OS
电脑上我们可以直接通过终端来使用ssh
工具
补充:
如果在计算机中想要更改主机名
修改之后需要重启服务器
shellhostnamectl --static set-hostname coderwhy
2. 安装 Node.js
我们安装软件使用工具:
dnf
DNF
,全称Dandified
(时髦的、华丽的)Yum
- 是
Yum
的下一个版本,也被称之为Yum
的替代品 - 如果是
centos7
的版本,记得是没有自带dnf
的,需要通过yum
进行安装(这个自行安装一下) - 刚才在选择云服务器时,选择的是
centos8
,所以是自带dnf
的
检查
dnf
是否可用:shelldnf --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
账号和密码:shellmysql_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 到服务器
服务器我们使用
Git
来clone
代码:centos8
服务器中默认是没有安装Git
的- 我们可以通过
dnf
来安装
shelldnf search git; dnf info git; # 当然你也可以直接安装(上面两个只是让大家看一下Git的详情) dnf install git;
我们可以在根目录下创建一个自己的文件夹,比如
why
shellcd / mkdir why cd why/
clone
项目到why
中:shellgit clone https://github.com/coderwhy/coderhub.git
3.3. VSCode 中打开代码
如果我们希望在本地的
VSCode
中可以直接编辑远程的代码,可以使用一个VSCode
的插件:remote-ssh
连接远程服务器
查看远程的项目代码
安装项目的依赖:
shellnpm install
配置
.env
文件envAPP_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
:shellnpm 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