服务器小白从0到项目部署完成的总结记录、包含Nginx、NodeEgg、Mongodb、Linux等

140 阅读13分钟

服务器小白从0到项目部署完成的总结记录、包含Nginx、NodeEgg、Mongodb、Linux等

前言

昨天我们基建团队开分享会,讲的是优化我们项目部署的整体流程,什么OSS、rides作为前端开发的我这听的一脸懵,领导还总Q我,哎,不行了,必须要学一学整体流程,还有公司是如何部署的了!

准备工作

下面带着大家一步一步操作(本项目使用的nodeEgg后台)下面是我的项目部署完成后的样子,本身项目逻辑比较简单,我们走一遍,部署流程,主要包含Linux指令、安装mongodb服务(最烦人)、安装node环境、nginx的基本使用(主要部署前端项目、配置代理)、Linux按装git

微信截图_20230206164427.png

服务器

链接走你 阿里云服务器(可以免费领取一个月)

free.aliyun.com/product/pro…

微信截图_20230131203559.png 领取完了就是这个样子,可能大家跟我一样没有太多接触过服务器,不过可以领取一个,自己尝试尝试部署下服务;

微信截图_20230131200911.png

xshell

用于远程连接服务器;温馨提示虽然阿里云服务器有连接功能但是没有这款软件强大,它提供一个linux环境,去连接我们的服务器

下载链接走你

www.xshell.com/zh/xshell-d…

微信截图_20230131201246.png 填写下邮件,随后会发一个链接到你邮件,然后可以下载,不过只能免费使用30天哦;

4d31add2ab0a44a78005e61e97fa77b1.png

a51f451cd9af47dda2d9983d0446ace6.png

点击下一步,默认是C盘,我们可以把他安装到D盘

186ee2d28a2c4af7bf3de0860b5bbdc3.png 这个是选择下该图片的位置,可以自己选择

ba14c1eec80e4dcc95e24402091fbf48.png

2491d5cac95d47acb9dbdf5150edba17.png 点击关闭

c56ae1a7c40e412cbaedf5cd10db1045.png 随后出现

194e763e6ae84ac481675aac05823cdd.png 点击新建

cace10052f2040ddaf43f848d285b01c.png 连接服务器名称、和主机地址

温馨提示是我们上述的服务器的外网地址哟

defd20861f724aa991311534c3293ce7.png 点击用户身份验证

f01b810eb08540208d2bb16cd0ab9d66.png

3839df4bd6234572a19605e4d312b2d6.png

出现这个代表连接成功了,这个一个Linux系统我先把Linux常用指令放到这里哈!

微信截图_20230131202857.png

Linux基础指令

#显示该文件下的所有文件
ll

#进入或退出文件
cd 文件夹名  (进入)
cd ./      (退出一层)
cd ../      (退出两层)

#显示文件中内容不可编辑(注意是文件不是文件夹)
cat 文件名

# 远程连接命令
ssh root@域名

#编辑文件(注意不是文件夹)
vim  abc.html
刚进去的时候是操作不了的,点一下字母i即可,它代表insert增意思
放弃编辑并丢弃编辑信息  :qa Enter   (quit 放弃)
保存文件            ESC :wq Enter   (write写入)

# 展示当前文件夹路径
pwd

# 切换文件夹目录
cd 目录路径

# 展示当前文件夹中内容
ls

# 编辑文件
vim 文件路径

# 传输文件 
scp 本地文件路径 root@域名:远程路径

#把window的文件传输到linux中
rz
rz之后可以选择某个文件,这个文件会在/root,根目录下,可以把它移到你想要的目录下
cd /usr/local/
mv /root/node-v18.13.0-linux-x64.tar.xz   ./
这样就移动到这个文件下了,

#解压
tar -vxf node-v18.13.0-linux-x64.tar.xz//tar 对应的事tar后缀的,unzip对应是zip文件

#进入环境变量
vim /etc/profile   

更新完环境变量必须要
source /etc/profile
#把node文件放到环境变量中
ln -s /usr/local/node/node-v18.13.0-linux-x64/bin/npm  /usr/local/bin/npm

ln -s /usr/local/node/node-v18.13.0-linux-x64/bin/node /usr/local/bin/node

#删除单个文件
rm

#删除文件夹
rm -rm

#重命名文件
mv  文件路径   重命名文件名字

#查看当前进程
ps -ef|grep nginx

#杀死进程
kill -QUIT 1282

#查找位置
which nginx

netstat -tlnp

安装node环境

node环境说明

1.服务器系统:alibaba服务器系统 2.数据库mongodb版本:v14.17.4 3.软件安装目录: /usr/local/node 4.配置node环境变量: /etc/profile

创建文件夹
#进入文件夹,或者也可以自己找个文件文件夹
cd  usr/local/node

#下载node安装包
wget https://nodejs.org/dist/v14.17.4/node-v14.17.4-linux-x64.tar.xz
也可以官网https://nodejs.org/en/download/找自己喜欢的版本下载

