教你使用如何docker部署淘寶rap2服務(wù)
什么是rap2
先來(lái)說(shuō)說(shuō)起因,在上一個(gè)星期的分享會(huì)上,談到前后端聯(lián)調(diào)上,有同事提到了rap2
,特意去了解了一下,覺(jué)得使用這個(gè)東西來(lái)進(jìn)行前后端的接口聯(lián)調(diào)來(lái)真是太方便了,對(duì)比我們之前公司內(nèi)部開發(fā)的API Cloud
來(lái)說(shuō),我更偏向使用rap2
。
RAP通過(guò)GUI工具幫助WEB工程師更高效的管理接口文檔,同時(shí)通過(guò)分析接口結(jié)構(gòu)自動(dòng)生成Mock數(shù)據(jù)、校驗(yàn)真實(shí)接口的正確性,使接口文檔成為開發(fā)流程中的強(qiáng)依賴。有了結(jié)構(gòu)化的API數(shù)據(jù),RAP可以做的更多,而我們可以避免更多重復(fù)勞動(dòng)。
上面是摘自https://github.com/thx/RAP淘寶阿里媽媽對(duì)rap1
的描述,看了圖一下子就能明白,后端制定API
返回?cái)?shù)據(jù)格式,前端通過(guò)接口地址在線mock,避免了前后端因?yàn)檫M(jìn)度不一致而出現(xiàn)單方面等待的現(xiàn)象。
使用rap2
可以直接使用淘寶提供的在線服務(wù)來(lái)生成在線的接口地址,通過(guò)申請(qǐng)一個(gè)賬號(hào)后,即可在里面進(jìn)行接口的編寫、測(cè)試等等...這里不再贅述。
部署自己的rap2服務(wù)
因?yàn)閞ap2在github上面已經(jīng)開源,而且也提供了部署方案,這里講一下自己是如何使用docker
來(lái)進(jìn)行部署的。
前提
- 安裝docker
- 安裝docker-compose
涉及到的兩個(gè)開源倉(cāng)庫(kù):
rap2-delos: 后端數(shù)據(jù)API服務(wù)器,基于Koa + MySQL 戳這里
rap2-dolores: 前端靜態(tài)資源,基于React 戳這里
或者使用本人的github倉(cāng)庫(kù) Rynxiao/rap2-docker,已經(jīng)包含了這兩個(gè)倉(cāng)庫(kù),并加入了配置。
后端部署
在后端部署方面,在github
上已經(jīng)給出了使用docker
的部署方面,因此,just follow就好。
> mkdir rap2 > cd rap2 > git clone https://github.com/thx/rap2-delos.git > cd rap2-delos > docker-compose up -d
運(yùn)行成功后,需要手動(dòng)初始化數(shù)據(jù)庫(kù),我們進(jìn)入對(duì)象的容器來(lái)操作:
> docker exec -it rap2-delos sh > node scripts/init > exit
重新啟動(dòng)服務(wù):
> docker-compose down > docker-compose up -d
可以看到暴露出來(lái)的端口是38080
,我們使用curl
命令來(lái)測(cè)試一下是否成功,如果放回Hello RAP!
,就說(shuō)明后端已經(jīng)部署好了。
> curl localhost:38080
前端部署
前端由于沒(méi)有提供對(duì)應(yīng)的docker
部署方法,因此只有我自己來(lái)嘗試部署了。前端使用的是node進(jìn)行webpack打包,因此需要一個(gè)node的環(huán)境,所以我在制作容器的時(shí)候需要拉去一個(gè)node鏡像。
因?yàn)椴渴鹎岸酥皼](méi)有看后端的部署,所以我前端拉取了一個(gè)比較新的版本[10.1.0],如果想和后端公用一個(gè)node鏡像,可以使用這個(gè)node:8.11.1-alpine
鏡像。
通過(guò)npm run build
之后,生成的build
文件夾中的只是靜態(tài)資源文件,因此我還需要起一個(gè)服務(wù)器,這里我通過(guò)全局安裝http-server
來(lái)啟動(dòng)一個(gè)服務(wù)。
下面是具體的過(guò)程:
1. git倉(cāng)庫(kù)拉取
> cd rap2 > git clone https://github.com/thx/rap2-dolores.git > cd rap2-dolores
2. 創(chuàng)建一個(gè)Dockerfile來(lái)構(gòu)建一個(gè)新的node版本鏡像
> touch Dockerfile > vim Dockerfile
Dockerfile中的內(nèi)容為:
# 拉取10.1.0版本的node鏡像 FROM node:10.1.0 # 維護(hù)人 MAINTAINER ryn # 創(chuàng)建工作目錄 RUN mkdir -p /home/rap2-dolores WORKDIR /home/rap2-dolores # 將代碼拷貝至工作目錄 COPY . /home/rap2-dolores # 全局安裝http-server服務(wù)器 RUN npm install -g http-server # 全局安裝node-sass(一定要帶--unsafe-perm,否則會(huì)報(bào)錯(cuò)) RUN npm install --unsafe-perm -g node-sass # 安裝依賴 RUN npm install # 打包 RUN npm run build
3. 使用docker-compose來(lái)啟動(dòng)服務(wù)
> touch docker-compose.yml > vim docker-compose.yml
docker-compose.yml中的內(nèi)容為:
version: '2.2' services: delores: # 容器名稱 container_name: rap2-dolores # 通過(guò)Dockerfile來(lái)構(gòu)建本地鏡像 build: . # 通過(guò)images來(lái)構(gòu)建,這里的地址暫不適用,因?yàn)閟rc/config中的配置需要根據(jù)自己的服務(wù)器來(lái)動(dòng)態(tài)構(gòu)建 # image rynxiao/rap2-dolores-nodejs # 指定工作目錄 working_dir: /home/rap2-dolores # 指定生產(chǎn)環(huán)境 environment: - NODE_ENV=production # 啟動(dòng)http-server,并映射端口到容器內(nèi)部8081上 command: /bin/sh -c 'http-server ./build -s -p 8081' privileged: true # expose port 38081 ports: - "38081:8081"
更改src/config/config.prod.js
中的配置,將接口請(qǐng)求地址指向你的后端服務(wù)器,以下是我的配置,各位按需更改。
module.exports = { serve: 'http://xxx.xxx.xxx.xx:38080', keys: ['some secret hurr'], session: { key: 'koa:sess' } }
注意上面的xxx.xxx.xxx.xxx
是你公網(wǎng)的ip地址,如果你通過(guò)端口映射做了二級(jí)域名的配置,也可以去掉端口號(hào),直接寫你的二級(jí)域名就可以了,比如你的二級(jí)域名為:http://rap2.xxx.com
,那么serve
就可以配置為http://rap2.xxx.com
。
啟動(dòng)服務(wù)
> docker-compose up -d
這一步會(huì)執(zhí)行鏡像的構(gòu)建,使用docker ps
可以查看最新的構(gòu)建鏡像,使用docker-compose ps
可以查看運(yùn)行的容器
至此,我們就可以使用http://{youdomain}:38081
來(lái)訪問(wèn)rap2了。
nginx做二級(jí)域名轉(zhuǎn)換
你可能希望上使用http://rap2.{youdomain}.com
來(lái)訪問(wèn)剛剛我們創(chuàng)建的rap2服務(wù),這里我使用nginx做地址轉(zhuǎn)換,步驟如下:
在騰訊云/萬(wàn)網(wǎng)中加一條A類記錄
我使用的是騰訊云,阿里云的添加方法也大致類似,這里請(qǐng)大家自行谷歌。
在nginx中增加一個(gè)server配置
> cd /usr/local/nginx-1.13.9/conf > mkdir sites-enabled > cd sites-enabled > vim rap2.{youdomain}.com.conf
rap2.{youdomain}.com.conf中的內(nèi)容如下:
server { listen 80; server_name rap2.{youdomain}.cn; access_log logs/rap2-site.log; location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-Ip $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://127.0.0.1:38081/; } }
其實(shí)就是做了一個(gè)端口轉(zhuǎn)換。接下來(lái)在nginx.conf中進(jìn)行引入
# nginx.conf http模塊 include /usr/local/nginx-1.13.9/conf/sites-enabled/*.conf; # 重啟nginx nginx -s reload
然后我們就可以使用rap2.{youdomain}.com
來(lái)訪問(wèn)rap2服務(wù)了
注:{youdomain}替換為自己的域名
小結(jié)
算是對(duì)之前學(xué)習(xí)的docker進(jìn)行練手,通過(guò)實(shí)踐還是學(xué)到了一些自己不太熟悉的領(lǐng)域的一些知識(shí),記錄共勉之。也希望大家多多支持腳本之家。
相關(guān)文章
Docker容器實(shí)戰(zhàn)之鏡像與容器的工作原理
這篇文章主要介紹了Docker容器實(shí)戰(zhàn)之鏡像與容器,關(guān)于鏡像與容器的工作原理,下面文章將詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05docker-compose安裝db2數(shù)據(jù)庫(kù)操作
這篇文章主要介紹了docker-compose安裝db2數(shù)據(jù)庫(kù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12教你使用Jenkins集成Harbor自動(dòng)發(fā)布鏡像
這篇文章主要介紹了Jenkins?集成?Harbor?自動(dòng)發(fā)布鏡像,主要包括Jenkins?腳本式發(fā)布鏡像及Jenkins?插件式發(fā)布鏡像的詳細(xì)過(guò)程,本文結(jié)合圖文實(shí)例給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04docker環(huán)境下數(shù)據(jù)庫(kù)的備份(postgresql, mysql) 實(shí)例代碼
這篇文章主要介紹了docker環(huán)境下數(shù)據(jù)庫(kù)的備份(postgresql, mysql) ,需要的朋友可以參考下2019-05-05Docker安裝OpenWrt的實(shí)現(xiàn)步驟
OpenWrt是一種可以運(yùn)行在路由器上的嵌入式操作系統(tǒng),提供了許多網(wǎng)絡(luò)服務(wù)和功能,本文主要介紹了Docker安裝OpenWrt的實(shí)現(xiàn)步驟,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08Docker 實(shí)現(xiàn)容器端口綁定本地端口
這篇文章主要介紹了Docker 實(shí)現(xiàn)容器端口綁定本地端口的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03