項目中整合 vue + nuxt + axios + vuex + vue-router (nuxt 自帶 vuex 和 vue-router),一個基於 Nuxt 的服務器端渲染 Demohtml
PC端GitHub地址vue
移動端GitHub地址node
關於項目部署折騰了我好多時間,網上許多百度來的文檔不適合個人項目,因此本身摸索着終於部署起來了,開心O(∩_∩)O~~android
詳情請看 Nuxt官網webpack
命令 | 描述 |
---|---|
nuxt | 啓動一個熱加載的 Web 服務器(開發模式) localhost:3000 |
nuxt build | 利用 webpack 編譯應用,壓縮 JS 和 CSS 資源(發佈用) |
nuxt start | 以生成模式啓動一個 Web 服務器 (nuxt build 會先被執行) |
nuxt generate | 編譯應用,並依據路由配置生成對應的 HTML 文件 (用於靜態站點的部署) |
第一步、在本地
npm run build
,會在.nuxt文件夾下生成dist文件;ios
第二步、把本地文件的
.nuxt
,static
,package.json
,nuxt.config.js
,這四個文件夾放到服務器目錄文件下,我在服務器上建立了run/www/visneyNuxt路徑,四個文件放到裏面;nginx
第三步、用cmd進入目錄文件夾,安裝依賴,
npm install -production
;git
第四步、
npm start
此時運行的是 http://localhost:3000;github
項目進行到如今,在服務器上的項目正常沒有問題,可是當咱們在瀏覽器中輸入http://www.visney.cn/,額,震驚,你並無看到本身想要的結果,(;′⌒`)web
這時候就改Nginx出場時候啦,噹噹噹當~~~
第一步、Nginx 的安裝步驟比較簡單,安裝在windows上推薦使用壓縮包的安裝方式,下載地址;
第二步、有穩定版本和最新版本及之前版本,推薦使用穩定版本開發
第三步、下載完成以後,進行解壓能夠看到以下 文件結構
![]()
第四步、雙擊nginx,exe 就啓動了。在頁面輸入localhost。出現以下界面則表示安裝成功。默認監聽80端口號
![]()
第五步、若你的服務器上80端口被佔用,須要修改端口,Windows 下 安裝目錄\conf\nginx.conf中的
server {
listen 80;
server_name localhost;
……
}
複製代碼
改成
server {
listen 81;
server_name localhost;
}
複製代碼
這裏說明下個人配置,詳細參數說明請百度瞭解
第一步、找到安裝目錄下conf 文件下的nginx.conf文件 打開進行 屬性配置
第二步、配置代碼參考了不少的文檔,主要參考https://segmentfault.com/a/1190000012774650,代碼以下
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream nodenuxt {
server 127.0.0.1:3000; # nuxt 項目監聽PC端端口
keepalive 64;
}
server {
listen 80;
server_name www.visney.cn;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Nginx-Proxy true;
proxy_cache_bypass $http_upgrade;
proxy_pass http://nodenuxt;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
複製代碼
第三步、在nginx根目錄下打開命令窗口,
nginx -t
查看nginx的配置文件的目錄 第四步、若緹詩沒有問題,nginx -s reload
從新載入nginx(當配置信息發生修改時)
Nginx其餘命令:
start nginx
windows下的啓動命令nginx -s quit
中止ngixnginx -s reload
從新載入nginx(當配置信息發生修改時)nginx -h
查看幫助信息
完成以上配置,當你打開瀏覽器,輸入http://www.visney.cn/,(@ο@) 哇~,終於成功了 T_T
301重定向是網頁更改地址後對搜索引擎最友好的方法,配置visney.cn自動跳轉www.visney.cn,具體配置以下:
server {
listen 80;
server_name visney.cn;
return 301 http://www.visney.cn$request_uri;
}
複製代碼
可是當你關閉服務器上nuxt運行黑窗口時候,你的服務也斷了,心累(╯﹏╰),就算不關閉黑窗口,有時候運行也是會斷的,不要問我怎麼知道的說多了都是淚,這時候就須要PM2進行守護了
npm i pm2 -g
複製代碼
關於啓動nuxt項目這裏試了不少坑,網上看了好多啓動方式都沒有成功,最多的一種是pm2 start npm --name "xxx" -- run build
,在個人項目中也是沒有成功,
個人啓動方式是 pm2 start node_modules/nuxt/bin/nuxt-start --name xxx
,成功!!!!
這裏的xxx是項目名稱,即package.json中的name
pm2 list
pm2 show 0 #查看進程詳細信息,0爲PM2進程id
pm2 stop all #中止PM2列表中全部的進程
pm2 stop 0 #中止PM2列表中進程爲0的進程
pm2 reload all #重載PM2列表中全部的進程
pm2 reload 0 #重載PM2列表中進程爲0的進程
pm2 delete 0 #刪除PM2列表中進程爲0的進程
pm2 delete all #刪除PM2列表中全部的進程
複製代碼
** 至此,nuxt項目部署就完成了,長出一口氣,舒服! But,後來個人移動端的項目完成了,也須要Nginx配置,pm2守護,部署亮了會像上面那麼簡單嗎,請聽我細細道來:
移動端項目機票
項目打包與PC端一致,請參考PC端部署方法
第一步、移動端Nuxt項目監聽端口爲127.0.0.1:3001
第二步、這裏移動端訪問配置了二級域名http://m.visney.cn/,
第三步、在nginx中配置了移動端訪問和PC端訪問的判斷
upstream nodenuxtphone {
server 127.0.0.1:3001; # nuxt 項目監聽移動端端口
keepalive 64;
}
server {
listen 80;
server_name m.visney.cn; # 移動端代理爲二級域名
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Nginx-Proxy true;
proxy_cache_bypass $http_upgrade;
proxy_pass http://nodenuxtphone;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
複製代碼
** 所有配置以下 **
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream nodenuxt {
server 127.0.0.1:3000; # nuxt 項目監聽PC端端口
keepalive 64;
}
server {
listen 80;
server_name www.visney.cn;
location / {
if ($http_user_agent ~* (mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)) {
rewrite ^/(.*)$ http://m.visney.cn redirect;
#這裏隨意使用,這一行表明域名欄會跳轉到m.aaa.com
#監聽設備內核,移動端自動跳轉到http://m.visney.cn
}
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Nginx-Proxy true;
proxy_cache_bypass $http_upgrade;
proxy_pass http://nodenuxt;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name visney.cn;
return 301 http://www.visney.cn$request_uri;
}
upstream nodenuxtphone {
server 127.0.0.1:3001; # nuxt 項目監聽移動端端口
keepalive 64;
}
server {
listen 80;
server_name m.visney.cn; # 移動端代理爲二級域名
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Nginx-Proxy true;
proxy_cache_bypass $http_upgrade;
proxy_pass http://nodenuxtphone;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
複製代碼
真正坑在這裏,嘿嘿~~~
高高興興的pm2 start node_modules/nuxt/bin/nuxt-start --name xxx
(xxx爲移動端項目名稱)
手機訪問沒有效果,納尼,出了什麼問題!?彆着急,解決方法以下:
當同時使用pm2 start node_modules/nuxt/bin/nuxt-start --name xxx 守護兩個項目時候,兩個項目都是用了3000端口,而移動端的3001沒法反向代理,因此沒法訪問。 我試着在移動端的package.json中更改端口號,然而沒有用,T_T
因此,這時候我在PC端項目與移動端項目的根目錄下,分別單獨配置了啓動文件process.json,爲移動端配置端口 "port": "3001"
PC端設置process.json啓動
{
"apps": [
{
"name": "visney",
"cwd": "",
"script": "node_modules/nuxt/bin/nuxt-start",
"log_date_format": "YYYY-MM-DD HH:mm Z",
"error_file": "/var/log/node-app/node-app.stderr.log",
"out_file": "log/node-app.stdout.log",
"pid_file": "pids/node-geo-api.pid",
"instances": 3,
"min_uptime": "60s",
"max_restarts": 10,
"max_memory_restart": "300M",
"cron_restart": "1 0 * * *",
"watch": false,
"merge_logs": true,
"exec_interpreter": "node",
"exec_mode": "fork",
"autorestart": false,
"vizion": false
}
]
}
複製代碼
移動端設置process.json啓動
{
"apps": [
{
"name": "visneyphone",
"cwd": "",
"script": "node_modules/nuxt/bin/nuxt-start",
"log_date_format": "YYYY-MM-DD HH:mm Z",
"error_file": "/var/log/node-app/node-app.stderr.log",
"out_file": "log/node-app.stdout.log",
"pid_file": "pids/node-geo-api.pid",
"instances": 3,
"min_uptime": "60s",
"max_restarts": 10,
"max_memory_restart": "300M",
"cron_restart": "1 0 * * *",
"watch": false,
"port": "3001",
"merge_logs": true,
"exec_interpreter": "node",
"exec_mode": "fork",
"autorestart": false,
"vizion": false
}
]
}
複製代碼
PC端根目錄移動端根目錄下分別啓動 pm2 start process.json
OK,項目完成!!
###三、 pm2瀏覽器中使用可視化的窗口
pm2項目成功以後能夠在服務器的瀏覽器上可視化的視圖,能夠在網頁中監控,效果以下:
登陸地址
https://app.keymetrics.io
第一步:登陸註冊,我在這裏使用的是Github帳號登陸,以下:
第二步:鏈接本地項目
pm2 start process.json
,ok,如今能夠看到效果了,以下:
文章到這就要結束了。
若是你們以爲這個項目有點意思,歡迎 star。謝謝,O(∩_∩)O~