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 相关文章推荐
javascript 写类方式之三
Jul 05 Javascript
ajax 同步请求和异步请求的差异分析
Jul 04 Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
Mar 25 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
Apr 26 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
Aug 22 Javascript
Boostrap模态窗口的学习小结
Mar 28 Javascript
bootstrap输入框组使用方法
Feb 07 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
Apr 13 Javascript
Angular.js实现获取验证码倒计时60秒按钮的简单方法
Oct 18 Javascript
用原生 JS 实现 innerHTML 功能实例详解
Apr 03 Javascript
angular2 NgModel模块的具体使用方法
Apr 10 Javascript
vue请求本地自己编写的json文件的方法
Apr 25 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中的foreach函数
2013/08/31 PHP
Laravel中使用自己编写类库的3种方法
2015/02/10 PHP
php获取twitter最新消息的方法
2015/04/14 PHP
php异常处理方法实例汇总
2015/06/24 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
用JavaScript对JSON进行模式匹配(Part 1-设计)
2010/07/17 Javascript
jQuery1.6 使用方法二
2011/11/23 Javascript
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
js监听键盘事件示例代码
2013/07/26 Javascript
jquery 删除cookie失效的解决方法
2013/11/12 Javascript
Javascript setInterval的两种调用方法(实例讲解)
2013/11/29 Javascript
node.js中的fs.lchown方法使用说明
2014/12/16 Javascript
js实现禁止中文输入的方法
2015/01/14 Javascript
JavaScript中使用Math.floor()方法对数字取整
2015/06/15 Javascript
javascript实现控制div颜色
2015/07/07 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
2015/07/30 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
js给table赋值的实例代码
2016/10/13 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
2018/09/01 Javascript
vue视图不更新情况详解
2019/05/16 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
Python getopt模块处理命令行选项实例
2014/05/13 Python
python基于ID3思想的决策树
2018/01/03 Python
python 8种必备的gui库
2020/08/27 Python
Django执行源生mysql语句实现过程解析
2020/11/12 Python
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
Kingsoft金山公司C/C++笔试题
2016/05/10 面试题
应用数学自荐书范文
2013/11/24 职场文书
解除劳动合同协议书范本
2014/09/13 职场文书
安全责任书
2015/01/29 职场文书
党风廉正建设责任书
2015/01/29 职场文书
小学班主任工作经验交流材料
2015/11/02 职场文书
某某店铺的开业庆典主持词范本
2019/11/25 职场文书