不少前端朋友可能不是那么了解服务器配置。今天忽然翻到以前写的这篇文章,修改完善了以后分享给你们一些常见的的Web服务器部署项目的方式。javascript
下面讲的每一种服务器深刻进去都很复杂,在这篇文章只是讨论一下基本的部署和使用。更高级的知识和用法还须要各位朋友自行去探索和发现, 开始阅读以前但愿你们能先了解一些Linux
基础,就不至于看起来吃力了。php
注: 下面全部的例子大多基于vue-router
的history
模式下打包生成的静态文件,其余框架也都大同小异css
Nginx
是一个高性能的HTTP
和反向代理web
服务器,在链接高并发的状况下,Nginx
表现至关出色。html
这里就不讲这个了吧, 有须要的朋友能够看这个前端
为了支持history
模式, 咱们要修改nginx/conf/nginx.conf
文件vue
location / {
root html;
try_files $uri $uri/ /index.html; # 只须要加上这么一行
index index.html index.htm;
}
复制代码
而后把静态资源放在html
文件夹内java
而后启动Nginx
服务器node
cd usr/local/nginx/sbin
./nginx
复制代码
接着访问你的服务器就行OK了。linux
nginx
实现资源压缩的原理是经过ngx_http_gzip_module
模块拦截请求,并对须要作gzip
的类型作gzip
压缩,该模块是默认基础的,不须要从新编译,直接开启便可。大致配置以下nginx
#开启和关闭gzip模式
gzip on|off;
#gizp压缩起点,文件大于1k才进行压缩
gzip_min_length 1k;
# gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
gzip_comp_level 1;
# 进行压缩的文件类型。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript ;
#nginx对于静态文件的处理模块,开启后会寻找以.gz结尾的文件,直接返回,不会占用cpu进行压缩,若是找不到则不进行压缩
gzip_static on|off
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
# 设置压缩所须要的缓冲区大小,以4k为单位,若是文件为7k则申请2*4k的缓冲区
gzip_buffers 2 4k;
# 设置gzip压缩针对的HTTP协议版本
gzip_http_version 1.1;
复制代码
Nginx
配置虽然简单,可是它自己是很是强大的,代理,负载等等都是很是具备实用性的。
Apache
是世界使用排名第一的Web服务器软件, 使用很是普遍。因为VueRouter的hash
模式本质上和静态资源没什么区别,在Apache
上发布又比较简单,这里就跳过了发布直接进入配置支持History模式
首先要从新修改\conf\httpd.conf
文件让文件支持rewrite
找到
// 这一行须要解开注释 引入这个模块
LoadModule rewrite_module modules/mod_rewrite.so
复制代码
而后新增或者修改下面得代码
# 重写文件根目录
DocumentRoot "/usr/local/apache/demo"
# 目录
<Directory "/usr/local/apache/demo">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
Options Indexes FollowSymLinks
#
# 修改未容许重写
AllowOverride all
#
# Controls who can get stuff from this server.
#
Require all granted
</Directory>
复制代码
上面操做时修改服务器得默认配置让服务器支持Rewrite
,下面来建立Rewrite
规则
首先在和index.html
同级得地方新建.htacces
文件,具体内容能够参照Vue-Router
官网给得例子
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
复制代码
/usr/local/apache/bin/apxs -i -c -n -a mod_deflate.so
复制代码
如今这种先后端分离的大环境下,通常不会有太多人用Tomcat
做web
服务器。有的企业可能会配合着SpringMVC
来一块儿使用,这里也来写一下。配置起来也很简单。
server.xml
首先找到Tomcat
服务器目录中tomcat/conf/server.xml
文件,找到Host
,修改为你想要的配置。主要是appBase
,它决定了静态文件查询的基础目录。
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
</Host>
复制代码
只须要在发布的文件夹中新增WEB-INF
配置文件夹中就行。以下图
WEB-INF
文件夹放在项目中那么tomcat
会自动扫描文件夹中的web.xml
而后添加配置。
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" metadata-complete="true">
<!-- <display-name>webapp</display-name> -->
<description>
webapp
</description>
<error-page>
<!-- 重写404页面 -->
<error-code>404</error-code>
<location>/index.html</location>
</error-page>
</web-app>
复制代码
这就配置完了,能够说是贼简单了。至于怎么安装Tomcat
服务器,你们自行解决吧😁
发布SSR
项目的时候官方推荐了两种方式服务端渲染应用部署 和 静态应用部署。静态应用部署的话基本上就失去了SSR
的优点,并且部署方式也和上面讲的大同小异。这里只讲服务端渲染应用部署。
服务端渲染应用部署的话不一样于静态部署,咱们同时要在服务器上部署上Node
环境。
Node环境部署
/usr/local
文件夹并在这个文件夹下新建一个存放安装环境的文件夹node
后进入node
文件夹(名字能够随便起,这里作demo就用node了)cd /usr/local
mkdir -p node
复制代码
wget https://nodejs.org/dist/v10.13.0/node-v10.13.0-linux-x64.tar.gz
复制代码
# 解压到当前文件夹
tar -zxvf node-v10.13.0-linux-x64.tar.gz -C ./
# 更名
mv node-v10.13.0-linux-x64/ ./node10.13.0
复制代码
node,npm
注册环境变量(其余的npm
全局包也要这样注册)# 软连接指向到node npm
ln -s /usr/local/node/node10.13.0/bin/node /usr/local/bin/node
ln -s /usr/local/node/node10.13.0/bin/npm /usr/local/bin/npm
复制代码
ls -al /usr/local/bin
复制代码
显示以下就表示成功了
node -v
node -v
# 出现版本号就是安装成功了
v10.13.0
复制代码
到这里为止咱们的Node
环境就安装成功了,接下来进行nuxt
部署
Nuxt
部署nuxt
,而后按照上面的方式创建软链接# 安装
npm i nuxt -g
# 创建软链接
ln -s /usr/local/node/node10.13.0/bin/nuxt /usr/local/bin/nuxt
复制代码
回到/local
文件夹下,咱们创建一个nuxt
文件用来存放个人nuxt
项目。而后进入nuxt
文件夹
# 回到local
cd ../
mkdir nuxt
cd nuxt
复制代码
在本地环境中执行nuxt build
,而后会生成一个.nuxt
文件夹。
而后修改package.json
,为它加上新的内容,nuxt
应用会根据下面的配置自动配置服务的端口号和地址。
"config": {
"nuxt": {
"host": "0.0.0.0", # 经过IPV4访问
"port": xxxx
}
},
复制代码
而后将项目中的.nuxt文件夹 static文件夹 package.json nuxt.config.js
上传到服务器的nuxt
文件夹中,
而后在nuxt
文件夹中执行
# 为了方便我这这里服务器上执行了install,正式项目不建议这么干
npm i
复制代码
下载完成以后执行nuxt start
出现下面的日志就表示成功启动了咱们的nuxt
应用
pm2
使用既然使用了Node
服务,那咱们最好是使用pm2作进程守护,至于pm2
是什么,以及pm2
是干什么的,这篇文章咱们不过多的赘述,有兴趣能够本身看看。
首先安装pm2
npm i pm2 -g
# 创建软链接
ln -s /usr/local/node/node10.13.0/bin/pm2 /usr/local/bin/pm2
复制代码
而后在package.json
中加入pm
启动指令或者直接像下面这样启动
# package.json
"scripts": {
"pm2:nuxt": "pm2 start npm --name 'XXX' -- run nuxt:start", # 启动名字为xxx的进程
"nuxt:start": "PORT=xxxx nuxt start",
"start": "nuxt start",
"generate": "nuxt generate",
"pm2:stop:all": "pm2 stop all" # 中止全部进程
}
# 直接启动命令
pm2 start npm --name 'XXX' -- run nuxt:start
复制代码
出现这样的日志就表示成功
下面是一些经常使用的pm2
命令
pm2 start 0 # 启动 id为 0的指定应用程序
pm2 restart 0 # 重启 id为 0的指定应用程序
pm2 stop 0 # 中止 id为 0的指定应用程序
pm2 delete 0 # 删除 id为 0的指定应用程序
pm2 list # 查看当前正在运行的进程
pm2 start all # 启动全部应用
pm2 restart all # 重启全部应用
pm2 stop all # 中止全部的应用程序
pm2 delete all # 关闭并删除全部应用
pm2 logs # 控制台显示全部日志
pm2 logs 0 # 控制台显示编号为0的日志
pm2 show 0 # 查看执行编号为0的进程
pm2 monit xxx # 监控名称为xxxx的进程
复制代码
至此,一个Nuxt
应用就算是部署完成了。
经过koa server.js
启动的的时候外网没法访问。用的是阿里云的服务器,安全组规则都添加了。
这个问题的具体出现缘由我暂时还没找到,只是后来换了nuxt start
启动以后外网才能够顺利访问。但愿有了解的大佬能解答一下。
权限不足使用sudo su
找不到node npm
等命令
这个很简单, 咱们再从新创建一边软连接就好了
sudo ln -s /usr/local/bin/node /usr/bin/node
sudo ln -s /usr/local/lib/node /usr/lib/node
sudo ln -s /usr/local/bin/npm /usr/bin/npm
复制代码
项目作完了,总要整整齐齐的发布了才有成就感对吧😁, 文中的服务器种类有点多,不过多学点也不吃亏😭 ,学会了配置服务器,再配合上Node
的自动化脚本发布, 发布体验简直丝滑。
原文地址 若是以为有用得话给个⭐吧