在Ubuntu用Docker部署汉化版GitLab

项目的开发通常都离不开对代码的版本管理。简单的方式可以在内网搭建一个仓库,然后添加各个组员的公钥来共同开发。这种方式不仅不利于管理和维护,而且功能过于单一。我们很希望有像GitHub这样的平台服务,功能齐全且好维护。但由于GFW的原因,有时候访问延迟过大。更重要的是,github免费版只支持开源项目,私有项目需要付费,而且比较昂贵,并不适合公司的项目。

GitLab 是一个类似与GitHub的项目,功能十分强大且界面美观,支持代码管理、issue管理、代码review和CI等功能。它提供免费的社区版和付费版,社区版足够满足我们的项目需求。本篇文章我将介绍GitLab社区版的安装和配置。

安装

我使用的Docker镜像是GitLab 中文社区版 Docker 镜像

基于 GitLab 官方社区版 Docker 镜像制作的中文 Docker 镜像, 汉化补丁来自网友 larryli (8.8.5之前), 后续由网友 xhang 维护。
由于汉化工作需要大量的人力, 所以中文版的版本会比官方的版本稍低, 如果刻意最求最新版, 请使用官方的 GitLab Docker 镜像。

后续的升级可以参考该项目的readme.md

1. 硬件需求及软件版本

硬件需求

  • CPU: 2核
  • 内存: 4G内存
  • 硬盘: 5-10G的硬盘存储

不满足以上配置,在使用中要么会比较慢,要么会报500错误。甚至部署失败,我第一次在我用于翻墙的低配服务器(1核、1G内存)上部署GitLab,启动失败。

软件版本

  • 系统: Ubuntu16.04
  • Docker: 17.03.2-ce
  • GitLab: beginor/gitlab-ce:11.1.4-ce.0

2. 在Ubuntu系统安装Docker

在Ubuntu系统安装Docker一行代码就可以搞定。我刚开始搜索安装方法时,却发现大家的方法都很复杂,例如Ubuntu 16.04 安装 Docker。有知道其中区别的朋友,还请指教。

apt install docker.io

安装后可以通过docker -v测试时候安装成功

root@vultr:~# docker -v
Docker version 17.03.2-ce, build f5ec1e2

在Docker版本号中CE代表社区版,EE代表企业版

3. 创建容器外挂目录

gitlab/gitlab-ce容器需要三个目录,分别存放应用数据、日志和配置文件

我们创建三个目录分别存放这些数据,便于GitLab的维护和迁移。即时是GitLab被我们玩坏了,只要这三个文件还存在,我们就可以很简单的重建

sudo mkdir -p /gitlab/data

sudo mkdir -p /gitlab/logs

sudo mkdir -p /gitlab/config

4. 启动GitLab容器

 sudo docker run --detach \
    --publish 8443:443 --publish 8000:80 --publish 2222:22 \
    --name gitlab \
    --restart always \
    --volume /gitlab/config:/etc/gitlab \
    --volume /gitlab/logs:/var/log/gitlab \
    --volume /gitlab/data:/var/opt/gitlab \
    -log-driver=none \
    beginor/gitlab-ce:11.1.4-ce.0

参数说明

  • –detach 设置容器后台运行
  • –publish 暴露 https、http和ssh端口,关于端口下文会细说
  • –name 容器名称
  • –restart always 每次启动容器就重启GitLab
  • –volume 设置GitLab数据挂载点

第一次启动容器会很慢,需要三分钟左右。可以随时通过docker ps 查看启动进度。当STATUSstarting变为health时,就说明启动成功了。

5. 配置GitLab

现在就可以通过地址:http://IP:8000访问GitLab,但是为了正常使用,我们还需要配置GitLab。
我们需要修改三个参数:

  • external_url
  • ssh 端口
  • nginx监听端口

GitLab的配置文件在我们外挂的磁盘下/gitlab/config/gitlab.rb

修改external_url

sudo vim /gitlab/config/gitlab.rb
# 可以通过`/`搜索需要修改的参数
external_url 'http://IP:8000'   # IP填写GitLab部署的服务器的IP

修改ssh端口

如果不修改ssh的端口,clone和提交代码时一直需要输入密码。
因为通过ssh链接gitlab时默认访问的是22端口,但是使用docker部署,22端口在宿主机一直被占用,所以映射为2222端口,需要修改gitlab配置文件

### GitLab Shell settings for GitLab
gitlab_rails['gitlab_shell_ssh_port'] = 2222
# gitlab_rails['gitlab_shell_git_timeout'] = 800

修改nginx监听的端口

nginx['listen_port'] = 80

更多与端口相关的知识参考GitLab CE 搭建小结 external_url 设置修改 ssh 端口的内容

到此时,我们就完成了通过Docker方式安装GitLab的所有工作,重启容器即可使用

#重启容器
docker restart gitlab

6. 访问页面

GitLab的访问地址是:http://IP:8000/。第一次访问会让用户修改密码,修改成功后就可以通过账号(root)和该密码登录GitLab。

当然为了正常使用GitLab,添加SSH公钥是必须的。GitLab的使用方式和GitHub基本一致,不熟悉的朋友可以自行搜索教程

BUG

1. 容器启动失败

有可能是服务器配置太低

2. 克隆项目和上传代码一直需要输入密码

没有修改GitLab的ssh端口,具体操作可以看上文 配置GitLab

运维

重启gitlab

sudo docker restart gitlab

查看gitlab启动状态

sudo docker ps

升级GitLab

查看GitHub上的开源项目GitLab 中文社区版 Docker 镜像

参考资料