#解压
tar xf node-v14.17.4-linux-x64.tar.xz    //tar对应的是tar后缀的,unzip对应是zip文件

#查看
ls
就会看到:node-v14.17.4-linux-x64.tar.xz  和 node-v14.17.4-linux-x64两个文件

#删除我们的压缩文件也可以不删除
rm -rf  node-v14.17.4-linux-x64.tar.xz 

#重名题
mv   node-v14.17.4-linux-x64.tar.xz  node 
之后就看到我们的文件夹变成node文件夹了

微信截图_20230206172006.png

以上就是简单安装node环境的基本指令,下面是我们的环境遍历不部分

为什么设置环境变量?

设置环境变量是可以让我们在我们linux系统的任何位置去访问,否则只能在我们可执行文件的文件夹内访问;

设置环境变量步骤

1、执行 1、执行

vim /etc/profile

2、输入i,代表insert,新增数据

3、在文件底部添加环境变量

export NODEJS_HOME=/usr/local/node
export PATH=$NODEJS_HOME/bin:$PATH

微信截图_20230206174126.png 4、退出保存

点击Esc

输入冒号:

输入wq

回车即可

我们测试下哈!

微信截图_20230206174343.png 打完收工

安装mongodb环境

mongodb环境说明

1.服务器系统:alibaba服务器系统 2.数据库mongodb版本: v4.0.6 3.软件安装目录: /usr/local/mongodb 4.数据存放位置:/mongodb/data 5.日志存放位置:/mongodb/logs 6.配置mongodb环境变量: /etc/profile

进入 /usr/local目录:
cd /usr/local
下载mongodb二进制包:
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.6.tgz
解压安装包
tar zxvf mongodb-linux-x86_64-4.0.6.tgz
重命名文件夹为mongodb、删除压缩
mv mongodb-linux-x86_64-4.6.0 mongodb
rm -rf mongodb-linux-x86_64-4.0.6.tgz
创建数据库数据和日志存放目录
cd mongodb
mkdir /data //存放mongodb数据
mkdir /logs //存放mongodb日志
创建mongod.conf
cd mongodb/bin
vim mongod.conf//编辑文件


如下内容
systemLog:
 destination: file
 path: /mongodb/logs/log.log
 logAppend: true
storage:
 dbPath: /mongodb/data
net:
 bindIp: 127.0.0.1
security:
 authorization: enabled
设置环境变量
1)vim /etc/profile

2)按i

3)export PATH=$PATH:/usr/local/mongodb/bin

4)点击Esc、输入冒号:、输入wq、回车即可
最后最后最后输入我们的指令了哈哈哈哈哈
/usr/local/mongodb/bin/mongod --dbpath=/mongodb/data --logpath /mongodb/logs/log.log --logappend  --port 27017 --fork

或者在我们的文件中bin目录下直接输入
./mongod --dbpath=/mongodb/data --logpath /mongodb/logs/log.log --logappend  --port 27017 --fork
输入mongo
mongo

Linux的git安装

我们在项目做完的时候不可能一直通过压缩传,会超级痛苦,刚开始我为了省事,直接就压缩,不愿意玩git,后来发现是我傻了,哈哈哈太懒了,我们来配置下git和他的密钥添加

一、安装git
centos:
yum install git

ubuntu:
apt-get install git
二、查看版本号

git --version

三、生成添加密钥

1、名字和邮箱

1.git config  --global user.name "liubao"
2.git config  --global user.email "liubao@xxx.com"

2、添加密钥

ssh-keygen -C 'xxx@joyulf.com' -t rsa 一路回车确认yes

微信截图_20230206182508.png 3、打开生成的密钥

vim /root/.ssh/id_rsa.pub

复制

20210416230325408.png 4、git clone 即可哟

Nginx简介

介绍

Nginx是一个高性能的HTTP服务器代理,实现对HTTP请求的处理,把HTTP请求拦截下来之后交给服务器处理;

主要作用

1、负载均衡

​ 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

​ 负载均衡其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。简单来说就是:现有的请求使服务器压力太大无法承受,所有我们需要搭建一个服务器集群,去分担原先一个服务器所承受的压力,那现在我们有ABCD等等多台服务器,我们需要把请求分给这些服务器。

305504-20161112124423530-566240666.png

2、动静分离

将简单的静态资源请求交给自己(这方面Nginx性能也比较优越)或者其它服务器处理,将动态资源请求交给其它服务处理。

安装Nginx

温馨提示我使用的Windows进行演示的,如果您要部署项目、已经安装了上述的Xshell并且使用的阿里云服务器这个nginx不用安装,他在服务器上已经自带了!

链接走你nginx.org/en/download…

微信截图_20230130200521.png 我选择的一个稳定的版本

温馨提示不能使用中文字符、空格目录

image-20230130200636695.png

目录介绍

conf:Nginx核心配置文件所在目录,其中重要的是nginx.conf文件。温馨提示最重要的 logs:日志目录,其中最主要的是errs.log文件,如果启动之后在任务管理器没有看到程序启动,可以通过分析该文件的错误输出定位问题。 temp:存放临时文件的目录。 html:存放静态资源的目录,当然你也可以在nginx.conf配置文件种指定其它位置。

