使用docker构建Gitlab

2,900 阅读5分钟

gitlab功能比较庞大,所占用资源也很多,建议放在资源好一点的服务器,虚拟机运行4GB+,遇到问题可直接看最后面,可能会有所帮助

特性

  • 使用docker-compose构建
  • 使用docker的方式进行构建,基于gitlab-ce社区版搭建(可根据需要获取ee版)
  • 使用nginx做一层反向代理,最终通过一个二级域名的方式可直达gitlab

最终的目的是使用二级域名,直接映射过去

# 本地资源
192.168.204.138 -> 服务器
二级域名 gitlab.vm.com -> 192.168.204.138 (此处是本机做了个hosts)

# 映射关系
服务器中:7080 -> gitlab-docker:80
服务器中:7443 -> gitlab-docker:443 (后面没有使用)
服务器中:7022 -> gitlab-docker:22 (用于ssh连方式)

# 访问关系
192.168.204.138:7080 -> gitlab-docker
gitlab.vm.com:7080 -> gitlab-docker

# 最终使用nginx做一层反向代理
gitlab.vm.com -> gitlab-docker

安装docker

curl https://get.docker.com/ > install-docker.sh # 下载安装脚本

sh install-docker.sh # 执行安装脚本

# 修改docker阿里源(此处是我的docker源,可以去阿里云免费获取自己专属的加速器源)
vim /etc/docker/daemon.json

# daemon.json
{
  "registry-mirrors": ["https://brnzp166.mirror.aliyuncs.com"]
}

设置开机自启动systemctl enable docker

安装docker-compose(基于国内镜像)

# 下载docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

# 赋予权限
chmod +x /usr/local/bin/docker-compose

设置外部目录

由于是docker镜像运行, 所以我们需要把gitlab的配置, 数据, 日志存到容器外面, 即将其挂载到宿主机。

mkdir -p /home/software/gitlab/etc
mkdir -p /home/software/gitlab/logs
mkdir -p /home/software/gitlab/data

制作docker-compose.yml文件

由于使用了docker-compose帮助我们部署,所以不需要进行拉取镜像等,他会自动帮我们执行

找一个目录存放docker-compose.yml文件,这里使用/home/software/gitlab目录

  1. 新建文件
cd /home/software/gitlab

vim docker-compose.yml
  1. 编辑docker-compose.yml文件内容,如有要求可自行修改对应目录
# docker-compose.yml

gitlab:
  image: 'gitlab/gitlab-ce:latest'
  restart: unless-stopped
  hostname: 'gitlab.vm.com' # 最终暴露出去的host
  environment:
    GITLAB_OMNIBUS_CONFIG: |

      # 外部可以访问到gitlab的url
      external_url 'http://gitlab.vm.com' 
      
      # ssh相关(注意可能会和ssh连接工具端口冲突)
      gitlab_rails['gitlab_ssh_host'] = 'gitlab.vm.com'
      gitlab_rails['gitlab_shell_ssh_port'] = 7022

      # email相关
      gitlab_rails['smtp_enable'] = true
      gitlab_rails['smtp_address'] = "smtp.163.com" # smtp服务器地址
      gitlab_rails['smtp_port'] = 465
      gitlab_rails['smtp_user_name'] = "123456@163.com" # 发送邮件的邮箱
      gitlab_rails['smtp_password'] = "授权码"     # 邮箱的授权码
      gitlab_rails['smtp_domain'] = "smtp.163.com"
      gitlab_rails['smtp_authentication'] = "login"
      gitlab_rails['smtp_enable_starttls_auto'] = true
      gitlab_rails['smtp_tls'] = true 
      gitlab_rails['gitlab_email_from'] = '123456@163.com' # 发送邮件的邮箱
  ports:
    - '7080:80'
    - '7443:443'
    - '7022:22'
  volumes:
    - '/home/software/gitlab/etc:/etc/gitlab'
    - '/home/software/gitlab/logs:/var/log/gitlab'
    - '/home/software/gitlab/data:/var/opt/gitlab'

