前端部署其實也算前端工程化的一部分,這篇博客是我結合實際工做經驗和業餘探索,總結出的前端部署的一些嘗試。一方面本身有所記錄,另外一方面也能給你們帶來些啓示。javascript
前提條件:css
npm run build / yarn run build
打包出的前端dist包,須要部署到公網環境供用戶訪問如果對上述一些名詞不理解,不用着急,一點一點來。html
dist包目錄結構以下:前端
|-- arya-spring-vue-fe
|-- favicon.ico
|-- index.html
|-- manifest.json
|-- precache-manifest.dc33a1b9e99c64c524c43168e7777109.js
|-- robots.txt
|-- service-worker.js
|-- css
| |-- app.8be73ceb.css
| |-- chunk-vendors.8aa8b174.css
| |-- login.8c104af7.css
| |-- user.2cc930ce.css
|-- fonts
| |-- ionicons.99ac3308.woff
| |-- ionicons.d535a25a.ttf
|-- img
| |-- arya-spring-vue-fe.8d6fbad1.png
| |-- ionicons.a2c4a261.svg
| |-- logo.82b9c7a5.png
| |-- icons
| |-- android-chrome-192x192.png
| |-- android-chrome-512x512.png
| |-- apple-touch-icon-120x120.png
| |-- apple-touch-icon-152x152.png
| |-- apple-touch-icon-180x180.png
| |-- apple-touch-icon-60x60.png
| |-- apple-touch-icon-76x76.png
| |-- apple-touch-icon.png
| |-- favicon-16x16.png
| |-- favicon-32x32.png
| |-- msapplication-icon-144x144.png
| |-- mstile-150x150.png
| |-- safari-pinned-tab.svg
|-- js
|-- about.b6757b1f.js
|-- about.b6757b1f.js.map
|-- app.15053451.js
|-- app.15053451.js.map
|-- chunk-vendors.acd76e03.js
|-- chunk-vendors.acd76e03.js.map
|-- login.e0db28e9.js
|-- login.e0db28e9.js.map
|-- user.4699a3d1.js
|-- user.4699a3d1.js.map
複製代碼
由於手上負責的項目dist包是存儲在七牛雲的,並且第一個接觸到的雲存儲也是七牛雲,因此天然而然想到了七牛雲OSS。vue
已具有條件:java
須要作的事:node
融合CDN->域名管理->建立域名foo.kaigege.cn
->源站配置裏選擇七牛雲存儲綁定bucket python
七牛雲域名管理並複製CNAME->騰訊雲域名管理->解析->添加記錄->記錄類型選擇CNAME,主機記錄填寫foo->記錄值填寫foo-kaigege-cn.qiniudns.com android
這一步就頗有趣了。 看一下咱們的dist目錄能夠發現,除了index.html這一級外,還有css,fonts,img,js4個目錄。 而七牛雲的bucket居然不支持建立目錄。webpack
惟一的辦法就是如何在空間下建立文件夾?
在空間中不能建立文件夾,可是爲了區分不一樣的文件,能夠這麼作: 文件名以 2017/1/12/1.img , 即建立這樣的虛擬目錄 2017/1/12/ 作區分。
雖然我手上的項目就是上傳七牛雲,是以前的老大寫了一個node腳本按照這種方式上傳的,可是當用過阿里雲OSS和騰訊雲OSS之後,我真心以爲七牛雲這個功能有待提升。代碼就不貼出了,七牛雲提供了各類SDK,python,nodejs等等部署腳本都能寫出。
考慮到後期項目部署的方便性,果斷放棄上傳前端文件到七牛雲的方案。
部署到阿里雲OSS和部署到騰訊雲OSS。 兩者都是對象存儲,bucket內都支持建立目錄,和七牛雲同樣都有CDN加速。
阿里雲OSS我實在是找不到收費標準,騰訊雲有一個1塊錢6個月都免費體驗權,所以我就以騰訊云爲例子來說解。
已具有條件:
須要作的事:
域名添加CNAME解析可參考七牛雲域名解析,是同樣的。
此時咱們訪問:foo.kaigege.cn/foo/index.html是不就能夠訪問到文件了呢?No。其它文件的請求路徑爲foo.kaigege.cn/js/app.js。缺失了foo目錄。該怎麼辦呢?
在vue.config.js配置webpack的publicPath爲"/foo"便可。
看一下index.html就知道了。
添加publicPath /foo前 | 添加publicPath /foo後 |
---|---|
<link href=/js/app.15053451.js> |
<link href=/foo/js/app.15053451.js> |
Ok,騰訊雲OSS部署前端文件完畢。
爲何會想到這樣部署?
因而開始折騰。
已具有條件:
須要作的事:
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
gzip on;
gzip_types text/plain application/javascript text/css;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
# 配置nginx訪問blog.kaigege.cn重定向到frankkai.github.io
server {
listen 80;
server_name blog.kaigege.cn;
location / {
proxy_pass https://frankkai.github.io;
}
}
# 配置nginx訪問foo.kaigege.cn加載前端靜態文件。
server {
listen 80;
server_name foo.kaigege.cn;
location / {
root /usr/share/nginx/foo;
index index.html;
}
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
複製代碼
對nginx以及nginx 反向代理不熟的話,能夠看nginx入門或前端必會的 Nginx入門視頻教程(共11集)補充一下。這裏就再也不贅述了。
這個坑是比較多的,須要作如下幾件事。
須要選擇SFTP協議,經過22端口登陸
上傳到哪裏呢?回看一下nginx的配置。 會發現dist目錄下的文件,右鍵上傳到/usr/share/nginx/foo便可。
上面的事情作完了,咱們獲得的結果是怎樣呢?
ok,部署到騰訊雲服務器並使用nginx作反向代理完畢。
備註:nginx的反向代理配置中,統一監聽了80端口,一樣也須要在服務器實例安全組配置中放開。