centos7下docker gitlab(一)安装

1,372 阅读4分钟

1、镜像

docker pull gitlab/gitlab-ce

ce为个人版,不带版本号为最新版

2、目录

mkdir -p /srv/gitlab/config
mkdir -p /srv/gitlab/logs 
mkdir -p /srv/gitlab/data
mkdir -p /srv/gitlab/cert

通常会将 GitLab 的配置 (etc) 、 日志 (log) 、数据 (data) 放到容器之外, 便于日后重启、动态添加端口、升级, 因此请先准备这四个目录。/srv/gitlab/cert为证书需要,后边开启container register会用到。

3、运行

docker run --detach \
  --hostname gitlab.example.com \
  --publish 8443:443 --publish 8880:80 --publish 8222:22 --publish 4567:4567 \
  --name gitlab \
  --restart always \
  --volume /srv/gitlab/config:/etc/gitlab \
  --volume /srv/gitlab/logs:/var/log/gitlab \
  --volume /srv/gitlab/data:/var/opt/gitlab \
  --volume /srv/gitlab/cert:/etc/gitlab/ssl \
  --volume /srv/gitlab/registry:/var/opt/gitlab/gitlab-rails/shared/registry \
  --privileged=true \
  gitlab/gitlab-ce:latest

说明:

--hostname gitlab.example.com 设置主机名或域名,换成你自己的,可通过该域名访问gitlab
--publish 8443:443 将http:443映射到外部端口8443
--publish 8880:80 将web:80映射到外部端口8880
--publish 8222:22 将ssh:22映射到外部端口8222
--publish 4567:4567 开启container register使用的端口,后边详细说明
--name gitlab: 运行容器名
--restart always 自动重启,重要
--volume /srv/gitlab/config:/etc/gitlab 挂载目录
--volume /srv/gitlab/logs:/var/log/gitlab 挂载目录
--volume /srv/gitlab/data:/var/opt/gitlab 挂载目录
--volume /srv/gitlab/cert:/etc/gitlab/ssl 数字证书挂载目录
--volume /srv/gitlab/registry:/var/opt/gitlab/gitlab-rails/shared/registry 镜像仓库挂载目录 --privileged=true: 使得容器内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限

启动完成后,看下运行情况 docker ps -a,状态可为health: starting,等一会就可以访问了,unhealth状态为不健康状态,可查看日志。

4、配置nginx以便直接使用域名访问

cat > /etc/nginx/conf.d/gitlab.example.com.conf <<EOF
upstream gitlab{
    server 127.0.0.1:8880;
}

server {
    listen 80;
    server_name  gitlab.example.com;
    access_log     /var/log/nginx/gitlab.example.com-access.log;
    error_log     /var/log/nginx/gitlab.example.com-error.log;
    location / {
        proxy_pass_header Server;
        proxy_set_header Host \$http_host;
        proxy_set_header X-Real-IP \$remote_addr;
        proxy_set_header X-Scheme \$scheme;
        proxy_pass http://gitlab;
    }
}
EOF

nginx重启配置生效后,浏览器访问http://gitlab.example.com 即可正常访问。
首次访问需要为root用户设置密码,设置完成后需要登录,默认用户名为:root, 密码为刚刚设置的密码。

5、配置邮件服务器

想要让 GitLab 给你发送邮件,还要配置一下邮件服务器,这里以QQ邮箱的 IMAP/SMTP服务 来配置。
打开邮箱->设置->账户,然后开启 IMAP/SMTP服务,然后根据文档获取 授权码 ,这步比较重要。
然后跳转至挂载目录 vi /srv/gitlab/config/gitlab.rb 文件,找到 Email Settings的注释位置,然后修改以下内容:

### Email Settings
gitlab_rails['smtp_enable'] = true # 开启 SMTP 功能
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465 # 端口不可以选择587,测试过会发送邮件失败
gitlab_rails['smtp_user_name'] = "test@qq.com" # 你的邮箱账号
gitlab_rails['smtp_password'] = "1324dasd" # 授权码,不是密码
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = 'test@qq.com' # 发件人信息,必须跟‘smtp_user_name’保持一致,否则报错
gitlab_rails['smtp_domain'] = "qq.com" # 修改并不影响 

