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 相关文章推荐
客户端静态页面玩分页
Jun 26 Javascript
超链接的禁用属性Disabled使用示例
Jul 31 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
Feb 17 Javascript
浏览器兼容的JS写法总结
Apr 27 Javascript
JavaScript代码性能优化总结(推荐)
May 16 Javascript
JavaScript地理位置信息API
Jun 11 Javascript
vue webpack打包优化操作技巧
Feb 22 Javascript
使用angular-cli webpack创建多个包的方法
Oct 16 Javascript
JavaScript使用闭包模仿块级作用域操作示例
Jan 21 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
Sep 18 Javascript
Nuxt v-bind绑定img src不显示的解决
Dec 05 Javascript
简单了解three.js 着色器材质
Aug 03 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 5.0对象模型深度探索之对象复制
2008/03/27 PHP
PHP语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
2013/10/10 PHP
如何利用http协议发布博客园博文评论
2015/08/03 PHP
JS中confirm,alert,prompt函数使用区别分析
2010/04/01 Javascript
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
基于JQuery制作的产品广告效果
2010/12/08 Javascript
JavaScript常用脚本汇总(一)
2015/03/04 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
JavaScript中的事件委托及好处
2016/07/12 Javascript
面试常见的js算法题
2017/03/23 Javascript
JavaScript制作简单的框选图表
2017/05/15 Javascript
基于webpack4.X从零搭建React脚手架的方法步骤
2018/12/23 Javascript
JavaScript惰性求值的一种实现方法示例
2019/01/11 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
JS面向对象编程实现的Tab选项卡案例详解
2020/03/03 Javascript
js+canvas实现五子棋小游戏
2020/08/02 Javascript
Vue实现简单购物车功能
2020/12/13 Vue.js
举例讲解Python设计模式编程中的访问者与观察者模式
2016/01/26 Python
pygame实现成语填空游戏
2019/10/29 Python
python实现批处理文件
2020/07/28 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
2020/12/18 Python
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
远程教育心得体会
2014/01/03 职场文书
消防器材管理制度
2014/01/28 职场文书
创意广告词
2014/03/17 职场文书
升旗仪式主持词
2014/03/19 职场文书
化工专业求职信
2014/07/01 职场文书
模范班主任事迹材料
2014/12/17 职场文书
英文感谢信格式
2015/01/21 职场文书
2015年重阳节慰问信
2015/03/23 职场文书
班主任开场白
2015/06/01 职场文书
2016年国庆节67周年活动总结
2016/04/01 职场文书
python - asyncio异步编程
2021/04/06 Python
python 调用js的四种方式
2021/04/11 Python