摘要:每家公司在前端項目發布體系可能不盡相同,本篇文章僅僅介紹袋鼠云的前端發布體系,希望能對大家能有所啟發。目前袋鼠云采用的是前后端分離的方式,但是開發中還是比較依賴后端的,接口數據還不是很完善。
前言
在目前的大趨勢下,前端和后端解耦已經是一個業界的趨勢。前端和后端一旦解耦之后,前端的項目和后端的項目便可以自己發布,互不影響。這樣極大地提高工作效率,免去了很多互相等待的時間。每家公司在前端項目發布體系可能不盡相同,本篇文章僅僅介紹袋鼠云的前端發布體系,希望能對大家能有所啟發。
項目地址: https://github.com/ruichengpi...
實現原理首先說一下整個前端這邊的運行流程,一般瀏覽器請求我們大致分為兩條線資源請求和接口請求。下面我們以這兩個線說一下整個流程:
1. 資源請求: 這邊我們Nginx服務器跟我們前端打包出來資源都是放在同一臺機器上。Nginx設置一下我們靜態資源的目錄,瀏覽器的資源請求都會從這個靜態資源目錄中獲取,我們本地往遠程機器推送前端資源也是在這個目錄下。
2. 接口請求: 瀏覽器的所有接口請求都會被我們遠程機器上的Nginx攔截,然后路徑規則匹配代理相應的接口服務上。
準備工作 安裝nginx這邊以Centos為例為例:
yum install nginx
這里有個需要注意的是,我們要盡量保證nginx全局命令是可用,有不少公司nginx命令不是全局的,如何在對應的roo.config.js中做一下設置,后面我們會講到。設置好相應的目錄
這里我們需要設定一下三個目錄:
前端資源存放目錄 例如:/root/app
前端項目nginx配置存放目錄 例如:/root/nginx
前端資源備份目錄 例如:/root/backup
配置nginx文件設置一下nginx配置文件,一般來說是/etc/nginx/nginx.conf。當然根據每個公司不同情況找到對應的配置文件
... http{ include /root/nginx/*.conf; } ...
include /root/nginx/*.conf;
這句話表示/root/nginx下所有以.conf結尾的文件都會被加載進來,而/root/nginx是我們所設定的nginx配置文件存放目錄。啟動Nginx
nginx -c /etc/nginx/nginx.conf //啟動nginx,并確定前面配置是否正確
上面命令僅作參考,具體根據情況來定。
我們訪問資源的時候有些人會遇到nginx拋出403 Forbidden的情況,這是是因為我們nginx配置文件最上面的user設置的用戶權限不夠,可以改成user root來解決。
支持功能以下四個功能均支持-c或者--config指定配置文件.如果未指定配置文件,則默認在項目根目錄下去roo.config.js作為配置文件。roo backup
該命令用于備份我們的前端資源包,這樣有利于我們做版本的管理。當線上出現重大問題的時候,可以及時拿過來做版本回滾。
執行roo backup命令,如果設置了NODE_ENV=production則會在遠程機器上的backupDirectory里生成一個“production_YYYYMMDD”的前端資源包,若未設置則生成一個
“test_YYYYMMDD”的前端資源包,其中YYYYMMDD為當天的年月日,當天上傳多次也只會生成一個包,后續上傳的將會覆蓋之前上傳的前端資源。
以下為必須配置項:
roo.config.js
module.exports={ local:{ resourceDirectory:"<本地前端資源所在目錄,該目錄下的內容將會全部上傳>" }, origin:{ host:"<遠程機器IP>", username: "<遠程機器用戶名>", password: "<遠程機器密碼>", backupDirectory:"<遠程機器備份前端資源的目錄>" } }roo nginx
該命令用于生成項目對應的nginx配置文件,并更新線上的nginx配置文件。執行roo nginx文件之后,會在roo.config.js中指定的local.nginxConfigFilePath生成對應的nginx配置文件,并更新遠程機器上的roo.config.js中指定的origin.nginxConfigFilePath的nginx配置文件,然后執行nginx的reload操作。
以下為必須配置項:
roo.config.js
module.exports={ local:{ nginxConfigTemplate:"" nginxConfigFilePath:" " }, origin:{ host:"<遠程機器IP>", username: "<遠程機器用戶名>", password: "<遠程機器密碼>", nginxConfigFilePath:"<遠程機器上該項目的nginx配置文件的路徑,此文件將會被nginx主文件include>" }, //nginxConfig里的參數將用于生成本項目的nginx配置文件 nginxConfig:{ port:"<開放端口>", serverName:"<服務名稱>", publicPath:"<靜態資源目錄>", //locations將對于nginx里面的location locations:[ { path:"<匹配路徑>", //對應location中的配置項 configs:[ { key:"proxy_redirect", value:"off" }, { key:"proxy_set_header", value:"Host $host" }, { key:"proxy_pass", value:"代理路徑" }, ] } ] } }
默認nginx配置文件模板
server { listen {{port}}; server_name {{serverName}}; location / { root {{publicPath}}; try_files $uri /index.html; location ~ .*.(ico|js|css|gif|jpg|jpeg|png|bmp|swf)$ {} } {{#each locations}} location {{this.path}} { {{#each this.configs}} {{this.key}} {{this.value}}; {{/each}} } {{/each}} }roo port
該命令用于檢查遠程機器的端口占用情況。
-p 或者 --port | 會檢測該端口是否占用,若占用會顯示相關使用情況
roo port // 會拉取遠程機器上所有已占用的端口情況 roo port -p 8000 //檢測8000端口是否占用,若占用顯示被使用情況
以下為必須配置項:
roo.config.js
module.exports={ origin:{ host:"<遠程機器IP>", username: "<遠程機器用戶名>", password: "<遠程機器密碼>" } }roo publish
該命令將roo.config.js文件中local.resourceDirectory指定的前端資源目錄內的資源上傳到origin.resourceDirectory目錄下。origin.resourceDirectory指定的目錄也會跟nginxConfig.publicPath指定的目錄相對應。
以下為必須配置項:
roo.config.js
module.exports={ local:{ resourceDirectory:"<本地前端資源所在目錄,該目錄下的內容將會全部上傳>" } origin:{ host:"<遠程機器IP>", username: "<遠程機器用戶名>", password: "<遠程機器密碼>", resourceDirectory:"<遠程機器存在前端資源的目錄,上傳的前端資源將會存在這里>", nginxConfigFilePath:"<遠程機器上該項目的nginx配置文件的路徑,此文件將會被nginx主文件include>" } }roo.config.js配置參數說明
module.exports={ local:{ resourceDirectory:"<本地前端資源所在目錄,該目錄下的內容將會全部上傳>", nginxConfigFilePath:"展望 roo create" }, origin:{ host:"<遠程機器IP>", username: "<遠程機器用戶名>", password: "<遠程機器密碼>", resourceDirectory:"<遠程機器存在前端資源的目錄,上傳的前端資源將會存在這里>", backupDirectory:"<遠程機器備份前端資源的目錄>" nginxConfigFilePath:"<遠程機器上該項目的nginx配置文件的路徑,此文件將會被nginx主文件include>" }, //nginxConfig里的參數將用于生成本項目的nginx配置文件 nginxConfig:{ port:"<開放端口>", serverName:"<服務名稱>", publicPath:"<靜態資源目錄>", //locations將對于nginx里面的location locations:[ { path:"<匹配路徑>", //對應location中的配置項 configs:[ { key:"proxy_redirect", value:"off" }, { key:"proxy_set_header", value:"Host $host" }, { key:"proxy_pass", value:"代理路徑" }, ] } ] } }
目前袋鼠云這邊的項目構建工具采用的是Yeoman的構建體系,可以滿足袋鼠云這邊對項目構建的需求。但是有點小小不足的地方,就是每次項目模板更新之后都要重新發布Yeoman的腳手架,靈活性相對較差。后面打算把項目的生成的工作交給dtux-kangaroo,并且所有項目模板均放在github上,每次生成項目都會從github重新拉,模板貢獻者只需要關注自己的github倉庫即可,只要將更新合并到master分支上,后續項目生成均會提到更新。當然在現有的Yeoman的腳手架改造也可以實現同樣的功能,但是本著工具精簡的原則,會將現有的Yeoman的腳手架遷到dtux-kangaroo并進行改造。
roo mock目前袋鼠云采用的是前后端分離的方式,但是開發中還是比較依賴后端的,接口數據mock還不是很完善。后面計劃加入roo mock來解決數據mock問題,初步想法是借助后端的swagger來實現接口數據mock。
在dtux-kangaroo上基礎做一個前端資源發布平臺dtux-kangaroo已經驗證了這套發布體系的可行性,也解決了如何與遠程機器的交互的問題。為前端資源發布平臺的搭建打下很好的基礎。后面計劃搭建這個前端資源發布平臺,提高前端資源發布的效率,減少對運維的依賴。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108037.html
摘要:接下來我們以余額寶為例,重點剖析天弘基金在日志數據分析領域是如何突破的此前,天弘基金一直使用開源的日志方案,研發和運維人員通過對日志數據進行處理,使用日志文件進行查詢檢索。 雙十一剛剛結束,其實最緊張的不是商鋪理貨,也不是網友緊盯大促商品準備秒殺,而是網購幕后的運維人員,他們最擔心:什么網絡中斷、應用卡頓、響應速度慢,服務器宕機……雙十一作為電商 IT 部門的頭等大事,大促前,運維人員就需要...
閱讀 2060·2023-04-25 21:11
閱讀 2962·2021-09-30 09:47
閱讀 2270·2021-09-24 09:48
閱讀 4426·2021-08-23 09:43
閱讀 894·2019-08-30 15:54
閱讀 558·2019-08-28 18:01
閱讀 1396·2019-08-27 10:55
閱讀 587·2019-08-27 10:55