一篇文章带你部署Node开发环境

1,077 阅读9分钟

来掘金发表的第一篇文章,如果觉得写的不错的可以顺手给博主点个赞,谢谢大家😁😁。

我们学习了Nodejs以后,那么就可以无缝使用Nodejs来编写服务端代码,当我们在本地编写完前端和服务端代码以后,如果需要在浏览器访问到我们的项目的话,那么就需要将前端代码和服务端代码部署在云服务器上。本文博主会以部署一套Node运行环境为例子,来开始我们的部署实战。

项目准备

本次部署实战需要准备的工具:一台云服务器

目录

购买云服务器

首先我们需要购买一台云服务器,由于博主购买服务器的目的是学习和实践,所以对于博主来说购买一台轻量型应用服务器就能满足需求了。

轻量型应用服务器和云服务器的区别在于:

1、使用对象:轻量应用服务器面向单机应用,云服务器ECS则未做任何限制;

2、可扩展性:轻量应用服务器提供的配置仅有少量的几个可供选择,升配局限较大;云服务器ECS提供数十种类型上百种配置可供选择,并且支持升级,同时ECS支持搭配其他应用如RDS、OSS来使用;

3、网络:轻量应用服务器面向对象是单机,基本不存在网络的扩展问题;云服务器ECS在专有网络VPC下,用户可以自定义专有网络,并且可以通过网络与线下IDC或者其他云产品进行互联互通;

随着云计算的发展,轻量应用服务器正在逐步替代虚拟主机,成为中小企业部署官网的首选。目前主流云平台也纷纷推出轻量应用服务器,而且折扣力度都比较大,因为是学习用,所以大家根据自己的需求购买即可。推荐阿里云和腾讯云的服务器,并且它们经常会推出一些大力度的折扣套,大家可以乘机进行白嫖😉😉😉。由于博主购买的是CentOs7.6,所以博主后续的部署实战使用的都是CentOs7.6操作系统的服务器,以下是博主的服务器信息。

e6a3de8dedb84469a365eebf16c2025a_tplv-k3u1fbpfcp-watermark.png

安装Nginx服务器

Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php等。但是不支持 java。Java 程序只能通过与 tomcat 配合完成。Nginx 专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率。Nginx具有很高的稳定性,支持热部署,nginx做为HTTP服务器,有以下几项基本特性:

  • 处理静态文件,索引文件以及自动索引;打开文件描述符缓冲.
  • 无缓存的反向代理加速,简单的负载均衡和容错.
  • FastCGI,简单的负载均衡和容错.
  • 模块化的结构。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。如果由FastCGI或其它代理服务器处理单页中存在的多个SSI,则这项处理可以并行运行,而不需要相互等待。
  • 支持SSL 和 TLSSNI.

更详细的Nginx教程: Nginx教程

Nginx 安装的最简单方式:

   rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
   
   yum install -y nginx
   
   systemctl start nginx   //启动并开机自动运行
   
   systemctl enable nginx

Nginx常见命令:

  nginx -t    //检查配置文件是否正确
   
   nginx -s stop  //停止
   
   nginx -s quit  //停止
   
   nginx -s start  //启动
   
   nginx  -s reload  //重新加载配置文件

linux相关命令:

whereis nginx  //查看nginx地址

ps -ef| grep nginx  //查看nginx占用的端口

然后我们访问公网ip地址,Nginx安装以后默认已经监听80端口,对应的配置文件目录是:/etc/nginx/nginx.conf

Snipaste_2021-11-27_16-10-44.png

如果出现以上页面则Nginx安装启动成功🎉🎉🎉!!

顺带一提,默认Nginx配置80端口映射到的静态资源目录是/usr/share/nginx/html/,博主拿这个博客网站资源做个测试,在该目录下建立一个docs文件夹,然后往里面上传博客网站的静态资源,然后浏览器输入ip+/docs访问

Snipaste_2021-11-30_14-16-55.png

Snipaste_2021-11-30_14-16-05.png

安装git以及配置ssh

由于我们项目是放到git仓库上,所以我们需要安装git以便于在服务器上拉取项目代码。

安装git

查看主机是否安装过git

rpm -qa|grep git

如果出现git加版本号则说明已经安装过了,反之亦然。

安装git

yum install git

查看git版本号

git version

如果显示git verson 加版本号则表示成功 😎😎😎!!

配置git账号

配置git账号

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

查看是否生效

git config --list

如果出现user.name="Your Name" user.email="Yourl email"则表示配置成功

生成SSH文件用于远程拉取仓库

ssh-keygen -t rsa -C "your_email@youremail.com"

默认生成目录地址:/root/.ssh/id_rsa

id_rsas是私钥,id_rsa.pub是公钥

查看生成的公钥

cat /root/.ssh/id_rsa.pub

然后保存好此公钥文件,将公钥复制进git仓库就可以拉取仓库代码了。

安装mysql

数据库必不可少,后续博主会出安装MongoDB相关教程,这里我们暂时用Mysql举例子。

更新yum源

rpm -Uvh  http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

安装mysql,我们选择安装社区稳定版本的

yum install mysql-community-server

查看mysql版本号

mysql -V

如果出现mysql加版本号则表示成功

微信截图_20211127121243.png

安装完成以后我们启动mysql

systemctl start mysqld

如果出现密码错误的话我们可以修改mysql配置文件:/etc/my.cnf

mysqld下面加一句

Snipaste_2021-11-27_11-48-51.png

然后保存退出。

[mysqld]
skip-grant-tables

