在阅读本篇文章之前,你已经阅读了:

本篇学习内容

  • 购买云服务器(以腾讯云为例),并以终端连接上去
  • 在Linux上安装部署demo1项目并验证
  • 在Linux上安装部署demo2项目并验证

本篇视频

PS:我演示时,用的是云服务器CVM。现在越来越流行轻量云了,但本质都是云服务器,针对轻量云的操作,文章里都补充了对应的图片进行解说。

购买云服务器

 由于云服务器价格比较贵,所以一般是能省就省,不会使用图形化界面,大多是敲命令行。
 首先要购买云服务器(轻量云),一般大家都是新人,别傻傻地原价买,一定要选新人优惠:新人优惠页面跳转。优惠只有一次,平均下来约10块钱一个月,比买奶茶还便宜。(PS:如果遇到618或双十一什么,价格可能会有波动。)

购买云服务器优惠2

 低于25岁的可以直接去验证为学生并以学生价继续买(大于25岁的就需要输入学生证进行验证),学生优惠页面跳转

购买云服务器优惠

 购买云服务器后,安装系统CentOS 8(注意不是7,7跟8的命令是有点区别的),我们以这个演示。 轻量云在购买时选择系统镜像->CentOS8。【2024年更新说明】由于CentOS 8不再维护,各大云厂商都会有对应的兼容版(默认安装),可以直接当CentOS 8来使用成使用。
兼容centos8

开放端口

 云服务器出于安全考虑,是只会把用到的端口才会开放,防止被入侵。
 云服务器是设置安全组并配置到对应的云服务器才能正常使用。我们项目用到的端口是TCP端口8001,8002,9002,9003(分别对应demo1、demo2的HTTP服务器、TCP服务器)。为了方便演示,我们就不一个个开放了,直接开放所有端口。
 轻量云防火墙设置位置在另一个地方,点击管理,选择防火墙,到里面开放端口即可:
轻量云防火墙1
轻量云防火墙2

跟我敲命令

 由于绝大部分人都没有学过linux,所以我这里直接演示,大家跟着操作,并且我每操作一个命令,后续都再操作一个验证命令,验证你是跟着操作并且是对了的,你就可以安心地跟着继续敲下一个命令。

把demo1跑起来

 使用网页的官方终端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# 切换到拥有最高权限的root账号
sudo -s
# 验证:这时你会看到你是root账号

# 先看防火墙状态
systemctl status firewalld.service

# 为了方便演示,我们关闭防火墙
systemctl stop firewalld.service
# 验证,再看防火墙状态,已经变成了disabled了。
systemctl status firewalld.service

# 安装NodeJs
# 查看可安装的NodeJs版本
yum module list nodejs

# 安装默认版本的NodeJs
yum module install nodejs -y
# 验证Nodejs 安装成功,这时会返回 NodeJs的版本号
node -v

# 安装Git并拉取代码
yum install git -y
# 验证Git安装成功,这时会返回Git的版本号
git --version

# 进入用户目录
cd ~

# 查看文件列表
ls

# 使用Git 拉取代码
git clone https://github.com/alwxkxk/soft-and-hard.git
# 为了加快速度,可用国内镜像源:
# git clone https://github.com.cnpmjs.org/alwxkxk/soft-and-hard

# 验证:再查看文件列表,会发现多了一个soft-and-hard的目录
ls

# 进入soft-and-hard目录
cd soft-and-hard/

# 验证,ls可以看到已经进入到目录里了,pwd可看到当前路径
ls
pwd

# 进入demo1 目录
cd demo1/
cd myapp/

# 验证,ls可以看到已经进入到目录里了,可看到package.json等文件
ls
# 验证:pwd可看到当前路径为/root/soft-and-hard/demo1/myapp
pwd

# 安装demo1依赖
npm install

# 把demo1跑起来
npm run start

 使用浏览器访问你的云服务器demo1,然后修改NodeMCU demo1的代码,填写你的云服务器IP地址,就可以实现用你的云服务器控制你的硬件开关灯了。

把demo2跑起来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

