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 相关文章推荐
jQuery中scrollTop()方法用法实例
Jan 16 Javascript
本人自用的global.js库源码分享
Feb 28 Javascript
使用impress.js制作幻灯片
Sep 09 Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
Sep 22 Javascript
解析ajaxFileUpload 异步上传文件简单使用
Dec 30 Javascript
Bootstarp基本模版学习教程
Feb 01 Javascript
ionic实现下拉刷新载入数据功能
May 11 Javascript
chosen实现省市区三级联动
Aug 16 Javascript
Vue.js获取被选择的option的value和text值方法
Aug 24 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
Oct 24 Javascript
ES6 对象的新功能与解构赋值介绍
Feb 05 Javascript
深入理解 ES6中的 Reflect用法
Jul 18 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 静态变量与自定义常量的使用方法
2010/01/26 PHP
PHP制作用户注册系统
2015/10/23 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
2007/04/29 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
2015/12/13 Javascript
JavaScript代码判断点击第几个按钮
2015/12/13 Javascript
AngularJS基础 ng-class-odd 指令示例
2016/08/01 Javascript
jQuery实现页面顶部下拉广告
2016/12/30 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
详解Angular CLI + Electron 开发环境搭建
2017/07/20 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
JS实现的按钮点击颜色切换功能示例
2017/10/19 Javascript
全新打包工具parcel零配置vue开发脚手架
2018/01/11 Javascript
JS实现全屏预览F11功能的示例代码
2018/07/23 Javascript
Vue中的Props(不可变状态)
2018/09/29 Javascript
vue项目引入Iconfont图标库的教程图解
2018/10/24 Javascript
vue2.0 获取从http接口中获取数据,组件开发,路由配置方式
2019/11/04 Javascript
Python编程实现控制cmd命令行显示颜色的方法示例
2017/08/14 Python
python3.0 模拟用户登录,三次错误锁定的实例
2017/11/02 Python
Pandas 对Dataframe结构排序的实现方法
2018/04/10 Python
python re模块的高级用法详解
2018/06/06 Python
Python中分支语句与循环语句实例详解
2018/09/13 Python
对Python 检查文件名是否规范的实例详解
2019/06/10 Python
Python中判断子串存在的性能比较及分析总结
2019/06/23 Python
Python PO设计模式的具体使用
2019/08/16 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
手工制作的豪华英式沙发和沙发床:Willow & Hall
2019/05/03 全球购物
香港士多网上超级市场:Ztore
2021/01/09 全球购物
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
保险专业自荐信范文
2014/02/20 职场文书
函授毕业生自我鉴定范文
2014/03/25 职场文书
2014年保卫工作总结
2014/12/05 职场文书
金正昆讲礼仪观后感
2015/06/11 职场文书
Html5页面播放M4a音频文件
2021/03/30 HTML / CSS