在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
查看启动进度。当STATUS
由starting
变为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 镜像
参考资料
- beginor/docker-gitlab-ce_GitHub
- GitLab CE 搭建小结 : 很详细,文末还介绍了写GitLab的使用技巧
- 以容器的方式运行GitLab
- 用Docker安装Gitlab
- docker镜像搭建gitlab服务