使用nginx,pm2,node部署vue,nuxt項(xiàng)目

最近學(xué)習(xí)vue和nuxt,于是部署Vue和Nuxt項(xiàng)目到騰訊云上,因?yàn)轫?xiàng)目涉及一些跨域請(qǐng)求父晶,所以采用了Nginx代理請(qǐng)求本地的node服務(wù)(利用pm2做進(jìn)程管理)。node服務(wù)借助axios設(shè)置headers的referer弄跌、host轉(zhuǎn)發(fā)請(qǐng)求甲喝,解決跨域請(qǐng)求問題。


timg (1).gif

nuxt架子git地址

vue架子git地址

一铛只、部署過步驟


1.首先購買服務(wù)器埠胖,域名等。獲得公共ip地址淳玩,下載遠(yuǎn)程桌面鏈接軟件直撤;
2.服務(wù)器新建root文件夾。拉去GitHub項(xiàng)目代碼至root目錄下蜕着,npm install安裝依賴的包谋竖;
3.項(xiàng)目構(gòu)建红柱,無錯(cuò)誤后,下載nginx,并修改nginx-conf的代理配置蓖乘;
4.用nod給項(xiàng)目起一個(gè)服務(wù)锤悄,并使用pm2對(duì)node的進(jìn)程進(jìn)行管理和保護(hù);
5.本地瀏覽器輸入域名和相應(yīng)的端口號(hào)嘉抒,頁面正常顯示零聚,部署完成。

3,4,5接下來會(huì)詳細(xì)講到

二些侍、vue項(xiàng)目的部署

1.vue項(xiàng)目構(gòu)建

(1)首先需要安裝express起動(dòng)服務(wù)

$ npm install express --save

(2)因?yàn)閜m2是基于服務(wù)來管理的隶症,所以我們需要一個(gè)在webpack構(gòu)建好的靜態(tài)文件夾上(一般是dist/)搭建一個(gè)node服務(wù),這里我們用express來搭建node服務(wù)岗宣。在項(xiàng)目的跟目錄創(chuàng)建app.js

// app.js
const fs = require('fs');
const path = require('path');
const express = require('express');
const chalk = require('chalk')
const app = express();
app.use(express.static(path.resolve(__dirname, './dist')))

app.get('/', function(req, res) {
    const html = fs.readFileSync(path.resolve(__dirname, './dist/home.html'), 'utf-8')
    res.send(html)
})

app.get('/home', function(req, res) {
    const html = fs.readFileSync(path.resolve(__dirname, './dist/home.html'), 'utf-8')
    res.send(html)
})

app.get('/about', function(req, res) {
    const html = fs.readFileSync(path.resolve(__dirname, './dist/about.html'), 'utf-8')
    res.send(html)
})
app.listen(8082, res => {
    console.log(chalk.yellow('Start Service On 8082'));
});

(3)修改vue.config.ts 的publicPath和port

修改端口蚂会,跟代理端口一致,修改publicPath為空

port: 8082
publicPath: ''

(4) 打包項(xiàng)目

npm run build

這樣在根目錄終端下運(yùn)行使用pm2運(yùn)行node app.js就可以搭建一個(gè)以dist為根路徑的node服務(wù)了(這里要確保安裝了代碼中的依賴插件)。
(5)在服務(wù)器全局安裝pm2

// 安裝pm2
npm i pm2 -g

(6)pm2在項(xiàng)目根目錄下運(yùn)行

pm2 start node_modules/nuxt/bin/nuxt-start --name ts-vue-test

這樣node服務(wù)就可以用pm2進(jìn)行操作了狈定,查看pm2管理的項(xiàng)目颂龙。


image.png

可以運(yùn)行pm2 list查看當(dāng)前管理的項(xiàng)目
常用的pm2命令總結(jié)