主要命令

温馨提示在nginx.exe目录下,使用cmd进入命令行

start nginx代表启动Nginx

输入命令start nginx,就会弹出一个窗口代表启动成功

微信截图_20230130201303.png

nginx -v 查看版本号

微信截图_20230130201425.png

nginx -t 验证是否配置成功

微信截图_20230130201535.png

nginx -s stop或者nginx -s quit关闭nginx

nginx -s stop会有序的关闭程序不会丢失代码,nginx -s quit会直接关闭可能会丢失代码

微信截图_20230130201756.png 代表关闭成功

Nginx使用

配置Nginx虚拟服务器

这个是Nginx最有用,也是最核心的功能。一个Nginx可以配置多个虚拟服务器。Nginx通过监听80端口接收到HTTP请求,然后通过虚拟服务器的配置规则和条件将请求转发到其它服务器。 这就是实现负载均衡的主要技术原理。

我们打开conf/nginx.conf文件,如下图所示就是Nginx默认配置了一个虚拟服务器:

微信截图_20230130201942.png

  • listen 80; 监听所有80端口的访问。
  • server_name localhost; 监听主机名为localhost的访问。

​ 当以上条件满足时,执行以下规则:

	location / {          //代表只要访问根路径,就执行以下内容
	root html; 指定访问路径为当前html目录
	index index.html index.htm; 如果不指定资源,默认访index.html 或者 index.htm
	}

​ 也就是,如果你访问localhost这个”域名“,不指定访问哪个页面,我就默认给你index.html 或者 index.htm。

我们来验证一下。

我们编辑 html/index.html:

微信截图_20230130203053.png

微信截图_20230130203105.png 证明了虚拟机配置所代表的含义。

下面还有一段配置,代表当出现500、502、404等错误时,访问/50x.html,而location又指明,50x.html的路径也在当前html目录:

20200524113203551.png

正向代理、反向代理

正向代理

正向代理类似一个跳板机,代理访问外部资源。

305504-20161112124853014-1532060796.png

例子:

  我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。

客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。

总结:

正向代理 是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务z器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

正向代理的用途:

1)访问原来无法访问的资源,如google

2) 可以做缓存,加速访问资源

3)对客户端访问授权,上网进行认证

4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

反向代理

初次接触方向代理的感觉是,客户端是无感知代理的存在的,反向代理对外都是透明的,访问者者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

反向代理的作用:

(1)保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击

大型网站,通常将反向代理作为公网访问地址,Web服务器是内网。

305504-20161112124341280-1435223816.png (2)负载均衡,通过反向代理服务器来优化网站的负载

二者区别

305504-20161112130135639-1005446770.png

部署后端项目

因为我们已经安装了git我们直接git clone 就好了

20210416231836489.png 我把前后端项目放到一起了,我直接就搞好了如下

微信截图_20230206182508.png dbfront_front前端项目

egg-serve后端项目

我们在启动后端项目的时候一定要启动mongodb

/usr/local/mongodb/bin/mongod --dbpath=/mongodb/data --logpath /mongodb/logs/log.log --logappend  --port 27017 --fork

mongo
cd egg-serve
npm install

#由于我们的Egg项目已经内置了pm2所以我们就不用安装了、在window的时候启动项目事npm run dev
#而在我们linux为了不占服务的页面,我们的egg直接内置了
npm run start

微信截图_20230206185615.png 后端服务部署成功

部署前端项目

打包

linux通过git指令,把前端的代码获取到,随后把使用 npm run build

进行打包 微信截图_20230206190154.png

打包后会生成一个dist文件,而这里面由打包出的index文件,在上面我们们知道,nginx是通过路由来匹配index文件,所以我们把这个index放到我们的对应nginx路径下就好了!

微信截图_20230206190137.png

部署前端nginx的操作

我们使用的阿里云服务器,已经自带nginx了

搜索nginx文件

which  nginx

微信截图_20230206190805.png 我们进入文件找到,

微信截图_20230206191332.png 主要配置文件在nginx文件下的conf文件,总体配置在nginx.conf中,而这个文件只要引用的是vhost文件,从而实现了我们的模块化

之后

cd  vhost
vim dbfront.conf//必须是conf结尾才能识别,进入vhost创建并边界dbfront.conf


输入代码,并退出保存
server {
	listen 3001;
	location / {
		root /dangbo/react-egg/dbfront_front/dist;
		index index.html;
	}
	#看项目需不需要配置代理,由于我的项目需要cookie问题,所以在nginx配置了代理!
	location /nodeServe{
	#匹配我们的nodeServe服务,发送到我们刚才启动的nodeEgg服务,7001
	proxy_pass http://127.0.0.1:7001;
	}
}

最后

输入我们服务器地址端口,嘎嘎

http://116.62.175.219:3001/#/login

走你 微信截图_20230206191933.png