首页 > IT > 使用docker重建Gitlab服务

使用docker重建Gitlab服务

2015年3月6日 发表评论 阅读评论

新年假期回到公司,就发现一个噩耗,就是代码服务器意外关机,重启不成功。虽然我知道linux的机器意外关机会造成不可以预知的损坏,但是在10多年的linux使用生涯中还是真的未遇过。这次终于给我遇上了。

虽然数据在年前已经备份过了。不过我想到的是如果这台机救不回来,要我重新安装这个gitlab服务就真的疼苦了。虽然当初安装的时候有把关键点都记录下来。不过再安装一次的确痛苦。关键是迁移数据的问题。我还发现一个问题就是我没有记录当时安装的gitlab的版本,低级错误。不过经过维护部门的努力,机器是可以重新启动,gitlab服务也正常。不过在等待维护部门的修复,就等待了好几天。好在影响不大,其实这些东西本应不用我操心的。不过公司一共4个开发团队,就我一个团队使用代码管理。其他几个部门还是原始社会的手工管理。所以这个代码服务器想移交去维护部门都不行。

虽然这次救活了,但是我还是需要准备万一下次再出问题的时候,修复不了机器的时候做好准备了。作为快速搭建服务,首选是使用docker进行部署。目前已经有人做好了docker-gitlab的image镜像。目前这个image的版本使用gitlab 7.8.1,不过我们使用的gitlab的版本是6.6.5的版本。不知道数据库是否可以平滑升级。

找了一台Ubuntu 14.04机器进行测试。其实使用这个docker-gitlab的container比较简单,他的github页面说明比较详细。如果新建的gitlab服务,参照他的说明就可以了。比较简单。但是有一个坑,这个可能是docker-compose(原有的fig)的bug。

我的docker环境

docker-compose 版本1.1.0

Docker version 1.4.0, build 4595d4f

在使用docker-compose启动服务的时候,除了volumes的选项,其他都一切都正常。我喜欢把数据直接写到归宿主机上。不喜欢写在container上。而且我还有一些旧有数据需要移植,所以需要使用volumes。开始我以为images的问题,或者是设置问题。搞了很久。所有的volumes设置都没有绑定到container上。非常奇怪。因为这个问题,搞了我好几天。

后来干脆写shell脚本来启动服务。使用docker命令行启动服务。这样volumes就没有问题了。

现在讲述一下我是如果把原有的gitlab 6.6.5的服务数据,迁移到这个docker-gitlab(7.8.1)的docker-container上。

1、数据库迁移。

数据库目前我是使用mysql的。虽然gitlab建议使用PostgreSQL的。但是由于当初安装的时候选择了mysql。所以现在还是使用mysql。你可以在系统安装mysql,然后到入数据库,设置用户权限。不过既然使用docker来部署gitlab,数据库也使用docker来部署把,这样更加高逼格。

启动mysql的docker脚本:

docker run –name=mysql -d \
-e ‘DB_NAME=gitlabhq_production’ -e ‘DB_USER=gitlab’ -e ‘DB_PASS=password’ \
-p 13306:3306 \
-v /home/daozhao/dockerGit/Mysql:/var/lib/mysql \
sameersbn/mysql:latest

数据存放在归宿主机上。

需要把旧有的数据库导入数据库中。本来可以直接连接到mysql的端口上进行导入数据库的,不过设置了这个docker的mysql root远程连接用户 -e ‘DB_REMOTE_ROOT_NAME=root’ -e ‘DB_REMOTE_ROOT_PASS=secretpassword’ ,不过连接失败,拒绝连接。搞不懂什么原因。

唯有登陆container的bash进行操作。把备份的数据库文件拷贝到/home/daozhao/dockerGit/Mysql目录下。然后进行下边的操作。

docker exec -it mysql bash

root@429682e97231:# cd/var/lib/mysql

root@429682e97231:/var/lib/mysql# mysql -u gitlab -ppassword gitlabhq_production < gitlabhq_production.20150302_1740.sql

root@429682e97231:exit

2、启动Redis.

这个就超级简单。

docker run –name=redis -d sameersbn/redis:latest

3、启动Gitlab。

docker run –name=gitlab -d \
–link mysql:mysql \
–link redis:redisio \
-p 10022:22 -p 10080:80 \
-v /home/daozhao/dockerGit/Data:/home/git/data \
-v /home/daozhao/dockerGit/Log:/var/log/gitlab \
sameersbn/gitlab:7.8.1

数据和log分别存储在/home/daozhao/dockerGit/Data和/home/daozhao/dockerGit/Log上。

这个时候你需要把原有的数据copy到/home/daozhao/dockerGit/Data目录上,只要copy两个目录就可以了。gitlab-satellites和repositories。另外你需要注意的是目录权限。一般docker运行都是使用root来运行的,所以你建立目录的时候需要使用sudo mkdir来建立/home/daozhao/dockerGit/Data目录和log的目录。不过在我的测试机上,不清楚什么原因在Data目录下container自动建立的几个目录所有者并不是root,只有一个ssh的目录存放证书的是root。是系统上第一个建立的用户名,我估计这个是和ubuntu的用户机制有关系。所以当你拷贝gitlab-satellites和repositories这两个目录到Data目录下,需要修改其所有者为其他几个自动建立的目录所有者相同。要不然gitlab读不出数据。

4.使用浏览器访问 http://XXX.XXX.XXX.XXX:10080/ 当然你可以把访问端口设置成80。

有一个要点,需要提醒大家,大家要在启动gitlab之前把旧有的数据导入数据库,不要等待gitlab启动后再导入数据库。这样会出错的。gitlab在页面上显示内部错误。就算你重启gitlab也是这样的。

这篇文章注意讲的是数据迁移,如果你是新建Gitlab服务,直接按照说明安装使用就可以了。注意volumes的坑就可以。

ps:真心的不建议自己搭建这些代码服务,建议直接使用第三方的服务。国内有codinggitcafe等,实在信不过国内的服务商。可以使用国外的,龙头大哥github,bitbucket,本身GitLab自己都有托管服务。好像我花在这个代码服务器的搭建维护投入的人工,够买好几年的服务了。

 

 

Bookmark and Share
分类: IT 标签: , ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.