使用Docker搭建GitLab實踐
使用Docker搭建GitLab實踐
SVN與GIT,二者皆須會
當 前版本控制系統(Version Control System,VCS)有集中化版本版本控制系統(Centralized Version Control System,簡稱 CVCS)和分布式版本控制系統(Distributed Version Control System,簡稱 DVCS)。
集中化版本控制系統的代表是SVN,分布式版本控制系統的代表是GIT。
熟悉SVN已兩年,玩過SVNKIT、svn cli、pysvn,當然也搭建過SVN服務端。
平常偶爾也通過GitHub或Git@OSC使用GIT,web界面所提供的功能強大,簡單易用。
而SVN在業界目前沒發現有開源的成熟的類似GitHub這樣的解決方案;
GitLab號稱是GitHub的開源實現,它擁有與Github類似的功能,其中Git@OSC就是基于 GitLab 項目搭建。
也一直有想法自己搭建GitLab,用來體驗、使用、熟悉它。
而查閱過多篇關于GitLab的搭建的官方文檔或博客,深深的感覺搭建過程過于繁瑣,非一日之功,于是搭建GitLab計劃就被擱淺了。
當然,也有第三方提供一鍵安裝Gitlab的解決方案(如Bitnami GitLab Installers),但不是很感冒,并沒有做嘗試。
Docker,讓GitLab安裝部署更簡單
而今Docker流行,它使得軟件安裝部署變得更簡單,通過Docker鏡像與容器就可以快速搞定這些繁瑣的、重復的安裝部署過程,并且鏡像可移植。
之前曾用Docker部署過Jenkins和ReviewBoard,切身體會到了Docker的帶來的便利。
有了之前對Docker的了解與實踐,于是開始了使用Docker搭建GitLab的實踐。
GitLab的Docker鏡像已經有大牛做好,并且一直在隨著GitLab這個版本帝的升級而進行維護,詳見其GitHub倉庫,并且文檔也很健全。
使用Docker搭建GitLab實踐
使用docker-compose快速啟動Gitlab
wget https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml docker-compose up
三步走運行GitLab容器
1、運行一個PostgreSQL容器
docker run --name gitlab-postgresql -d \ --env 'DB_NAME=gitlabhq_production' \ --env 'DB_USER=gitlab' --env 'DB_PASS=password' \ --volume /srv/docker/gitlab/postgresql:/var/lib/postgresql \ sameersbn/postgresql:9.4-2
2、運行一個Redis容器
docker run --name gitlab-redis -d \ --volume /srv/docker/gitlab/redis:/var/lib/redis \ sameersbn/redis:latest
3、運行GitLab容器
docker run --name gitlab -d \ --link gitlab-postgresql:postgresql --link gitlab-redis:redisio \ --publish 10022:22 --publish 10080:80 \ --env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \ --volume /srv/docker/gitlab/gitlab:/home/git/data \ sameersbn/gitlab:7.13.1
注意:GitLab應用的啟動需要幾分鐘。
通過csphere查看gitlab相關容器
訪問GitLab
訪問地址:http://localhost:10080,使用默認的用戶名和密碼登錄。
默認的用戶名:root
默認的密碼:5iveL!fe
GitLab前不久啟用了全新logo,界面布局也有變化:
GitLab更多配置
通過上面的步驟已經快速啟動了GitLab容器,可以用來測試使用,但是要在生產環境使用GitLab還需要進行一系列配置。
GitLab的一系列配置信息(如:GitLab_HOST、Mail、LDAP等)目前還無法從web界面進行配置。
而docker-gitlab為這提供了以環境變量的形式提供了一系列可配置的參數。
這些環境變量需要在GitLab鏡像啟動的時候指定。
如果當前GitLab容器已啟動,可以停止、刪除容器,然后基于GitLab鏡像指定環境變量再創建、啟動新容器即可。
GITLAB_HOST配置
GITLAB_HOST: The hostname of the GitLab server. Defaults to localhost
這個值會被Gitlab用來生成repo的鏈接,所以必須要設置。否則,在創建的repo中,會發現所有的repo鏈接都是以localhost為hostname。
MAIL配置
mail可以用來在用戶注冊的時候給用戶發送郵箱認證鏈接相關信息。
默認的mail配置使用的是gmail,需要一個用戶名和密碼來登錄到gmail服務器。
當然,也可以通過指定一系列SMTP相關的環境變量來使用其他郵箱(如QQ郵箱、網易郵箱)作為郵件服務器。
時區配置
GitLab默認的時區是UTC,北京時區為UTC+8區。
可以通過指定環境變量GITLAB_TIMEZONE=Beijing來更改時區。
包括但不限于上面的配置,GitLab還可以定制更多配置信息,如LDAP、SSL、OmniAuth Integration等等,詳情請參考官方說明文檔。
Docker-GitLab搭建遇到的問題
磁盤空間不足
PostgreSQL容器在啟動之后迅速關閉,再次啟動亦是如此,且并沒有給出錯誤提示信息。
通過使用docker logs gitlab-postgresql查看容器日志時獲得:No space left on device,在主機上清理磁盤空間后解決了該問題。
頁面提供的訪問gitlab的默認用戶名和密碼不準確(目前已修正)
頁面提供的默認密碼為password,登錄失敗,后來使用5iveL!fe這個登錄成功。
查看docker-gitlab的提交日志,關于默認密碼,有如下行:
同時,與之相關的還有issue 389:
為Docker-GitLab做貢獻
在閱讀docker-gitlab的README時,發現文檔有一處使用的fig(docker-compose的前身),
于是fork了docker-gitlab的源碼,并提交了一個pull request將fig修改為docker-compose,
目前該PR已經被Merged,很榮幸自己也成為docker-gitlab的一個contributor。
后續Docker-GitLab研究計劃
-
研究docker-gitlab的其他配置,如LDAP、SSL、OmniAuth Integration等
-
研究docker-gitlab的安裝配置文件(docker-gitlab/assets)
-
研究docker-gitlab的Dockerfile
-
研究docker-gitlab的entrypoint.sh(該shell腳本近千行)