pm2 show 0                         # 查看進(jìn)程詳情
pm2 list                                #查看當(dāng)前的進(jìn)程列表
pm2 stop all                         #停止PM2列表中所有的進(jìn)程
pm2 stop 0                           #停止PM2列表中進(jìn)程為0的進(jìn)程
pm2 reload all                       #重載PM2列表中所有的進(jìn)程
pm2 reload 0                         #重載PM2列表中進(jìn)程為0的進(jìn)程
pm2 delete 0                         #刪除PM2列表中進(jìn)程為0的進(jìn)程
pm2 delete all                       #刪除PM2列表中所有的進(jìn)程

2、Nginx的配置

項(xiàng)目進(jìn)行到現(xiàn)在纽什,在服務(wù)器上的項(xiàng)目正常沒有問題,但是當(dāng)我們?cè)跒g覽器中輸入http://zhoupengfei1996.com:8082/躲叼,額芦缰,震驚,你并沒有看到自己想要的結(jié)果枫慷,(让蕾;′⌒`)

這時(shí)候就改Nginx出場(chǎng)時(shí)候啦,當(dāng)當(dāng)當(dāng)當(dāng)~~~

(1)或听、Nginx安裝

(1)第一步探孝、Nginx 的安裝步驟比較簡(jiǎn)單,安裝在windows上推薦使用壓縮包的安裝方式誉裆,下載地址;

(2) 第二步顿颅、有穩(wěn)定版本和最新版本及以前版本,推薦使用穩(wěn)定版本開發(fā)

(3) 第三步足丢、下載完成之后粱腻,進(jìn)行解壓可以看到如下 文件結(jié)構(gòu)

image.png

(4)第四步、雙擊nginx,exe 就啟動(dòng)了斩跌。在頁面輸入localhost绍些。出現(xiàn)如下界面則表示安裝成功。默認(rèn)監(jiān)聽80端口號(hào)

image.png

(5)第五步耀鸦、nginx的配置柬批,打開下載的nginx文件夾,選擇conf/nginx.conf,修改配置如下:

