当前版本控制系统(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脚本近千行)