當前版本控制系統(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流行,它使得軟件安裝部署變得更簡單,經過Docker鏡像與容器就能夠快速搞定這些繁瑣的、重複的安裝部署過程,而且鏡像可移植。
以前曾用Docker部署過Jenkins和ReviewBoard,切身體會到了Docker的帶來的便利。
有了以前對Docker的瞭解與實踐,因而開始了使用Docker搭建GitLab的實踐。
GitLab的Docker鏡像已經有大牛作好,而且一直在隨着GitLab這個版本帝的升級而進行維護,詳見其GitHub倉庫,而且文檔也很健全。web
wget https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml docker-compose up
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
docker run --name gitlab-redis -d \ --volume /srv/docker/gitlab/redis:/var/lib/redis \ sameersbn/redis:latest
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
訪問地址:http://localhost:10080,使用默認的用戶名和密碼登陸。
默認的用戶名:root
默認的密碼:5iveL!fe
sql
GitLab前不久啓用了全新logo,界面佈局也有變化:docker
經過上面的步驟已經快速啓動了GitLab容器,能夠用來測試使用,可是要在生產環境使用GitLab還須要進行一系列配置。
GitLab的一系列配置信息(如:GitLab_HOST、Mail、LDAP等)目前還沒法從web界面進行配置。
而docker-gitlab爲這提供了以環境變量的形式提供了一系列可配置的參數。
這些環境變量須要在GitLab鏡像啓動的時候指定。
若是當前GitLab容器已啓動,能夠中止、刪除容器,而後基於GitLab鏡像指定環境變量再建立、啓動新容器便可。shell
GITLAB_HOST: The hostname of the GitLab server. Defaults to localhost
這個值會被Gitlab用來生成repo的連接,因此必需要設置。不然,在建立的repo中,會發現全部的repo連接都是以localhost爲hostname。segmentfault
mail能夠用來在用戶註冊的時候給用戶發送郵箱認證連接相關信息。
默認的mail配置使用的是gmail,須要一個用戶名和密碼來登陸到gmail服務器。
固然,也能夠經過指定一系列SMTP相關的環境變量來使用其餘郵箱(如QQ郵箱、網易郵箱)做爲郵件服務器。服務器
GitLab默認的時區是UTC,北京時區爲UTC+8區。
能夠經過指定環境變量GITLAB_TIMEZONE=Beijing來更改時區。分佈式
包括但不限於上面的配置,GitLab還能夠定製更多配置信息,如LDAP、SSL、OmniAuth Integration等等,詳情請參考官方說明文檔。
PostgreSQL容器在啓動以後迅速關閉,再次啓動亦是如此,且並無給出錯誤提示信息。
經過使用docker logs gitlab-postgresql查看容器日誌時得到:No space left on device,在主機上清理磁盤空間後解決了該問題。
頁面提供的默認密碼爲password,登陸失敗,後來使用5iveL!fe這個登陸成功。
查看docker-gitlab的提交日誌,關於默認密碼,有以下行:
同時,與之相關的還有issue 389:
在閱讀docker-gitlab的README時,發現文檔有一處使用的fig(docker-compose的前身),
因而fork了docker-gitlab的源碼,並提交了一個pull request將fig修改成docker-compose,
目前該PR已經被Merged,很榮幸本身也成爲docker-gitlab的一個contributor。
研究docker-gitlab的其餘配置,如LDAP、SSL、OmniAuth Integration等
研究docker-gitlab的安裝配置文件(docker-gitlab/assets)
研究docker-gitlab的Dockerfile
研究docker-gitlab的entrypoint.sh(該shell腳本近千行)