摘要:之前雖然了解各種概念,但是自己搗鼓后,才算是真正的理解。只能把文檔渲染成,但是不包括,所以需要配合。這里是啟動腳本,看最后一行,定義了默認啟動腳本。這個腳本負責監聽,啟動部署。如何使用這個項目已經放到了和上。
API Blueprint
上次介紹的 API Blueprint 解決方案 雖然不錯,但是有一些問題:
部署麻煩,需要裝不少東西
文檔更新后不支持自動部署
沒有權限控制
以至于我們團隊最后沒有用這個方案,所以我想了下解決方案。
通過 Docker 鏡像,解決部署問題
通過 Docker 鏡像中的腳本,配合 Github Webhook 來實現自動化部署
還未實現
正好順便學習一下 Docker,Docker 的書看過幾本了,之前同事也做過分享,但還是那句話:實踐出真知。
之前雖然了解各種概念,但是自己搗鼓后,才算是真正的理解。
?
實現方案 DockerfileDockerfile 非常簡單,直接貼出來就行了:
FROM centos RUN yum install -y epel-release && yum update -y && yum install -y node npm make nginx git RUN npm install -g aglio drakov COPY scripts/startup.sh /usr/local/bin/ COPY scripts/deploy.sh /usr/local/bin/ COPY scripts/webhook.js /usr/local/bin/ RUN chmod -R 755 /usr/local/bin/* CMD /usr/local/bin/deploy.sh && /usr/local/bin/startup.sh
這里主要依賴了nodejs和nginx。
aglio只能把文檔渲染成html,但是不包括 server,所以需要配合nginx。
而drakov自己會啟動一個 server。
然后這里最關鍵的就是3個腳本了,繼續詳解一下這三個腳本。
?
startup.sh這里是啟動腳本,看Dockerfile最后一行,定義了默認啟動腳本。
nginx nohup drakov -f "/opt/api-blueprint/*.apib" --public > /dev/null & node /usr/local/bin/webhook.js
三行命令對應3個服務。
?
deploy.sh這個腳本負責拉取新的文檔,并調用aglio渲染成html,然后復制到nginx根目錄。
if [ -d /opt/api-blueprint ] then cd /opt/api-blueprint git checkout -f git clean -f git pull else git clone $repository /opt/api-blueprint cd /opt/api-blueprint fi find . -name "*.apib" | sed "s/.apib//" | xargs -i -t aglio -i {}.apib --theme-template triple -o {}.html rm -rf /usr/share/nginx/html/* cp -R * /usr/share/nginx/html/
?
webhook.js這個腳本負責監聽 webhook,啟動部署。
var http = require("http"); var exec = require("child_process").exec; var cmdStr = "bash -c /usr/local/bin/deploy.sh"; setInterval(function() { console.log("Start auto reload.") exec(cmdStr, function(err, stdout, stderr) { if (err) { console.error(err); } else { console.log("Update success!"); console.log(stdout); } }); }, 5 * 60 * 1000); http.createServer(function(req, res) { console.log("Start webhook reload.") exec(cmdStr, function(err, stdout, stderr) { if (err) { console.error(err); } else { console.log("Update success!"); console.log(stdout); } }); res.writeHead(200, { "Content-Type": "text/plain" }); res.end(""); }).listen(8080);
收到請求就重新調用一下deploy.sh。
Github 上可以這么設置:
如果你在內網,不方便暴露到公網,可以忽略這個功能,腳本內部也是自動刷新,5分鐘一次。
?
如何使用?這個項目已經放到了 Github 和 Docker Hub 上。
源代碼:https://github.com/dozer47528/api-bluepr...
Docker 鏡像:https://hub.docker.com/r/dozer47528/api-...
使用起來非常簡單:
docker run --name test -e "repository=https://github.com/dozer47528/api-blueprint-test.git" -p 80:80 -p 8080:8080 -p 3000:3000 -d dozer47528/api-blueprint-docker
把其中的repository替換成你們自己的地址即可。
內部端口需要映射一下:
80: 文檔
8080: webhook
3000: Mock 服務器
?
如何支持私有倉庫?首先在宿主機上配置完ssh,然后在啟動的時候隱射一下文件-v ~/.ssh:/root/.ssh。
完整的命令類似于這樣:
docker run --name test -v ~/.ssh:/root/.ssh -e "repository=https://github.com/dozer47528/api-blueprint-test.git" -p 80:80 -p 8080:8080 -p 3000:3000 -d dozer47528/api-blueprint-docker
?
如何修改aglio的啟動參數?啟動的時候加上這個參數:-e "aglio=--theme-template triple"
完整的命令類似于這樣:
docker run --name test -e "aglio=--theme-template triple" -e "repository=https://github.com/dozer47528/api-blueprint-test.git" -p 80:80 -p 8080:8080 -p 3000:3000 -d dozer47528/api-blueprint-docker
aglio的文章文檔在這邊:[https://github.com/danielgtaylor/aglio#e...
?
文檔怎么寫?自己的文檔怎么寫?首先,我這邊只會轉換apib結尾的文檔,這是 API Blueprint 的標準后綴名。
然后你也可以在里面直接扔html文件。
所有文檔文件夾隨便放,我會遞歸所有文件。
最后建議放一個index.html,自己做一個導航,這樣自己用起來方便一點。
我這邊有一個例子:
https://github.com/dozer47528/api-bluepr...
?
下一步是什么?還有一些不完善的地方需要改進:
支持私有倉庫,例如 Bitbucket(已完成)
支持自定義aglio樣式,我現在在腳本里寫死了一個我自己比較喜歡的樣式,最好可以在docker run的時候把樣式傳進去(已完成)
有些服務部署在內網,不方便設置 webhook,要支持自動刷新數據(已完成)
?
源地址:http://www.dozer.cc/2016/03/api-blueprin...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26539.html
摘要:是一套描述標準,和一樣,屬于一種標記語言,可以把標記文稿轉換成漂亮的接口文檔。還可以創建,進行本地調試。一語法只要用寫過東西基本很快就能掌握語法。參考文檔使用編寫文檔用生成優雅的文檔指導手冊用生成優雅的文檔 前后端配合開發的時候,常常會有這樣一種需求:你接口定義好了嗎?能不能先幫我起一個 Mock Server 先跑起來?那么,如何才能避免前后端開發在時間差上的無謂等待呢?api-bl...
摘要:本文章是藍圖系列的第一篇教程。是事件驅動的,同時也是非阻塞的。是一組負責分發和處理事件的線程。注意,我們絕對不能去阻塞線程,否則事件的處理過程會被阻塞,我們的應用就失去了響應能力。每個負責處理請求并且寫入回應結果。 本文章是 Vert.x 藍圖系列 的第一篇教程。全系列: Vert.x Blueprint 系列教程(一) | 待辦事項服務開發教程 Vert.x Blueprint 系...
前言 今天發現了一個很niubility的東西__API Blueprint__,先給出官網https://apiblueprint.org/。下面是官網給出的介紹: API Blueprint. A powerful high-level API description language for web APIs. 這個可以干什么呢?按照API Blueprint的語法(類似markdown),...
閱讀 786·2021-08-23 09:46
閱讀 928·2019-08-30 15:44
閱讀 2586·2019-08-30 13:53
閱讀 3039·2019-08-29 12:48
閱讀 3847·2019-08-26 13:46
閱讀 1780·2019-08-26 13:36
閱讀 3510·2019-08-26 11:46
閱讀 1408·2019-08-26 10:48