您的位置:首页 > 运维架构 > Docker

基于docker的gitlab部署及迁移

2018-01-31 02:47 561 查看
文章允许转载,请注明来源:http://blog.csdn.net/feiniao8651/article/details/79212632

OS:CentOS 6.5 (kernel2.6.32)


背景

伴随着github的火爆,git作为当前最受欢迎的代码管理工具,在现在软件开发中应用越来越普遍。只要有多人协作共同开发,就能明显感受到git在代码管理上的强大和带来的便利。作为一个小创业团队,基于成本上的考量,基本上不会去买付费的代码托管服务。虽然国内也有免费的代码托管平台,但是基于安全性考量,还是感觉放在自己的服务器上会更靠谱一些。gitlab就是一个优秀的开源代码管理平台。

在15年的时候,自己就曾经为公司搭建过一次,当时出发点是搭建一整套的持续集成(CI)系统,整体框架是gitlab+gerrit+jenkins。gitlab做代码服务器,gerrit用来做代码review,jenkins做自动化测试部署。出发点是很好,,但是后来发现gerrit和jenkins并没有在公司内部推广开来,只有gitlab被大家广泛使用,还是有点小小遗憾。当时搭建一整套的框架,加上自己也算是服务器小白,有很多东西现学现用,花了我将近一个周的时间。整个系统实在是太多配置选项,以后再也不想搭第二次了。

后来偶然有了一个机会,需要我再搭一套gitlab,这次自己没有重走以前的老路。通过工作中接触docker,感觉到了docker在应用部署上的易用性。所以这次就是用了docker来部署新的gitlab服务。

gitlab部署

首先是要安装docker

yum install docker-io


通过docker –version来确认是否正常安装。

接下来是用一个开源项目docker-gitlab,docker需要运行三个容器,分别对应的是gitlab主程序,redis和postgresql。依次执行以下命令:

postgresql容器初始化

docker run --name gitlab-postgresql -d \
--env 'DB_NAME=gitlabhq_production' \
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \
--env 'DB_EXTENSION=pg_trgm' \
--volume /srv/docker/gitlab/postgresql:/var/lib/postgresql \
sameersbn/postgresql:9.6-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' \
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \
--env 'GITLAB_HOST=example.com' \
--env 'GITLAB_EMAIL=gitlab@example.com' \
--env 'SMTP_ENABLED=true' \
--env 'SMTP_DOMAIN=smtp.qq.com' \
--env 'SMTP_HOST=smtp.exmail.qq.com' \
--env 'SMTP_STARTTLS=false'  \
--env 'SMTP_USER=gitlab@example.com' \
--env 'SMTP_PASS=password' \
--env 'SMTP_AUTHENTICATION=login' \
--volume /srv/docker/gitlab/gitlab:/home/git/data \
sameersbn/gitlab:10.4.2


这里可以配置gitlab的域名以及发信邮箱,发信邮箱可以用来做邮件通知以及注册验证。

此时通过命令就能看到三个已经启动的实例了:

#docker ps -a
CONTAINER ID        IMAGE                        COMMAND                CREATED             STATUS              PORTS                                                   NAMES
2216e5cd3328        sameersbn/gitlab:10.4.2       "/sbin/entrypoint.sh   33 minutes ago      Up 33 minutes       443/tcp, 0.0.0.0:10022->22/tcp, 0.0.0.0:10080->80/tcp   gitlab
3ae2606d43c9        sameersbn/redis:latest       "/sbin/entrypoint.sh   37 minutes ago      Up 37 minutes       6379/tcp                                                gitlab-redis
9c9a265ddd94        sameersbn/postgresql:9.6-2   "/sbin/entrypoint.sh   39 minutes ago      Up 39 minutes       5432/tcp                                                gitlab-postgresql


通过访问http://服务器ip:10080,就能看到一个gitlab的使用界面了。

gitlab迁移

接下来讲一下gitlab的迁移。我们的gitlab服务有时候可能由于某些原因,需要迁移到其他服务器上,通过docker-gitlab,迁移的成本会变得非常低。

原因在于docker-gitlab做了一个程序和数据的分离,对于docker熟悉的人可能也注意到了,刚才我们启动命令中,都是和容器共享了一个host上的路径,分别是

/srv/docker/gitlab/postgresql
/srv/docker/gitlab/redis
/srv/docker/gitlab/gitlab


即数据都是在host上的文件系统里。所以当我们要迁移gitlab的时候,只要把服务停掉,然后把/srv/docker/gitlab目录拷贝到另一台服务器的相同路径下,然后重新做一遍以上的gitlab部署部分的操作即可。同时也可以通过这种方式来做数据备份和gitlab的版本升级。

ps:

在迁移时极大概率会遇到权限的问题,因为linux有一套自己的用户权限管理系统,不同的用户有各自的用户id,所在组id。当迁移上面的gitlab文件时,目标系统上的用户id和原系统的用户id很可能不同,这时候就会造成gitlab不能正常读取文件的错误,页面可能会显示”No repository”,这时要将迁移文件的用户和用户组改成gitlab所对应的用户

chown -R user:user /srv/docker/gitlab


同时需要清理一下缓存

docker exec -ti gitlab bash
bundle exec rake cache:clear RAILS_ENV=production


参考:

用Docker安装Gitlab

docker-gitlab

gitlab版本升级并docker化
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息