#user  nginx;
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    gzip  on;
    server {
        listen       80;
        server_name  www.zhoupengfei1996.com:8082;
        location / {
            proxy_pass  http://127.0.0.1:8082/;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

(6)第六步氮帐、nginx根目錄下打開命令窗口嗅虏,nginx -s reload 重新載入nginx(當(dāng)配置信息發(fā)生修改時(shí)),重新在瀏覽器中打開www.zhoupengfei1996.com. 頁面正常請(qǐng)求到揪漩。如下圖:

image.png

nginx其他命令

start nginx             # windows下的啟動(dòng)命令
nginx -s quit           # 停止ngix
nginx -s reload      # 重新載入nginx(當(dāng)配置信息發(fā)生修改時(shí))
nginx -h                # 查看幫助信息

至此旋恼,vue項(xiàng)目部署完畢。
參考文章:
Vue項(xiàng)目部署(阿里云+Nginx代理+PM2)
nginx+pm2+vue+webpack發(fā)布項(xiàng)目


三奄容、nuxt項(xiàng)目的部署

1.為什么要用Nuxt.js
原因其實(shí)不用多說冰更,就是利用Nuxt.js的服務(wù)端渲染能力來解決Vue項(xiàng)目的SEO問題。

二昂勒、Nuxt.js和純Vue項(xiàng)目的簡(jiǎn)單對(duì)比

  1. build后目標(biāo)產(chǎn)物不同
    vue: dist
    nuxt: .nuxt

  2. 網(wǎng)頁渲染流程
    vue: 客戶端渲染蜀细,先下載js后,通過ajax來渲染頁面戈盈;
    nuxt: 服務(wù)端渲染奠衔,可以做到服務(wù)端拼接好html后直接返回,首屏可以做到無需發(fā)起ajax請(qǐng)求塘娶;

  3. 部署流程
    vue: 只需部署dist目錄到服務(wù)器归斤,沒有服務(wù)端,需要用nginx等做Web服務(wù)器刁岸;
    nuxt: 需要部署幾乎所有文件到服務(wù)器(除node_modules脏里,.git),自帶服務(wù)端虹曙,需要pm2管理(部署時(shí)需要reload pm2)迫横,若要求用域名,則需要nginx做代理酝碳。

  4. 項(xiàng)目入口
    vue: /src/main.js矾踱,在main.js可以做一些全局注冊(cè)的初始化工作;
    nuxt: 沒有main.js入口文件疏哗,項(xiàng)目初始化的操作需要通過nuxt.config.js進(jìn)行配置指定呛讲。

1.nuxt項(xiàng)目構(gòu)建

1.在本地開發(fā)的項(xiàng)目中配置及打包

npm run build

2.打包后,將以下文件上傳至服務(wù)器,接下來的操作都在服務(wù)器上進(jìn)行操作

.nuxt
static
nuxt.config.js
package.json

我使用的是直接把整個(gè)項(xiàng)目上傳到git上沃斤,服務(wù)器這邊拉取代碼

3.進(jìn)入到項(xiàng)目的根目錄下圣蝎,依次執(zhí)行

npm install
npm run dev
npm run build
npm run start

4.進(jìn)入項(xiàng)目根目錄下,pm2啟動(dòng)nuxt項(xiàng)目服務(wù)

pm2 start npm --name "my-nuxt-app" -- run start

nuxt被啟動(dòng)衡瓶,如下圖:

image.png

5.Nginx配置代理服務(wù)
nginx可以開啟多個(gè)代理徘公,在代理vue項(xiàng)目的nginx配置文件中,新增一個(gè)服務(wù)哮针,如下:

# 新建一個(gè)nuxtserver服務(wù)
upstream nuxtserver{
        server 127.0.0.1:3000;
        keepalive 64;
 }
 server {
        listen  8080;
        server_name     www.zhoupengfei1996.com;  #這里對(duì)應(yīng)你服務(wù)器的域名
        location / {
                proxy_pass      http://nuxtserver;  #這里對(duì)應(yīng)上面upstream中新建的服務(wù)名
                index       index.html  index.htm;
        }
               location /home {
                proxy_pass  http://nuxtserver;
                index       home.html   home.htm;
        }
 }

重新載入nginx即可

nginx -s reload      # 重新載入nginx(當(dāng)配置信息發(fā)生修改時(shí))

至此关面,nuxt部署完畢坦袍,本地瀏覽器輸入www.zhoupengfei1996.com:8080即可查看頁面:

image.png

參考:
Nuxt服務(wù)端部署

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市等太,隨后出現(xiàn)的幾起案子捂齐,更是在濱河造成了極大的恐慌,老刑警劉巖缩抡,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奠宜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡瞻想,警方通過查閱死者的電腦和手機(jī)压真,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蘑险,“玉大人滴肿,你說我怎么就攤上這事〉杵” “怎么了泼差?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)呵俏。 經(jīng)常有香客問我堆缘,道長(zhǎng),這世上最難降的妖魔是什么普碎? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任套啤,我火速辦了婚禮,結(jié)果婚禮上随常,老公的妹妹穿的比我還像新娘。我一直安慰自己萄涯,他們只是感情好绪氛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涝影,像睡著了一般枣察。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上燃逻,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天序目,我揣著相機(jī)與錄音,去河邊找鬼伯襟。 笑死猿涨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的姆怪。 我是一名探鬼主播叛赚,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼澡绩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了俺附?” 一聲冷哼從身側(cè)響起肥卡,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎事镣,沒想到半個(gè)月后步鉴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡璃哟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年氛琢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沮稚。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡艺沼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蕴掏,到底是詐尸還是另有隱情障般,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布盛杰,位于F島的核電站挽荡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏即供。R本人自食惡果不足惜定拟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逗嫡。 院中可真熱鬧青自,春花似錦、人聲如沸驱证。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抹锄。三九已至逆瑞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間伙单,已是汗流浹背获高。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吻育,地道東北人念秧。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像扫沼,于是被迫代替她去往敵國(guó)和親出爹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子庄吼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353