摘要:三部署架構說明這個方案僅適用于小公司敏捷項目團隊聯調測試環境的部署,同時也可以作為學習入門的,并不適用于有一定規模的生產環境。另外,建議把測試域名泛解析到部署這臺服務的機器。模塊配置部署腳本業務模塊的配置基本是通過部署腳本來操作的。
一、背景項目地址: https://github.com/xiongwilee...
基本特性:快捷部署多人nginx+php的開發測試環境,也可以擴展構建其他語言;
基于Docker和docker-compose,不依賴K8S等高級編排工具,成本低廉、部署簡單;
Docker內置集成jenkins,一鍵添加開發測試角色,無需額外配置;
支持微服務架構,適用于小公司or敏捷項目團隊,也可以作為Docker學習入門的case;
在角色分工明確的團隊里,什么樣的條件才算是最優雅的聯調和測試環境?在大廠里肯定都有很多高級的解決方案,比如這些:
docker搭建大規模測試環境的實踐 / 測試開發之路--k8s 下的大規模持續集成與環境治理
DevOps落地實踐:BAT系列:CICD:iPipe vs CCI
阿里 DevOps 轉型實踐
大型團隊的合作框架下,必須依賴更復雜的DevOps架構(參考:DevOps詳解)。但對于成員不多、負責的Web項目工程量也不大的團隊,面臨的問題肯定也更單純:
前后端角色工程解耦,開發環境分離;
工程師只關注業務邏輯本身,持續集成;
環境和角色一鍵創建、一鍵更新、一鍵銷毀,環境之間不受影響;
即便是只有這些需求,在以往的“開發機”的聯調環境里,一旦需要添加開發或者測試人員,或者需要更新nginx的配置,再或者需要更新PHP、Nodejs的版本……對于測試環境的維護來說都是很痛苦的。
二、快速開始注意: 當前部署方案僅依賴:Docker,Docker-compose,git
1、下載代碼$ git clone https://github.com/xiongwilee/docker-compose-boilerplate.git2、添加測試角色demo
$ cd docker-compose $ sh build.sh -u demo -m admin:master
此時,在app/會創建demo目錄,在nginx/conf.d會創建demo.conf文件。
3、啟動服務$ docker-compose up -d
此時,再執行docker-compose ps會發現創建了三個鏡像。然后,配置hosts使sample.demo.testdomain.com指向當前機器,然后訪問http://sample.demo.testdomain... 返回phpinfo()信息,說明創建成功。
三、部署架構說明TIPS: 這個方案僅適用于小公司or敏捷項目團隊聯調測試環境的部署,同時也可以作為Docker學習入門的case,并不適用于有一定規模的生產環境。
在“開發機”上僅僅安裝docker、docker-compose、git之后就能跑起來Nginx、PHP的應用,當然得益于docker容器化的思想。其實這個的實現也僅僅利用了容器化的這個特性,最終docker-compose打包的整個服務會長駐內存,無需太多的管理成本。
最終的實現還具備兩個特點:
基于這個實現的boilerplate你可以輕易的遷移到其他項目,以及其他語言;
每個sample管理每個應用的倉儲地址、環境變量配置、更新代碼后的鉤子等操作;
其實現原理為:通過腳本文件,管理docker-compose隱射到宿主機的配置、源碼,同時將docker-compose暴露出來以實現服務的管理。架構圖如下:
1、docker-compose配置文件:docker-compose.yml先看docker-compose的配置文件docker-compose.yml(篇幅原因,刪掉了一部分配置):
version: "3" services: # 所有的PHP環境構建在app容器里 php: build: ./php expose: - "9000" # nginx容器 nginx: build: ./nginx # 端口映射 ports: - "80:80" # 依賴關系聲明,先跑php所有服務 depends_on: - "php" # jenkins容器 jenkins: image: jenkins:latest ports: - "8080:8080" - "50000:50000"
這其實就是一個普通的PHP開發環境示例:可以看到就php、nginx、jenkins三個基本容器,除了jenkins,其他的容器均使用Dockerfile(build配置)來構建。
2、構建腳本:build.sh由于在docker中實現了nginx配置文件及php源碼文件的映射到宿主機,需要通過管理宿主機上文件就可以管理代碼的發布和部署了,build.sh就是用來做這件事情的。
當然了,如果需要在部署代碼完成之后,做重啟、編譯等操作,通過sample目錄下的鉤子就可以實現了。
具體實現可以參考build.sh源碼。
四、詳細配置 1、開發測試環境域名配置在nginx/conf.d/sample修改測試環境域名,示例中使用的testdomain.com改成自己的測試環境域名即可。
另外,建議把測試域名泛解析到部署這臺服務的機器。
2、docker-compose.yml配置說明docker-compose的配置文件基本不需要修改,只需要關注:nginx是80端口映射到80端口,jenkins是8080端口,而php-fpm的9000端口不對外開放即可。
當然了,如果php環境需要安裝依賴,就需要修改./php/Dockerfile。此外,如果需要添加其他的語言環境,就需要添加一個容器的聲明。
3、模塊配置 1)部署腳本build.sh業務模塊的配置基本是通過部署腳本build.sh來操作的。執行./build.sh提示如下:
Example: ./build.sh -u xiongwilee -m php:online,service:online Usage: -u 必填,角色名 示例:default -m 選填,要更新代碼的業務模塊 示例:php:online,service:online -e 選填,更新業務模塊對應的環境變量 示例:php:true,service:false -d 選填,刪除角色 示例:default2)PHP模塊
新增角色實時上是根據php/sample目錄創建了一個角色名對應的文件夾。在sample里只有四個文件:
.gitaddress:聲明當前模塊的遠程倉儲地址
on_add.sh:創建角色時下載PHP模塊代碼完成之后的回調鉤子,用已更新環境變量等文件,執行./build.sh -u {name}會被調用
on_upd.sh:某個模塊更新完成之后的回調鉤子,用以編譯、重啟服務等操作,執行./build.sh -u {name} -m web:master會被調用
on_env.sh:更新環境變量的鉤子,執行./build.sh -u {name} -m web:master -e web:true都會被調用。
在sample目錄下還有個sample目錄,這個是一個php模塊示例;新增角色之后訪問sample.{name}.testdomain.com就可以來測試是否成功新增。
3)Nginx配置和php/sample目錄一樣,在nginx/conf.d下也有個sample文件,這個也是在新增角色時使用的示例配置文件。注意,新增角色會把sample中的${name}替換成當前角色名。
nginx/log目錄及nginx所有日志文件的宿主機映射目錄。
4)Jenkins配置方案jenkins默認開啟8080端口,你可以直接通過http://jenkins.testdomain.com:8080訪問jenkins服務。具體初始化過程這里不詳述。
在通過Jenkins執行build.sh腳本時,上文提到的角色名怎么獲取呢?其實就是jenkins的用戶名,你可以通過創建多個jenkins的用戶來創建測試環境角色。
參考jenkins插件-Build User Vars Plugin簡單說明安裝jenkins插件。
安裝完成之后就可以通過BUILD_USER環境變量獲取當前jenkins的用戶名了(當然了,新建jenkins用戶的用戶名最好是拼音或英文)。
由于jenkins存在Docker鏡像中,每次jenkins操作需要執行build.sh都需要使鏡像中的jenkins與宿主機通信。這里使用的方法是,在jenkins的鏡像添加到宿主機的信任關系。
然后就可以通過ssh apple@{jenkins內網IP} "sh build.sh"來直接執行宿主機里的腳本了(這里肯定還有更優雅的方法)。
添加一個任務后只需要配置兩項:
general:“參數化構建過程”:
選擇 "String Parameter",添加"web"、"web-fe"、"service"字段
選擇"Boolean Parameter",添加"web_env"、“service_env”字段。
構建:"Execute Shell":
echo "正在將 web-fe:${web_fe},web:${web},service:${service} 部署到 ${BUILD_USER_ID} 環境" ssh apple@{jenkins內網IP} "sh ~/docker-compose/build.sh -u ${BUILD_USER_ID} -m web-fe:${web_fe},web:${web},service:${service} -e web:${web_env},service:${service_env}";
這樣,通過這個任務就可以直接在jenkins中執行宿主機中的build.sh腳本,從而實現新增角色、更新代碼的操作了。
最后,如果需要在PHP的服務基礎上集成其他語言的服務,比如Nodejs,涉及到的改動有:
添加Nodejs鏡像:docker-compose.yml
添加部署任務:build.sh
創建及刪除角色流程
部署流程
nginx配置文件示例:nginx/conf.d/sample
五、貢獻歡迎提供其他更專業的思路,歡迎提issue、fork;也可以郵件聯系:xiongwilee[at]foxmail.com。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/40065.html
摘要:三部署架構說明這個方案僅適用于小公司敏捷項目團隊聯調測試環境的部署,同時也可以作為學習入門的,并不適用于有一定規模的生產環境。另外,建議把測試域名泛解析到部署這臺服務的機器。模塊配置部署腳本業務模塊的配置基本是通過部署腳本來操作的。 項目地址: https://github.com/xiongwilee...基本特性: 快捷部署多人nginx+php的開發測試環境,也可以擴展構建其...
摘要:所以我們選一個倉庫倉庫比較多,我這里選用,都行,根據需求自行選擇訪問端口,然后就沒有然后了功能沒有那么強大,不過占用資源少,速度快,我們穩定運行了幾年了。 kubernetes集群三步安裝 CI 概述 用一個可描述的配置定義整個工作流 程序員是很懶的動物,所以想各種辦法解決重復勞動的問題,如果你的工作流中還在重復一些事,那么可能就得想想如何優化了 持續集成就是可以幫助我們解決重復的代碼...
摘要:在貓屎氤氳的霧氣里角仰望天花板,手機微信提醒這次構建成功或失敗,并附帶污言穢語。這時他可以開始往工位走,坐下時,微信又會提醒本次部署到成功或失敗。與企業微信的集成在決定使用之前,需要知道的是,是一個高度依賴社區的項目。 前言 相信我,一切事情的發生都是趕鴨子上架,沒有例外。人類所有偉大的變革都是迫不得已,可又是那么順其自然。比如容器(docker)技術的誕生,比如箭在弦上的創業,比如野...
摘要:本文是網易容器云平臺的微服務化實踐系列文章的第一篇。網易容器云平臺的前身是網易應用自動部署平臺,它能夠利用云提供的基礎設施,實現包括構建和部署一體化在內的整個應用生命周期管理。目前網易云容器服務團隊以的方式管理著微服務,每周構建部署次數。 此文已由作者馮常健授權網易云社區發布。 歡迎訪問網易云社區,了解更多網易技術產品運營經驗。 摘要:網易云容器平臺期望能給實施了微服務架構的團隊提供完...
摘要:數人云今天帶來的文章將分享如何用實現命令行程序的過程中整體思路以及需要注意哪些問題。月日,超越傳統運維之道的話題將在北京延續,四位業界大牛技術齊聚,結合傳統運維現狀及實踐案例,講述的超越之道。 數人云今天帶來的文章將分享如何用Docker實現PHP命令行程序的CI/CD過程中整體思路以及需要注意哪些問題。 6月10日,《DevOps&SRE超越傳統運維之道》的話題將在北京延續,四位業界...
閱讀 2706·2021-11-11 16:54
閱讀 2329·2021-10-09 09:44
閱讀 2548·2019-08-30 15:54
閱讀 1936·2019-08-30 11:24
閱讀 1175·2019-08-29 17:03
閱讀 2107·2019-08-29 16:22
閱讀 2086·2019-08-29 13:11
閱讀 1044·2019-08-29 12:14