之前,在服务器上直接安装配置过gitlab,感觉需要配置安装的东西还是挺多的:git,redis,postgresql,nginx等。这么多服务一起,备份和迁移都不方便。为了避免这个问题,决定将gitlab进行docker化部署。所有服务组件都在一个docker容器里面,只需将重要的配置、repo数据等挂载在宿主机上保存。平时只要备份挂载的数据目录即可,另外,如果需要迁移,也只需把数据目录拷贝到其它服务器,通过docker容器运行即可。
我使用的gitlab镜像是从docker公共仓库上下载的gitlab/gitlab-ce,里面包含了需要的所有组件服务,只要这一个镜像即可(当时GitLab的版本是8.7.5)。
1 容器的运行命令
容器的运行其实很简单,但刚开始也折腾了许久才让它按照自己想要的方式跑起来。
docker run --name='gitlab-ce' -d \ -p 10022:22 -p 80:80 \ --restart always \ --volume /data/gitlab/config:/etc/gitlab \ --volume /data/gitlab/logs:/var/log/gitlab \ --volume /data/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce
-p 用来指定docker容器映射宿主机的服务端口。80是web访问用的端口,22是ssh协议用的端口;
–volume 用来指定挂载目录。将config配置目录、data数据目录、logs日志目录挂载到宿主机上,以后备份起来也方便。
2 配置gitlab服务器的访问地址
按照上面的方式,让gitlab容器运行起来是没有问题的,但是当在gitlab上创建项目的时候,生成项目的URL访问地址是按容器的hostname来生成的,即容器的id。作为gitlab服务器,当然是需要一个固定的URL访问地址,于是需要配置gitlab.rb(宿主机上的路径为:/data/gitlab/config/gitlab.rb)配置文件里面的参数。
# 配置http协议所使用的访问地址 external_url 'http://10.200.0.100' # 配置ssh协议所使用的访问地址和端口 gitlab_rails['gitlab_ssh_host'] = '10.200.0.100' gitlab_rails['gitlab_shell_ssh_port'] = 10022
为了方便,这里直接用宿主机ip来指定。ssh默认使用的端口号是22,但是为了避开与宿主机22端口的冲突,这里用了10022。通过上面的配置,gitlab上的项目生成的访问地址如下:
# HTTP http://10.200.0.100/root/test-docker-gitlab.git # SSH ssh://git@10.200.0.100:10022/root/test-docker-gitlab.git
3 配置邮件发送功能
个人觉得gitlab服务器发送邮件的功能是必不可少的,尤其是在用户注册时,通知用户设置密码也是通过发送邮件来完成的。这里也是修改gitlab.rb配置文件来完成。
# 这里以新浪的邮箱为例配置smtp服务器 gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.sina.com" gitlab_rails['smtp_port'] = 25 gitlab_rails['smtp_user_name'] = "name4mail" gitlab_rails['smtp_password'] = "passwd4mail" gitlab_rails['smtp_domain'] = "sina.com" gitlab_rails['smtp_authentication'] = :login gitlab_rails['smtp_enable_starttls_auto'] = true # 还有个需要注意的地方是指定发送邮件所用的邮箱,这个要和上面配置的邮箱一致 gitlab_rails['gitlab_email_from'] = 'name4mail@sina.com'
注意,每次修改gitlab.rb配置文件之后,或者在容器里执行gitlab-ctl reconfigure命令,或者重启容器以让新配置生效。
其他