# 终止demo1,退出程序
[Ctrl + c]

# 安装 MongoDB (使用阿里的镜像源)
# 输入yum配置信息【可一次性复制】

cat>/etc/yum.repos.d/mongodb-org-4.4.repo<<EOF
[mongodb-org]
name=MongoDB Repository
baseurl=http://mirrors.aliyun.com/mongodb/yum/redhat/7Server/mongodb-org/4.4/x86_64/
gpgcheck=0
enabled=1
EOF

sudo yum install -y mongodb-org

# 启动
systemctl start mongod
# 验证MongoDB 运行状态
systemctl status mongod

# 进入demo2 目录
cd ~
cd soft-and-hard/
cd demo2/
cd myapp/


# 安装demo2依赖
npm install

# 把demo2跑起来
npm run start

 使用浏览器访问你的云服务器demo2,然后修改NodeMCU demo2的代码,填写你的云服务器IP地址并烧录程序,就可以实现用你的demo2跑起来了。

使用PM2

 大家可以看到,跑一个程序时,是无法做其它事的,直到Ctrl + c来结束程序,才能做其它事,一般我会别开一个终端来输入其它命令。当大家学习Linux基础时,就会学到可以把当前程序以后台运行,但我很少这样做,我更喜欢开多个终端。

 还有另一个问题,当你关闭终端时,会默认关闭当前程序。我一般喜欢使用screen命令来保持。而对于NodeJs程序,大家都喜欢使用PM2来管理程序,使其能一直运行并且能出现异常导致停止时能自动重启:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 安装PM2
npm install pm2 -g

# 验证pm2 安装成功
pm2 --version
# 在以往直接pm2 执行命令是正常的,某次实践中发现pm2执行不了,估计是软链接有问题
# 可以使用 /usr/local/bin/pm2 代替 pm2。 即 /usr/local/bin/pm2 --version

# 进入目录
cd ~
cd soft-and-hard/

# 运行我已经配置好的程序
pm2 start pm2.json
# 若pm2不可直接运行,同理可以使用 /usr/local/bin/pm2 start pm2.json

 这样,你的程序就能一直跑了。 是不是感觉还没会懂linux,没学懂就对了,因为我根本就没教,只是示范如何跑起来而已,要学习还得从基础打起,啃书实践一个都不能省:linux基础

注意两套系统

 注意一下,在前面的演示中,我们分别演示了在本地搭建,以及在云服务器上搭建。然后是开始正式学习相关知识,有很多读者都搞乱了这两套系统,当你学习、开发、调试时,用的是本地的系统,所以你的nodemcu应该要把ip地址改成指向你的电脑,打开网页也应该是打开本地http://127.0.0.1:8001,而不是指向服务器。本地是你调试开发用的,云服务器是给所有人用的,你在本地调试完再部署到云服务器。

其它说明

  • 可以另开一个执行curl 127.0.0.1:8002,来判断demo1是否正常启动。
  • 在云服务器上阿里云质量技术更好,腾讯云性价比更高。
  • 后继可以自行研究购买域名等操作,腾讯云本身有录制大量的教学视频动手实验室
  • 为了简单演示,所以登陆服务器使用密码登陆,一般更建议使用SSH密钥登陆,可自行学习。
  • 用完腾讯云的新人价后,还可以去阿里云继续当“新人”,以新人价买。
  • Vultr 云服务器 限时活动,新人免费$100额度

FAQ

  1. 为什么把demo项目部署到云服务器上,还是无法访问网页?
    答:整个流程是这样的,1.需要服务器demo项目运行 -> 2.数据需要通过服务器linux自带的防火墙 -> 3.数据需要通过运营商防火墙->网页访问成功。排查时一步步排查,针对1,运行demo后(以demo1为例,8001端口),另开一个窗口使用命令curl 127.0.0.1:8001,若返回HTML代码(如<html......),说明本地能访问demo项目的网页,1没问题。针对2,参考linux基础,不再多说。针对3,需要去云平台一要配置安全组(可理解为一个安全规则),允许8001端口能流入流出;二要将安全组配置到云服务器。