重启mysql

systemctl restart mysqld

mysql -u root -p 登录 MySQL,然后不输入密码直接回车

mysql -u root -p

Snipaste_2021-11-27_11-51-39.png

然后重置密码

update mysql.user set authentication_string=password('123456') where user='root';

然后退出重新登陆测试一下

exit;

然后测试登陆一下

mysql -uroot -p;

输入密码:123456

Snipaste_2021-11-27_16-16-32.png

设置mysql开机启动

systemctl enable mysqld
  • mysql常用命令
systemctl start mysqld //启动

systemctl enable mysqld //设置开机自启动

systemctl restart mysqld //重启mysql

至此mysql安装完成,🤞🤞🤞!!

打开系统防火墙

所谓“防火墙”,是指一种将内部网和公众访问网分开的方法,它实际上是一种隔离技术。防火墙是在两个网络通讯时执行的一种访问控制尺度,它能允许只有你“同意”的人和数据进入你的网络,同时将你“不同意”的人和数据拒之门外,最大限度dao地阻止网络中的黑客来访问你的网络。

版权声明:本文为CSDN博主「dxyzhbb」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:blog.csdn.net/dxyzhbb/art…

首先我们需要登录云服务器控制后台开启指定防火墙

Snipaste_2021-11-30_11-39-40.png

确保云服务器控制后台开启的端口与我们服务器上开启的端口保持一致

查看防火墙状态

systemctl status firewalld

Snipaste_2021-11-27_16-05-03.png 发现它是dead未开启的状态

开启防火墙

systemctl start firewalld

如果没报错则开启成功

查看开启状态

 firewall-cmd --state 

Snipaste_2021-11-27_16-24-43.png

开启成功🤞🤞🤞!!

但这时候我们访问我们ip地址是访问不到的,因为防火墙不允许访问该端口,所以接下来我们需要开启防火墙端口。

firewall-cmd --zone=public --add-port=80/tcp --permanent

Snipaste_2021-11-27_16-29-21.png

开启端口以后记得需要重启一下防火墙才会生效!!!

firewall-cmd --reload //重启防火墙

还没结束,我们还需要开放一些其他常用端口

例如:Mysql端口(3306),Https端口(443),SSH登录端口(22),Windows登录端口(3389)。这些端口都需要开放。

博主后续会使用到一些端口,就一起开放了,Mongodb端口(27017,27018) Redis端口(6379),Ftp端口(21) 以及一些其他端口8080,8848,3000 。

重启防火墙,查看开放状态

Snipaste_2021-11-27_16-57-08.png

  • linux防火墙常用命令
systemctl start firewalld //开启防火墙

firewall-cmd --state //查看防火墙状态

firewall-cmd --zone=public --add-port=8080/tcp --permanent //开启防火墙指定端口以8080为例子

firewall-cmd --reload // 重启防火墙

firewall-cmd --list-ports //查看防火墙开启的端口

systemctl stop firewalld //停止防火墙

安装Node环境

既然是Node服务那么Node.js就必须安装的,合情合理吧😎。

下载nodejs

博主这里下载的是v14.17.2

我们在/usr/local下面建立一个software文件夹用来存放一些手动安装的软件包,然后在/usr/local/software执行以下命令

安装nodejs

wget https://nodejs.org/dist/v14.17.2/node-v14.17.2-linux-x64.tar.xz

如果找不到wget可以先进行安装

yum -y install wget

下载成功以后查看一下ls -a

Snipaste_2021-12-02_11-42-03.png

解压文件

tar -xvf node-v14.17.2-linux-x64.tar.xz

重命名减少后续繁琐操作

mv node-v14.17.2-linux-x64 nodejs

全局引用,创建软连接

ln -s /usr/local/software/nodejs/bin/npm /usr/local/bin
ln -s /usr/local/software/nodejs/bin/node /usr/local/bin

顺便查看版本号

Snipaste_2021-12-02_12-11-58.png

至此,Nodejs已经安装完成了!!😎😎😎

安装PM2管理Node进程

由于Node是单线程的,所以当你的服务挂掉的时候线程也就没了,pm2是一个进程管理工具,可以用来管理你的Node进程。

pm2作用:

  • 内建负载均衡(使用Node cluster 集群模块)
  • 后台运行
  • 0秒停机重载
  • 具有Ubuntu和CentOS 的启动脚本
  • 停止不稳定的进程(避免无限循环)
  • 控制台检测
  • 提供 HTTP API
  • 远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )

好了,接下来进入安装教程,pm2安装也比较简单

安装pm2

npm install -g pm2

Snipaste_2021-12-03_23-32-19.png

pm2配置全局变量

ln -s /usr/local/software/nodejs/bin/pm2 /usr/local/bin/pm2

查看版本号

pm2 -v

Snipaste_2021-12-03_23-41-08.png

设置开机启动

pm2 startup
  • pm2常用命令
pm2 start app.js // 启动pm2,app.js为node服务入口文件

pm2 start app.js --name my-api //my-api为服务名字

pm2 restart app //重启应用

pm2 restart all //重启全部应用

pm2 restart app1 app2 //重启指定应用

pm2 delete app1 //删除指定应用

pm2 stop app //停止应用

pm2 stop all //停止全部应用

pm2 stop app1 app2 //停止指定应用

pm2 list //显示全部应用

PM2更加详细的教程: PM2官方文档

至此Node开发环境已经搭建完成了!🎉🎉,还有很多不足之处,可以在评论区指出,希望同大家共同进步。