国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

API Blueprint Docker

dreamGong / 571人閱讀

摘要:之前雖然了解各種概念,但是自己搗鼓后,才算是真正的理解。只能把文檔渲染成,但是不包括,所以需要配合。這里是啟動(dòng)腳本,看最后一行,定義了默認(rèn)啟動(dòng)腳本。這個(gè)腳本負(fù)責(zé)監(jiān)聽,啟動(dòng)部署。如何使用這個(gè)項(xiàng)目已經(jīng)放到了和上。

API Blueprint

上次介紹的 API Blueprint 解決方案 雖然不錯(cuò),但是有一些問(wèn)題:

部署麻煩,需要裝不少東西

文檔更新后不支持自動(dòng)部署

沒(méi)有權(quán)限控制

以至于我們團(tuán)隊(duì)最后沒(méi)有用這個(gè)方案,所以我想了下解決方案。

通過(guò) Docker 鏡像,解決部署問(wèn)題

通過(guò) Docker 鏡像中的腳本,配合 Github Webhook 來(lái)實(shí)現(xiàn)自動(dòng)化部署

還未實(shí)現(xiàn)

正好順便學(xué)習(xí)一下 Docker,Docker 的書看過(guò)幾本了,之前同事也做過(guò)分享,但還是那句話:實(shí)踐出真知。

之前雖然了解各種概念,但是自己搗鼓后,才算是真正的理解。

?

實(shí)現(xiàn)方案 Dockerfile

Dockerfile 非常簡(jiǎn)單,直接貼出來(lái)就行了:

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

這里主要依賴了nodejsnginx

aglio只能把文檔渲染成html,但是不包括 server,所以需要配合nginx

drakov自己會(huì)啟動(dòng)一個(gè) server。

然后這里最關(guān)鍵的就是3個(gè)腳本了,繼續(xù)詳解一下這三個(gè)腳本。

?

startup.sh

這里是啟動(dòng)腳本,看Dockerfile最后一行,定義了默認(rèn)啟動(dòng)腳本。

nginx
nohup drakov -f "/opt/api-blueprint/*.apib" --public > /dev/null &
node /usr/local/bin/webhook.js

三行命令對(duì)應(yīng)3個(gè)服務(wù)。

?

deploy.sh

這個(gè)腳本負(fù)責(zé)拉取新的文檔,并調(diào)用aglio渲染成html,然后復(fù)制到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

這個(gè)腳本負(fù)責(zé)監(jiān)聽 webhook,啟動(dòng)部署。

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);

收到請(qǐng)求就重新調(diào)用一下deploy.sh

Github 上可以這么設(shè)置:

如果你在內(nèi)網(wǎng),不方便暴露到公網(wǎng),可以忽略這個(gè)功能,腳本內(nèi)部也是自動(dòng)刷新,5分鐘一次。

?

如何使用?

這個(gè)項(xiàng)目已經(jīng)放到了 Github 和 Docker Hub 上。

源代碼:https://github.com/dozer47528/api-bluepr...

Docker 鏡像:https://hub.docker.com/r/dozer47528/api-...

使用起來(lái)非常簡(jiǎn)單:

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替換成你們自己的地址即可。

內(nèi)部端口需要映射一下:

80: 文檔

8080: webhook

3000: Mock 服務(wù)器

?

如何支持私有倉(cāng)庫(kù)?

首先在宿主機(jī)上配置完ssh,然后在啟動(dòng)的時(shí)候隱射一下文件-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的啟動(dòng)參數(shù)?

啟動(dòng)的時(shí)候加上這個(gè)參數(shù):-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...

?

文檔怎么寫?

自己的文檔怎么寫?首先,我這邊只會(huì)轉(zhuǎn)換apib結(jié)尾的文檔,這是 API Blueprint 的標(biāo)準(zhǔn)后綴名。

然后你也可以在里面直接扔html文件。

所有文檔文件夾隨便放,我會(huì)遞歸所有文件。

最后建議放一個(gè)index.html,自己做一個(gè)導(dǎo)航,這樣自己用起來(lái)方便一點(diǎn)。

我這邊有一個(gè)例子:

https://github.com/dozer47528/api-bluepr...

?

下一步是什么?

還有一些不完善的地方需要改進(jìn):

支持私有倉(cāng)庫(kù),例如 Bitbucket(已完成)

支持自定義aglio樣式,我現(xiàn)在在腳本里寫死了一個(gè)我自己比較喜歡的樣式,最好可以在docker run的時(shí)候把樣式傳進(jìn)去(已完成)

有些服務(wù)部署在內(nèi)網(wǎng),不方便設(shè)置 webhook,要支持自動(dòng)刷新數(shù)據(jù)(已完成)

?

源地址:http://www.dozer.cc/2016/03/api-blueprin...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/26539.html

相關(guān)文章

  • 使用Api-blueprint文檔創(chuàng)建mock server

    摘要:是一套描述標(biāo)準(zhǔn),和一樣,屬于一種標(biāo)記語(yǔ)言,可以把標(biāo)記文稿轉(zhuǎn)換成漂亮的接口文檔。還可以創(chuàng)建,進(jìn)行本地調(diào)試。一語(yǔ)法只要用寫過(guò)東西基本很快就能掌握語(yǔ)法。參考文檔使用編寫文檔用生成優(yōu)雅的文檔指導(dǎo)手冊(cè)用生成優(yōu)雅的文檔 前后端配合開發(fā)的時(shí)候,常常會(huì)有這樣一種需求:你接口定義好了嗎?能不能先幫我起一個(gè) Mock Server 先跑起來(lái)?那么,如何才能避免前后端開發(fā)在時(shí)間差上的無(wú)謂等待呢?api-bl...

    ningwang 評(píng)論0 收藏0
  • Vert.x Blueprint 系列教程(一) | 待辦事項(xiàng)服務(wù)開發(fā)教程

    摘要:本文章是藍(lán)圖系列的第一篇教程。是事件驅(qū)動(dòng)的,同時(shí)也是非阻塞的。是一組負(fù)責(zé)分發(fā)和處理事件的線程。注意,我們絕對(duì)不能去阻塞線程,否則事件的處理過(guò)程會(huì)被阻塞,我們的應(yīng)用就失去了響應(yīng)能力。每個(gè)負(fù)責(zé)處理請(qǐng)求并且寫入回應(yīng)結(jié)果。 本文章是 Vert.x 藍(lán)圖系列 的第一篇教程。全系列: Vert.x Blueprint 系列教程(一) | 待辦事項(xiàng)服務(wù)開發(fā)教程 Vert.x Blueprint 系...

    frank_fun 評(píng)論0 收藏0
  • 試探API Blueprint接口文檔生成和接口模擬

    前言 今天發(fā)現(xiàn)了一個(gè)很niubility的東西__API Blueprint__,先給出官網(wǎng)https://apiblueprint.org/。下面是官網(wǎng)給出的介紹: API Blueprint. A powerful high-level API description language for web APIs. 這個(gè)可以干什么呢?按照API Blueprint的語(yǔ)法(類似markdown),...

    mist14 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<