docker 新建Gitlab容器并配置运行
下载离线镜像
在有网的电脑上拉取镜像
bash
#在有网的电脑上拉取镜像
docker pull gitlab/gitlab-ce:19.2.0-ce.0
#打包成压缩包
docker save -o gitlab-ce-19.2.0.tar gitlab/gitlab-ce:19.2.0-ce.0
#压缩包传到另一台离线电脑,将其导入
docker load -i gitlab-ce-19.2.0.tar
创建镜像前准备
端口
Gitlab需要开放80、443、22端口
80:http默认管理页面
443:https默认管理页面端口
22 :使用ssh方式进行clone、push使用,如git@gitlab.example.com:group/repo.git走的端口
可以映射到7779端口
目录挂载
/etc/gitlab 配置文件(包含SSL证书)
/var/log/gitlab 日志文件
/var/opt/gitlab 数据持久化目录
统一挂载到/container_data/gitlab的config log data目录下
防火墙配置、创建挂载目录、初始化容器并挂载
bash
#!/bin/bash
#宿主机放行防火墙端口
firewall-cmd --permanent --add-port=7777/tcp
firewall-cmd --permanent --add-port=7778/tcp
firewall-cmd --permanent --add-port=7779/tcp
firewall-cmd --reload
#验证
firewall-cmd --list-ports
#创建挂载目录
mkdir -p /container_data/gitlab/{config,logs,data}
#创建虚拟机
docker run -d \
--name gitlab \
--restart always \
-p 80:80 \
-p 443:443 \
-p 7779:22 \
-v /container_data/gitlab/config:/etc/gitlab \
-v /container_data/gitlab/logs:/var/log/gitlab \
-v /container_data/gitlab/data:/var/opt/gitlab \
--shm-size 256m \
gitlab/gitlab-ce:19.2.0-ce.0
等待几分钟Gitlab初始化
获取初始root密码
可以进容器拿,也可以在挂载目录拿
bash
#进容器
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
#从挂载目录
grep 'Password:' /container_data/gitlab/config/initial_root_password
启动后可以直接访问IP访问到管理界面,
但仓库内配置的默认地址依然为容器名,需要更改
需要进入配置文件配置Gitlab
配置Gitlab
配置通过HTTP、SSH访问
bash
cat >> /container_data/gitlab/config/gitlab.rb <<'EOF'
#设置默认http管理端口(仓库配置页面显示的那个),可以写IP也可以写域名
#默认端口80,如果更改映射需要同步改如7777:7777,默认80:80
external_url 'http://10.12.3.161'
#默认为80不用配置,需要修改端口时配置
#nginx['listen_port'] = 80
#不写gitlab_ssh_host也可以,它会自动从external_url自动获取到IP地址和域名
#gitlab_rails['gitlab_ssh_host'] = '10.12.3.161'
#在物理机上需要同步改机器的ssh端口和gitlab的ssh端口,在容器中采用映射的方式7779:22
#这里的ssh port设置不是在容器内部改到7779,容器内部仍为22,但是仓库界面配置会显示7779
#实际访问使用7779访问
gitlab_rails['gitlab_shell_ssh_port'] = 7779
gitlab_rails['time_zone'] = 'Asia/Shanghai'
EOF
#如果是在物理机部署需要reconfigure
#docker部署时直接重启容器也可以,进入容器recongigure也可以
#docker exec -it gitlab gitlab-ctl reconfigure
#修改配置后直接重启容器,它会自动重新配置
docker restart gitlab
此时Gitlab部署已经完成
测试
- 测试push代码是否成功
bash
#在gitlab新建一个项目
ssh推送链接
ssh://git@10.12.3.161:7779/my_group1/my_project2.git
#测试ssh push代码
git init
touch 1.txt
git add .
git commit -m "first commit"
git remote add origin ssh://git@10.12.3.161:7779/my_group1/my_project2.git
git push origin master
#测试http push212
git remote set-url origin http://10.12.3.161/my_group1/my_project2.git
git push origin master
#需要输入gitlab的账号密码
- 测试克隆代码是否成功
bash
#ssh方式
git clone ssh://git@10.12.3.161:7779/my_group1/my_project2.git
#http方式
git clone http://10.12.3.161/my_group1/my_project2.git
可选
设置https
1.生成自签名SSL证书(仅测试用)
bash
#证书放在容器的/etc/gitlab/ssl目录下,需要创建ssl文件夹
#映射过来是/container_data/gitlab/config/ssl
#1.创建目录存储,私钥和公钥分开,private下存放私钥,其他存放在公开
mkdir -p /container_data/gitlab/config/ssl/{private,certs}
#生成私钥(输出是nginx-selfsigned.key私钥文件)
openssl genpkey -algorithm RSA -out /container_data/gitlab/config/ssl/private/nginx-selfsigned.key -pkeyopt rsa_keygen_bits:2048
#生成CSR签名请求(输出是nginx-selfsigned.csr公钥)
openssl req -new -key /container_data/gitlab/config/ssl/private/nginx-selfsigned.key -out /container_data/gitlab/config/ssl/certs/nginx-selfsigned.csr
#Common Name (eg, your name or your server's hostname) []写 gitlab.example.com,其他不填
#自签名生成证书(过期365天,输出是nginx-selfsigned.crt证书)
openssl x509 -req -days 365 -in /container_data/gitlab/config/ssl/certs/nginx-selfsigned.csr -signkey /container_data/gitlab/config/ssl/private/nginx-selfsigned.key -out /container_data/gitlab/config/ssl/certs/nginx-selfsigned.crt
key 放在private文件夹下,csr和crt放在certs文件夹下
2.更改Gitlab配置
https默认443端口
bash
vim /container_data/gitlab/config/gitlab.rb
#改为从http改为https域名
external_url 'https://gitlab.example.com'
#如果前面external_url写了https,listen_https这里可以不写
nginx['listen_https'] = true
#80重定向到443打开
nginx['redirect_http_to_https'] = true
#指定crt和key的位置,注意是docker容器内的绝对路径
nginx['client_max_body_size'] = '2048m'
nginx['ssl_certificate'] = "/etc/gitlab/ssl/certs/nginx-selfsigned.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/private/nginx-selfsigned.key"
#修改ssh端口(可选)
gitlab_rails['gitlab_shell_ssh_port'] = 7779
gitlab_rails['time_zone'] = 'Asia/Shanghai'
https修改端口,443:443改为7778:7778
容器设置
bash
#创建虚拟机
docker run -d \
--name gitlab \
--restart always \
-p 80:80 \
-p 7778:7778 \
-p 7779:22 \
-v /container_data/gitlab/config:/etc/gitlab \
-v /container_data/gitlab/logs:/var/log/gitlab \
-v /container_data/gitlab/data:/var/opt/gitlab \
--shm-size 256m \
gitlab/gitlab-ce:19.2.0-ce.0
Gitlab设置
bash
vim /container_data/gitlab/config/gitlab.rb
#改为从http改为https域名
external_url 'https://gitlab.example.com:7778'
#如果前面external_url写了https,listen_https这里可以不写
nginx['listen_https'] = true
nginx['https_port'] = 7778
nginx['client_max_body_size'] = '2048m'
#80重定向到443打开
nginx['redirect_http_to_https'] = true
#指定crt和key的位置,注意是docker容器内的绝对路径
nginx['ssl_certificate'] = "/etc/gitlab/ssl/certs/nginx-selfsigned.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/private/nginx-selfsigned.key"
#修改ssh端口(可选)
gitlab_rails['gitlab_shell_ssh_port'] = 7779
gitlab_rails['time_zone'] = 'Asia/Shanghai'
客户端配置host文件
bash
windows
C:\Windows\System32\drivers\etc 下host文件
10.12.3.161 gitlab.example.com