1.使用xshell登录到阿里云服务器。安装nginx(本文安装到/etc下)
[plain] view plain copy
cd /etc
apt-get update
apt-get install nginx
2.首先先配置nginx,然后再根据配置文件做下一步操作
打开/etc/nginx/nginx.conf文件
[plain] view plain copy
vim /etc/nginx/nginx.conf
在nginx.conf中配置如下:
[plain] view plain copy
user www-data
worker_processes auto
pid /run/nginx.pid
events {
worker_connections 768
# multi_accept on
}
http {
##
# Basic Settings
##
tcp_nodelay on
keepalive_timeout 65
types_hash_max_size 2048
# server_tokens off
# server_names_hash_bucket_size 64
# server_name_in_redirect off
include /etc/nginx/mime.types
default_type application/octet-stream
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on
##
# Logging Settings
##
access_log /var/log/nginx/access.log
error_log /var/log/nginx/error.log
##
# Gzip Settings
##
gzip on
gzip_disable "msie6"
# gzip_vary on
# gzip_proxied any
# gzip_comp_level 6
# gzip_buffers 16 8k
# gzip_http_version 1.1
##
# Virtual Host Configs
##
gzip on
gzip_disable "msie6"
# gzip_vary on
# gzip_proxied any
# gzip_comp_level 6
# gzip_buffers 16 8k
# gzip_http_version 1.1
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf
include /etc/nginx/sites-enabled/*
#以下为我们添加的内容
server {
listen 80
server_name your-ipaddress
root /home/my-project/
index index.html
location /datas {
rewrite ^.+datas/?(.*)$ / break
include uwsgi_params
proxy_pass http://ip:port
}
}
}
接下来就根据配置文件进行下一步工作。配置文件中的server_name后面是阿里云服务器的ip地址
3.配置文件中的listen是nginx监听的端口号,所以需要在阿里云服务器上为80端口添加安全组规则
在本地的浏览器登录阿里云服务器->进入控制台->点击安全组->点击配置规则->点击添加安全组规则,之后配置如下(注:入方向和出方向都要配置)
4.配置文件中的root和index那两行表示我们把项目文件夹放在/home/my-project下
例如有两个项目文件夹分别为test1,test2,里面都有index.html。则目录结构如下
/home
|--my-project
|--test1
|--index.html
|--test2
|--index.html
则在浏览器输入http://ip/test1/index.html
服务器便会在/home/my-project中找到test1下的index.html执行;
如果在浏览器中输入http://ip/test2/index.html
服务器便会在/home/my-project中找到test2下的index.html执行;
这样便可以在服务器下放多个项目文件夹。
5.所以我们也需要在本地项目的config/index.js里的build下进行修改,如果要把项目放到test1下,则
[javascript] view plain copy
assetsPublicPath: '/test1/',
如果用到了vue-router,则修改/router/index.js
[javascript] view plain copy
export default new Router({
base: '/test1/', //添加这行
linkActiveClass: 'active',
routes
})
6.nginx配置文件中的location则是针对跨域处理,表示把对/datas的请求转发给http://ip:port,本文中这个http://ip:port下就是需要的数据,例如http://ip:port/seller,在本地项目文件中ajax请求数据的地方如下
[javascript] view plain copy
const url = '/datas/seller'
this.$http.get(url).then((response) => {
.....
})
7.修改后在本地命令行下运行:cnpm run build 生成dist文件。把dist文件里的index.html和static文件上传到服务器的/home/my-project/test1下,目录结构如下
/home
|--my-project
|--test1
|--index.html
|--static
8.启动nginx
[plain] view plain copy
service nginx start
9.至此项目部署成功,在浏览器下输入: http://ip/test1/index.html 即可
在搞清root,alias,try_files的基本用法后,我开始尝试vue项目的部署。
(用法我之前的文章也研究过)
此前,听说挺多小伙伴会遇到vue-router-history模式种种问题,比如路径无法匹配,找不到静态资源,刷新页面404,etc...
不急,只要找到原因,问题是可以迎刃而解的。
项目部署环境一般可以分为三种:生产环境,测试环境,开发环境。
开发环境 :开发环境时程序员专门用于开发的服务器,配置可以比较随意,为了开发调试方便,一般打开全部错误报告和测试工具,是最基础的环境。
生产环境 :生产环境是指正式提供对外服务的,一般会关掉错误报告,打开错误日志,是最重要的环境。部署分支一般为master分支。
测试环境 :一般是克隆一份生产环境的配置,一个程序在测试环境工作不正常,那么肯定不能把它发布到生产服务器,是开发环境到生产环境的过渡环境。
测试环境的分支存在bug,一般不会让用户和其他人看到,并且测试环境会尽量与生产环境相似。
如何区分生产环境和开发环境?
process.env.NODE_ENV 是 node 的全局变量 process 的一个属性,它的作用是区分当前环境是生产环境还是开发环境,
可以参考学习: 理解webpack中的process.env.NODE_ENV
其实一般的vue单页面应用项目中,遇到路径无法匹配,或者资源引用错误问题都是由于以下几个属性造成的,如果你经常翻官网文档,那看到这里应该就已经会意,他们分别是:
接下来我将讲解以下这几个属性的使用。
依照官网的解释,贴一张用法图:
当使用基于 HTML5 history.pushState 的路由时,“相对 publicPath” 会受到限制,即是说在使用history模式时,publicPath需要设置为绝对路径。那么在vue.config.js文件中,你应该这样配置:
在nginx配置文件中你就需要这样配置:
假设我的项目名为history,并且放在/usr/local/webserver/nginx/myProject 目录下,如tree图
示例贴一下: 珂朵莉的服务器 (点击about会使用路由跳转)
如果你的配置出现页面空白,或者404访问错误,资源引用问题(F12可观察),这时你就要检查publicPath,assetsDir甚至是nginx有没有配置正确了。
我觉得原因是页面刷新时,服务器找不到任何的静态资源,就报404,那么解决办法就简单了: 你要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。即使用try_files 寻找index.html。
可以参考本项目的nginx配置:
但如此配置后,你的服务器就不再返回 404 错误页面,因为对于所有路径都会返回 index.html 文件。为了避免这种情况,你应该在 Vue 应用里面覆盖所有的路由情况,然后在给出一个 404 页面。
参考官网例子:
另一方面,有可能是Vue-Router没有配置好,需要注意初始化Router时候的base参数:
如此项目部署就完成了。
感谢博哥指出之前文章错误之处,已经修正,谢谢
第一步配置 vue.config.js
第二步修改路由,改为 hash模式
第三步文件打包,执行以下,目录中会出现一个dist文件夹,将文件拖到服务器的 root 文件夹中
第四步可以通过域名进行访问 http://www.linlin.run/my-project/index.html#/home
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)