使用Docker搭建GitLab實踐

使用Docker搭建GitLab實踐

SVN與GIT,兩者皆須會

當前版本控制系統(Version Control System,VCS)有集中化版本版本控制系統(Centralized Version Control System,簡稱 CVCS)和分佈式版本控制系統(Distributed Version Control System,簡稱 DVCS)。 
集中化版本控制系統的表明是SVN,分佈式版本控制系統的表明是GIT。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),但不是很感冒,並無作嘗試。github

Docker,讓GitLab安裝部署更簡單

而今Docker流行,它使得軟件安裝部署變得更簡單,經過Docker鏡像與容器就能夠快速搞定這些繁瑣的、重複的安裝部署過程,而且鏡像可移植。 
以前曾用Docker部署過Jenkins和ReviewBoard,切身體會到了Docker的帶來的便利。 
有了以前對Docker的瞭解與實踐,因而開始了使用Docker搭建GitLab的實踐。 
GitLab的Docker鏡像已經有大牛作好,而且一直在隨着GitLab這個版本帝的升級而進行維護,詳見其GitHub倉庫,而且文檔也很健全。web

使用Docker搭建GitLab實踐

使用docker-compose快速啓動Gitlab

wget https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml
docker-compose up

三步走運行GitLab容器

一、運行一個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

二、運行一個Redis容器

docker run --name gitlab-redis -d \
--volume /srv/docker/gitlab/redis:/var/lib/redis \
sameersbn/redis:latest

三、運行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應用的啓動須要幾分鐘。redis

經過csphere查看gitlab相關容器

docker-gitlab-use

訪問GitLab

訪問地址:http://localhost:10080,使用默認的用戶名和密碼登陸。 
默認的用戶名:root
默認的密碼:5iveL!fe
sql

docker-gitlab-use

GitLab前不久啓用了全新logo,界面佈局也有變化:docker

docker-gitlab-use

GitLab更多配置

經過上面的步驟已經快速啓動了GitLab容器,能夠用來測試使用,可是要在生產環境使用GitLab還須要進行一系列配置。 
GitLab的一系列配置信息(如:GitLab_HOST、Mail、LDAP等)目前還沒法從web界面進行配置。 
而docker-gitlab爲這提供了以環境變量的形式提供了一系列可配置的參數。 
這些環境變量須要在GitLab鏡像啓動的時候指定。 
若是當前GitLab容器已啓動,能夠中止、刪除容器,而後基於GitLab鏡像指定環境變量再建立、啓動新容器便可。shell

GITLAB_HOST配置

GITLAB_HOST: The hostname of the GitLab server. Defaults to localhost 
這個值會被Gitlab用來生成repo的連接,因此必需要設置。不然,在建立的repo中,會發現全部的repo連接都是以localhost爲hostname。segmentfault

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的提交日誌,關於默認密碼,有以下行:

docker-gitlab-use

同時,與之相關的還有issue 389

docker-gitlab-use

爲Docker-GitLab作貢獻

在閱讀docker-gitlab的README時,發現文檔有一處使用的fig(docker-compose的前身), 
因而fork了docker-gitlab的源碼,並提交了一個pull request將fig修改成docker-compose, 
目前該PR已經被Merged,很榮幸本身也成爲docker-gitlab的一個contributor。

docker-gitlab-use

docker-gitlab-use

docker-gitlab-use

後續Docker-GitLab研究計劃

  • 研究docker-gitlab的其餘配置,如LDAP、SSL、OmniAuth Integration等

  • 研究docker-gitlab的安裝配置文件(docker-gitlab/assets)

  • 研究docker-gitlab的Dockerfile

  • 研究docker-gitlab的entrypoint.sh(該shell腳本近千行)

參考

相關文章
相關標籤/搜索