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 30 Javascript
jquery遍历input取得input的name
Apr 27 Javascript
jquery 实现表单验证功能代码(简洁)
Jul 03 Javascript
解决JS浮点数运算出现Bug的方法
Mar 12 Javascript
Javascript中判断变量是数组还是对象(array还是object)
Aug 14 Javascript
AngularJS基础学习笔记之指令
May 10 Javascript
Bootstrap每天必学之导航
Nov 26 Javascript
Node.js自定义实现文件路由功能
Sep 22 Javascript
JavaScript自执行函数和jQuery扩展方法详解
Oct 27 jQuery
vue路由守卫及路由守卫无限循环问题详析
Sep 05 Javascript
vue学习笔记之给组件绑定原生事件操作示例
Feb 27 Javascript
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
Jun 10 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
星际争霸任务指南——神族
2020/03/04 星际争霸
层叠菜单的动态生成
2006/10/09 PHP
php自定义函数call_user_func和call_user_func_array详解
2011/07/14 PHP
PHP中的生成XML文件的4种方法分享
2012/10/06 PHP
浅谈php和.net的区别
2014/09/28 PHP
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
jquery操作对象数组元素方法详解
2014/11/26 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
jQuery on()方法使用技巧详解
2015/04/16 Javascript
详解JavaScript的while循环的使用
2015/06/03 Javascript
javascript记住用户名和登录密码(两种方式)
2015/08/04 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
AngularJS入门心得之directive和controller通信过程
2016/01/25 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
vue中使用localstorage来存储页面信息
2017/11/04 Javascript
原生js实现碰撞检测
2020/03/12 Javascript
JS async 函数的含义和用法实例总结
2020/04/08 Javascript
关于JavaScript中异步/等待的用法与理解
2020/11/18 Javascript
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
Python编程入门之Hello World的三种实现方式
2015/11/13 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
Python3爬虫之urllib携带cookie爬取网页的方法
2018/12/28 Python
Python3爬虫关于代理池的维护详解
2020/07/30 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
暑期社会实践方案
2014/02/05 职场文书
自动一体化专业求职信
2014/03/15 职场文书
商务宴请邀请函范文
2015/02/02 职场文书
格列夫游记读书笔记
2015/07/01 职场文书
2015年圣诞节寄语
2015/08/17 职场文书
PHP判断是否是json字符串
2021/04/01 PHP
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang
JavaScript获取URL参数的方法分享
2022/04/07 Javascript