Vue项目部署的实现(阿里云+Nginx代理+PM2)


Posted in Javascript onMarch 26, 2019

最近部署一个Vue项目到阿里云ECS上,因为项目涉及一些跨域请求,所以采用了Nginx代理请求本地的node服务(利用pm2做进程管理)。node服务借助axios设置headersrefererhost转发请求,解决跨域请求问题。

先交代下在阿里云ECS里安装的部署环境:phpstudy(php调试运行大礼包,里面包含nginx、mysql等,还能监控端口占用情况)、pm2(node服务进程管理工具)、nodegit等等。

部署过程

  1. 拉去GitHub项目代码至root目录下(找到安装phpstudy的WWW目录),构建项目
  2. 修改nginx-conf的代理配置、root项配置(指向项目项目的dist目录下)
  3. 启动pm2(项目中,事先已写好服务端逻辑prod.server.js)
  4. 启动phpstudy
  5. 访问项目

构建项目

构建项目前,要修改项目confing目录下的index.js,主要是build部分的端口、目录,具体如下:

build: {
  port: 9001, // 因为我是用PHPStudy做web服务器的,此时php.cgi会占9000端口,所以改用9001
  // Template for index.html
  index: path.resolve(__dirname, '../dist/index.html'),

  // Paths
  assetsRoot: path.resolve(__dirname, '../dist'),
  assetsSubDirectory: 'static',
  assetsPublicPath: '',
  .......
}

主要有两部分

修改端口,跟代理端口一致

port: 9001

修改assetsPublicPath

assetsPublicPath: ''

nginx-conf配置

利用phpstudy,可以很方便的进行nginx相关设置、host修改、端口监控等等。先来说说nginx-conf的配置。

先找到nginx-conf配置入口

Vue项目部署的实现(阿里云+Nginx代理+PM2)

修改ngin-conf

upstream my_project {
 server 127.0.0.1:9001;
 keepalive 64;
}

server {
 listen    80;
 server_name my_project;

 #charset koi8-r;

 #access_log logs/host.access.log main;
 root  "C:/phpStudy/PHPTutorial/WWW/project/dist";

 location / {
  index index.php index.html index.htm; 
  
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $http_host;
  proxy_set_header X-NginX-Proxy true;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "upgrade";
  proxy_max_temp_file_size 0;
  proxy_pass http://my_project/;
  proxy_redirect off;
  proxy_read_timeout 240s; 
   
 }
}

注意事项

root配置,指向构建后目录

root "C:/phpStudy/PHPTutorial/WWW/project/dist";

设置代理端口时,避免端口占用!!

upstream my_project {
 server 127.0.0.1:9001;
 keepalive 64;
}

开始部署时,使用的是9000端口,一直运行不起来,后面发现phpstudy启动是php-cgi.exe默认就使用了9000端口。关于端口使用情况,phpstudy也提供了工具。

Vue项目部署的实现(阿里云+Nginx代理+PM2)

启动pm2

关于pm2的介绍、常规使用自行了解。在项目目录下事先已经写好了转发请求的逻辑。

pro.server.js

var axios = require('axios')
const bodyParser = require('body-parser')
var config = require('./config/index')
var express = require('express')

var app = express()
var apiRoutes = express.Router()

apiRoutes.get('/api/getdata', function(req, res) {
 var url = 'https://a.com'
 axios.get(url, {
  headers: {
   referer: 'https://b.com',
   host: 'b.com'
  },
  params: req.query
 }).then((response) => {
  ....
 }).catch((e) => {
  console.log(e)
 })
})


app.use('/', apiRoutes)

app.use(express.static('./dist'))

var port = process.env.PORT || config.build.port

module.exports = app.listen(port, function (err) {
 if (err) {
  console.log(err)
  return
 }
 console.log('Listening at http://localhost:' + port + '\n')
})

这里只是简单的借助axios可以设置refererhost,实现代理转发的功能。

