系统为centos 7
[root@gitlab ~]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
安装docker ce引擎
[root@gitlab ~]# yum install -y yum-utils
[root@gitlab ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[root@gitlab ~]# yum list docker-ce --showduplicates # 列出相应软件包可安装的所有的版本
[root@gitlab ~]# yum -y install docker-ce-19.03.15 docker-ce-cli-19.03.15 # 安装指定版本的docker-ce,不必追求最新的版本
# 配置docker镜像加速,镜像加速地址登陆自己的aliyun帐号获取
[root@gitlab ~]# mkdir /etc/docker
[root@gitlab ~]# tee /etc/docker/daemon.json <<-‘EOF‘
{
"registry-mirrors": ["https://gja93w4p.mirror.aliyuncs.com"]
}
EOF
[root@gitlab ~]# systemctl enable docker
[root@gitlab ~]# systemctl start docker
[root@gitlab ~]# docker info | grep Version
Server Version: 19.03.15
Kernel Version: 3.10.0-1127.el7.x86_64
[root@gitlab ~]# docker -v
Docker version 19.03.15, build 99e3ed8919
安装docker-compose
# 使用docker官方的安装地址奇慢,请更换为daocloud的地址
[root@gitlab ~]# curl -L "https://get.daocloud.io/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
[root@gitlab ~]# chmod +x /usr/local/bin/docker-compose
[root@gitlab ~]# docker-compose -v
docker-compose version 1.28.5, build c4eb3a1f
准备docker-compose文件
# 先创建容器挂载到本地的目录
[root@gitlab ~]# mkdirp -pv /gitlab-data/{config,logs,data}
# 准备域名证书文件及客户端认证的CA证书
[root@gitlab gitlab]# ls -al /gitlab-data/config/ssl/
总用量 16
drwxr-xr-x 2 root root 86 3月 24 15:52 .
drwxrwxr-x 4 root root 250 3月 24 15:11 ..
-rw-r--r-- 1 root root 1675 3月 24 15:11 3741491__mygitlab.cn.key
-rw-r--r-- 1 root root 5558 3月 24 15:11 3741491__mygitlab.cn.pem
-rw-r--r-- 1 root root 1326 3月 24 15:11 cacert.pem
# docker-compose文件
[root@gitlab gitlab]# pwd
/root/gitlab
[root@gitlab gitlab]# cat docker-compose.yml
version: ‘3.9‘
services:
gitlab_server:
image: ‘gitlab/gitlab-ce:13.10.0-ce.0‘
restart: always
hostname: ‘mygitlab‘
container_name: gitlab # 容器的名称
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url ‘https://abd.mygitlab.cn‘
gitlab_rails[‘gitlab_shell_ssh_port‘] = 5022 # 因22为宿主机的ssh端口,冲突了
nginx[‘enable‘] = true
nginx[‘client_max_body_size‘] = ‘250m‘
nginx[‘redirect_http_to_https‘] = true
nginx[‘redirect_http_to_https_port‘] = 80
gitlab_rails[‘time_zone‘] = ‘Asia/Shanghai‘ # 可设置为‘PRC‘
nginx[‘ssl_certificate‘] = "/etc/gitlab/ssl/xxxxxxxxx.pem" # 域名的证书
nginx[‘ssl_certificate_key‘] = "/etc/gitlab/ssl/xxxxxxxxx.key" # 域名的私钥
nginx[‘ssl_ciphers‘] = "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256"
nginx[‘ssl_prefer_server_ciphers‘] = "on"
nginx[‘ssl_protocols‘] = "TLSv1.2 TLSv1.3"
nginx[‘http2_enabled‘] = true
nginx[‘proxy_set_headers‘] = {
"X-Forwarded-Proto" => "http"
}
nginx[‘ssl_client_certificate‘] = "/etc/gitlab/ssl/cacert.pem" # 客户端验证CA的证书
nginx[‘ssl_verify_client‘] = "on" # 启用客户端认证
unicorn[‘worker_processes‘] = 4 # 进程数,与想使用的cpu核心数相同
unicorn[‘worker_timeout‘] = 60
gitlab_rails[‘gitlab_email_enabled‘] = true # 开启邮件功能
gitlab_rails[‘gitlab_email_from‘] = ‘419775240@qq.com‘
gitlab_rails[‘gitlab_email_display_name‘] = ‘GitlabAdmin‘ # 发件人的显示名称
gitlab_rails[‘gitlab_email_reply_to‘] = ‘419775240@qq.com‘
gitlab_rails[‘smtp_enable‘] = true # 配置smtp邮件服务
gitlab_rails[‘smtp_address‘] = ‘smtp.qq.com‘
gitlab_rails[‘smtp_port‘] = 465
gitlab_rails[‘smtp_user_name‘] = ‘419775240@qq.com‘ # 与 gitlab_email_from相同
gitlab_rails[‘smtp_password‘] = ‘xxxxxxxxx‘ # 这里是授权码,不是邮箱的密码
gitlab_rails[‘smtp_domain‘] = ‘pop.qq.com‘
gitlab_rails[‘smtp_authentication‘] = ‘login‘
gitlab_rails[‘smtp_enable_starttls_auto‘] = true
gitlab_rails[‘smtp_tls‘] = true
mem_limit: 4096m
ports:
- ‘80:80‘
- ‘443:443‘
- ‘5022:22‘
volumes:
- ‘/gitlab-data/config:/etc/gitlab‘
- ‘/gitlab-data/logs:/var/log/gitlab‘
- ‘/gitlab-data/data:/var/opt/gitlab‘
networks:
- gitlab
networks:
gitlab:
driver: bridge
Docker-compose文件说明:
gitlab镜像选择时建议不要直接使用gitlab/gitlab-ce:latest
,可以先在dockerhub上搜索gitlab
关键字,找到官方的镜像,再找到相应的tags,选择当前最新的tag作为使用的镜像,这样比较明确使用了哪个版本的的镜像。
GITLAB_OMNIBUS_CONFIG此环境变量可接收/etc/gitlab/gitlab.rb
这个配置文件中的所有配置项,这里启用了站点的https访问,如果自建的gitlab站点是开放在公网上的,启用ssl_verify_client
客户端证书认证可以增加安全性,事例中还启用了邮件通知功能。
先pull相应的镜像,如果拉取速度特别慢,那需要找个***
[root@gitlab gitlab]# docker pull gitlab/gitlab-ce:13.10.0-ce.0
先前台启动服务,观察是否有错误,如果没问题了再加-d
参数让其运行在后台
[root@gitlab gitlab]# docker-compose -f docker-compose.yml up
gitlab容器启动后需要做初始化操作,可能会花费几分钟的时间。
运行完毕后,系统会拉起一个名称为gitlab
的容器
[root@gitlab gitlab]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
29c8fd8dc58d gitlab/gitlab-ce:13.10.0-ce.0 "/assets/wrapper" 6 minutes ago Up 6 minutes (unhealthy) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:5022->22/tcp gitlab
该容器使用了一个指定的网桥设备
[root@gitlab gitlab]# docker network ls
NETWORK ID NAME DRIVER SCOPE
036cea02883b bridge bridge local
f3bcb46a7e88 gitlab_gitlab bridge local
3100bef0ee7f host host local
71bce7290f94 none null local
该网桥设备是自动创建的,docker-compose.yml上级目录名称gitlab
与容器名称使用_
进行连接来命名网桥的名称,如上的gitlab_gitlab
因启用了客户端认证,所以需要获取相应自建CA的颁发的客户端证书,并导入到客户端系统,若没有客户端证书使用浏览器打开时会报以下错误,
导入证书后,再次打开会要求修改密码,并且默认状态下系统开启了注册功能,如下图:
设置好密码后,可以使用默认用root
进行登陆。默认是英文界面,可以切换为中文,切换操作如下:
保存后退出登陆,在登陆界面的注册链接被关闭了。
GitLab的官方帮助信息非常完善,地址为:https://docs.gitlab.com/ ,如果访问该站点有困难时,可以在我们部署的系统中访问帮助信息,地址为:http(s)://域名/help/ ,如:https://abd.mygitlab.cn/help
参考:
GitLab Docker images:https://docs.gitlab.com/omnibus/docker/README.html
Nginx配置:https://docs.gitlab.com/omnibus/settings/nginx.html
原文:https://blog.51cto.com/zhaochj/2704315