配置完成后保存,然后输入下面的命令使配置生效。以后有任何配置文件更改,都可执行以下语句。

docker exec gitlab gitlab-ctl reconfigure

使配置生效之后我们可以使用 gitlab 自带的工具进行一下测试。依次执行下面的命令:

# 开启 gitlab 的 bash 工具
$ docker exec -it gitlab bash

# 开启 gitlab-rails 工具
$ gitlab-rails console production

# 发送邮件进行测试
Notify.test_email('test_001@123.com', 'Message Subject', 'Message Body').deliver_now`

测试完成之后退出gitlab的bash工具,重启 gitlab 即可。

docker restart gitlab

6、配置 Git 仓库访问路径

在之前第一次运行 gitlab 容器的时候,有一个参数 hostname 为 gitlab.example.com, 如果配置了域名可以忽略这一步,如果你没有配置相应域名的话,你的仓库的地址将会变为下面这样:

ssh: git@gitlab.example.com:test/test.git
http: gitlab.example.com/test/test.git

如果域名不存在的话,这个地址是无法进行 clone 的。
为了解决这个问题,我们可以设置成 IP 或 你配置了的域名来访问。
打开文件 /srv/gitlab/config/gitlab.rb 文件并找到external_url 'GENERATED_EXTERNAL_URL
这行,去掉注释,并按照下面的格式修改。

# ip 形式
external_url 'http://192.168.1.44'

# 域名形式
external_url 'http://JemGeek.com'

# 子域名
external_url 'http://gitlab.JemGeek.com'

# 其他形式
external_url 'http://JemGeek.com/gitlab'

找到gitlab_rails['gitlab_shell_ssh_port']设置(很重要)

gitlab_rails['gitlab_shell_ssh_port'] = 8222

以上形式都是可以的。修改完成后,输入命令: docker exec gitlab gitlab-ctl reconfigure

7、升级

docker stop gitlab
docker rm gitlab
docker pull gitlab/gitlab-ce
docker run --detach \
  --hostname gitlab.example.com \
  --publish 8443:443 --publish 8880:80 --publish 8222:22 --publish 4567:4567 \
  --name gitlab \
  --restart always \
  --volume /srv/gitlab/config:/etc/gitlab \
  --volume /srv/gitlab/logs:/var/log/gitlab \
  --volume /srv/gitlab/data:/var/opt/gitlab \
  --volume /srv/gitlab/cert:/etc/gitlab/ssl \
  --volume /srv/gitlab/registry:/var/opt/gitlab/gitlab-rails/shared/registry \
  --privileged=true \
  gitlab/gitlab-ce:latest

=========================== 以上为域名访问部分 ==================================

如果是ip访问,那么直接

docker run --detach \
  --hostname gitlab.example.com \
  --publish 8443:443 --publish 8880:8880 --publish 8222:22 --publish 4567:4567 \
  --name gitlab \
  --restart always \
  --volume /srv/gitlab/config:/etc/gitlab \
  --volume /srv/gitlab/logs:/var/log/gitlab \
  --volume /srv/gitlab/data:/var/opt/gitlab \
  --volume /srv/gitlab/cert:/etc/gitlab/ssl \
  --volume /srv/gitlab/registry:/var/opt/gitlab/gitlab-rails/shared/registry \
  --privileged=true \
  gitlab/gitlab-ce:latest

注意点:

8880:8880,是指主机和gitlab的nginx 端口,你必须要保证他们一样,因为你需要用前一个8880用浏览器访问的gitlab,而内部的8880才是真正访问git仓库的地方。

以上才能对应上。 然后必须修改:

external_url 'http://192.168.1.44:8880'

该8880是后边的8880。然后

docker exec gitlab gitlab-ctl reconfigure