检测配置成功

运行docekr

切换到刚刚的docker-compose.yml文件存在的地址(此时是在/home/software/gitlab)

cd /home/software/gitlab

# 后台运行docker
docker-compose up -d

使用docker ps查看当前docker的运行状况,等待gitlab的状态为(healthy/unhealthy,约5分钟左右),也即打包完毕后,访问192.168.204.138:7080,如果可以看到欢迎界面,恭喜你,搭建就成功了

以后直接切换去docker-compose.yml文件存在的地址,使用docker-compose up -d即可重启,并且上文设置了docker开机自启。

此时设置的密码为root账户,即以后用户名为root的账户,超级管理员

可点击头像框 settings -> preferences -> language 切换为中文

测试邮箱服务

修改完成后,进入到另一个终端中,进入gitlab-docker内

# 获取到gitlab服务的containerID
docker ps

# 进入docker容器内
docker exec -it <containerID> /bin/bash

# 测试邮箱是否完成
gitlab-rails console     # 进入邮件控制台, 稍等一会才能进入
Notify.test_email('test_another@qq.com', 'Message Subject', 'Message Body').deliver_now

使用nginx反向代理

反向代理说通俗就是,你去访问192.168.204.138的时候,服务器趁你不知道安排了192.168.204.138:7080给你服务,此时是后台服务器,通过一个中间商,给你服务。

使用yum安装nginx

# 下载对应当前系统版本的nginx包(package)
wget  http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm  

# 建立nginx的yum仓库
rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm  

# 根据/etc/yum.repos.d/nginx.repo中的信息下载安装nginx
yum install nginx   

# 启动nginx服务
systemctl start nginx 

# 开机自启nginx服务
systemctl enable nginx 

配置反向代理

使用此种方式安装的nginx,配置文件是较为分散的,可以使用whereis nginx查看

# 进入到nginx配置目录
cd /etc/nginx/conf.d

# 增加一个针对gitlab的proxy, 一定要为*.conf, 查看 /etc/nginx/nginx.conf 就懂了
vim proxy_gitlab.conf

# 我的反向代理,gitlab.vm.com:80 -> http:127.0.0.1:7080
# 即docker映射出的gitlab 目录
server {
  listen 80;
  server_name gitlab.vm.com;

  location / {
    proxy_pass http://127.0.0.1:7080;
  }
}

重启nginx服务systemctl restart nginx

访问即可http://gitlab.vm.com

可能出现的问题

SELINUX(针对反向代理)

linux安全模块,此处直接关闭(不推荐这种做法,可以去找selinux较好的解决方案)

vim /etc/sysconfig/selinux

SELINUX=disabled

firewalld

由于防火墙的存在,可能造成浏览器一直转圈的状况

本地虚拟机,直接关闭(不推荐,可以去找firewalld较好的解决方案)

systemctl stop firewalld   # 关闭防火墙

systemctl disable firewalld   # 永久关闭(当然也不推荐啦)

gitlab-docker无限重启

可能是配置出了问题,之前配置extends_url出现这种状况,所以此时并未在进行过配置

可以切换进去(此处gitlab-docker的name就叫gitlab,也可以替换为<containerID>docker ps -a即可查看),查看哪里出了问题

docker container logs gitlab

nginx服务器启动异常

nginx服务启动说权限的问题,此处可能是修改了SELINUX导致的问题,可以先将selinux切换回之前的模式,重启后,待nginx可正常启动后,重启在修改SELINUX即可

爆内存

因为gitlab对设备的还是有一定要求的gitlab硬件要求

如果卡慢的话,可以试一试增加虚拟内存

# 4GB虚拟内存
dd if=/dev/zero of=/home/swap bs=1024 count=4194304

# 格式化分区
mkswap /home/swap

# 开启swap分区(关闭swap分区 swapoff /home/swap)
swapon /home/swap

# 挂载分区
vim /etc/fstab

/home/swap swap swap default 0 0

参考

docker方式构建gitlab(官方文档)

云服务器增加swap分区