运行prod.server.js

prod.server.js是在根目录下,所以运行命令如下:

pm2 start prod.server.js

Vue项目部署的实现(阿里云+Nginx代理+PM2)

进程列表:

pm2 start list

Vue项目部署的实现(阿里云+Nginx代理+PM2)

查看进程详情

pm2 show 0

Vue项目部署的实现(阿里云+Nginx代理+PM2)

总结

整个部署过程涉及比较多的知识点,nginx代理node开发部署端口管理等等。在端口占用这个点上卡了一段时间。不过目前只是实现构建部署、访问。但维护成本还是比较高,先得从GitHub拉取代码,本地构建。项目完成以后,研究下持续性集成流程。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
IE FF OPERA都可用的弹出层实现代码
Sep 29 Javascript
基于JQuery的简单实现折叠菜单代码
Sep 15 Javascript
js保存当前路径(cookies记录)
Dec 14 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
Jan 11 Javascript
jQuery实现图片左右滚动特效
Apr 20 Javascript
JS正则表达式比较常见用法
Jan 26 Javascript
全面理解JavaScript中的继承(必看)
Jun 16 Javascript
JSON生成Form表单的方法示例
Nov 21 Javascript
基于Three.js实现360度全景图片
Dec 30 Javascript
vue开发环境配置跨域的方法步骤
Jan 16 Javascript
vue自动路由-单页面项目(非build时构建)
Apr 30 Javascript
Vue快速实现通用表单验证的方法
Feb 24 Javascript
监听element-ui table滚动事件的方法
Mar 26 #Javascript
JavaScript的级联函数用法简单示例【链式调用】
Mar 26 #Javascript
node之本地服务器图片上传的方法示例
Mar 26 #Javascript
详解vue-element Tree树形控件填坑路
Mar 26 #Javascript
vue-router 起步步骤详解
Mar 26 #Javascript
JS div匀速移动动画与变速移动动画代码实例
Mar 26 #Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
Mar 26 #Javascript
You might like
将PHP作为Shell脚本语言使用
2006/10/09 PHP
PHP读取XML值的代码(推荐)
2011/01/01 PHP
Zend的Registry机制的使用说明
2013/05/02 PHP
深入HTTP响应状态码速查表的详解
2013/06/07 PHP
php设置session值和cookies的学习示例
2014/03/21 PHP
ThinkPHP安装和设置
2015/07/27 PHP
slice函数的用法 之不错的应用
2006/12/29 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
jQuery提交表单ajax查询实例代码
2012/10/07 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
js以及jquery实现手风琴效果
2020/04/17 Javascript
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
2017/11/07 Javascript
vue 使用ref 让父组件调用子组件的方法
2018/02/08 Javascript
使用JSON格式提交数据到服务端的实例代码
2018/04/01 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
2019/07/19 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
2019/08/01 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
在GitHub Pages上使用Pelican搭建博客的教程
2015/04/25 Python
Python 解决中文写入Excel时抛异常的问题
2018/05/03 Python
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
Flask框架工厂函数用法实例分析
2019/05/25 Python
Python计算公交发车时间的完整代码
2020/02/12 Python
解决python Jupyter不能导入外部包问题
2020/04/15 Python
windows支持哪个版本的python
2020/07/03 Python
Python 如何查找特定类型文件
2020/08/17 Python
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
介绍一下grep命令的使用
2012/06/28 面试题
建筑工程毕业生自我鉴定
2014/01/14 职场文书
文明餐桌行动实施方案
2014/02/19 职场文书
复兴之路观后感3000字
2015/06/02 职场文书
2015年政教主任工作总结
2015/07/23 职场文书
搞笑欢迎词大全
2015/09/30 职场文书
浅谈@Value和@Bean的执行顺序问题
2021/06/16 Java/Android
Python如何解决secure_filename对中文不支持问题
2021/07/16 Python
国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程
2021/10/05 Javascript