服务器小白从0到项目部署完成的总结记录、包含Nginx、NodeEgg、Mongodb、Linux等
前言
昨天我们基建团队开分享会,讲的是优化我们项目部署的整体流程,什么OSS、rides作为前端开发的我这听的一脸懵,领导还总Q我,哎,不行了,必须要学一学整体流程,还有公司是如何部署的了!
准备工作
下面带着大家一步一步操作(本项目使用的nodeEgg后台)下面是我的项目部署完成后的样子,本身项目逻辑比较简单,我们走一遍,部署流程,主要包含Linux指令、安装mongodb服务(最烦人)、安装node环境、nginx的基本使用(主要部署前端项目、配置代理)、Linux按装git
服务器
链接走你 阿里云服务器(可以免费领取一个月)
领取完了就是这个样子,可能大家跟我一样没有太多接触过服务器,不过可以领取一个,自己尝试尝试部署下服务;
xshell
用于远程连接服务器;温馨提示虽然阿里云服务器有连接功能但是没有这款软件强大,它提供一个linux环境,去连接我们的服务器
下载链接走你
填写下邮件,随后会发一个链接到你邮件,然后可以下载,不过只能免费使用30天哦;
点击下一步,默认是C盘,我们可以把他安装到D盘
这个是选择下该图片的位置,可以自己选择
点击关闭
随后出现
点击新建
连接服务器名称、和主机地址
温馨提示是我们上述的服务器的外网地址哟
点击用户身份验证
出现这个代表连接成功了,这个一个Linux系统我先把Linux常用指令放到这里哈!
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文件夹了
以上就是简单安装node环境的基本指令,下面是我们的环境遍历不部分
为什么设置环境变量?
设置环境变量是可以让我们在我们linux系统的任何位置去访问,否则只能在我们可执行文件的文件夹内访问;
设置环境变量步骤
1、执行 1、执行
vim /etc/profile
2、输入i,代表insert,新增数据
3、在文件底部添加环境变量
export NODEJS_HOME=/usr/local/node
export PATH=$NODEJS_HOME/bin:$PATH
4、退出保存
点击Esc
输入冒号:
输入wq
回车即可
我们测试下哈!
打完收工
安装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
3、打开生成的密钥
vim /root/.ssh/id_rsa.pub
复制
4、git clone 即可哟
Nginx简介
介绍
Nginx是一个高性能的HTTP服务器代理,实现对HTTP请求的处理,把HTTP请求拦截下来之后交给服务器处理;
主要作用
1、负载均衡
负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。简单来说就是:现有的请求使服务器压力太大无法承受,所有我们需要搭建一个服务器集群,去分担原先一个服务器所承受的压力,那现在我们有ABCD等等多台服务器,我们需要把请求分给这些服务器。
2、动静分离
将简单的静态资源请求交给自己(这方面Nginx性能也比较优越)或者其它服务器处理,将动态资源请求交给其它服务处理。
安装Nginx
温馨提示我使用的Windows进行演示的,如果您要部署项目、已经安装了上述的Xshell并且使用的阿里云服务器这个nginx不用安装,他在服务器上已经自带了!
我选择的一个稳定的版本
温馨提示不能使用中文字符、空格目录
目录介绍
conf:Nginx核心配置文件所在目录,其中重要的是nginx.conf文件。温馨提示最重要的 logs:日志目录,其中最主要的是errs.log文件,如果启动之后在任务管理器没有看到程序启动,可以通过分析该文件的错误输出定位问题。 temp:存放临时文件的目录。 html:存放静态资源的目录,当然你也可以在nginx.conf配置文件种指定其它位置。
主要命令
温馨提示在nginx.exe目录下,使用cmd进入命令行
start nginx代表启动Nginx
输入命令start nginx,就会弹出一个窗口代表启动成功
nginx -v 查看版本号
nginx -t 验证是否配置成功
nginx -s stop或者nginx -s quit关闭nginx
nginx -s stop会有序的关闭程序不会丢失代码,nginx -s quit会直接关闭可能会丢失代码
代表关闭成功
Nginx使用
配置Nginx虚拟服务器
这个是Nginx最有用,也是最核心的功能。一个Nginx可以配置多个虚拟服务器。Nginx通过监听80端口接收到HTTP请求,然后通过虚拟服务器的配置规则和条件将请求转发到其它服务器。 这就是实现负载均衡的主要技术原理。
我们打开conf/nginx.conf文件,如下图所示就是Nginx默认配置了一个虚拟服务器:
- 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:
证明了虚拟机配置所代表的含义。
下面还有一段配置,代表当出现500、502、404等错误时,访问/50x.html,而location又指明,50x.html的路径也在当前html目录:
正向代理、反向代理
正向代理
正向代理类似一个跳板机,代理访问外部资源。
例子:
我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。
客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。
总结:
正向代理 是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务z器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
正向代理的用途:
1)访问原来无法访问的资源,如google
2) 可以做缓存,加速访问资源
3)对客户端访问授权,上网进行认证
4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
反向代理
初次接触方向代理的感觉是,客户端是无感知代理的存在的,反向代理对外都是透明的,访问者者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
反向代理的作用:
(1)保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击
大型网站,通常将反向代理作为公网访问地址,Web服务器是内网。
(2)负载均衡,通过反向代理服务器来优化网站的负载
二者区别
部署后端项目
因为我们已经安装了git我们直接git clone 就好了
我把前后端项目放到一起了,我直接就搞好了如下
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
后端服务部署成功
部署前端项目
打包
linux通过git指令,把前端的代码获取到,随后把使用 npm run build
进行打包
打包后会生成一个dist文件,而这里面由打包出的index文件,在上面我们们知道,nginx是通过路由来匹配index文件,所以我们把这个index放到我们的对应nginx路径下就好了!
部署前端nginx的操作
我们使用的阿里云服务器,已经自带nginx了
搜索nginx文件
which nginx
我们进入文件找到,
主要配置文件在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
走你