Gitlab docker版本安装

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部署已经完成

测试
  1. 测试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的账号密码
  1. 测试克隆代码是否成功
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证书(仅测试用)

域名为测试域名gitlab.example.com

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
相关推荐
打工仔折腾 AI1 小时前
Docker镜像分层与卷挂载到底怎么工作:一次文件系统层面的实测分析
运维·人工智能·后端·python·docker·容器·性能优化
极客先躯2 小时前
高级java每日一道面试题-2026年01月20日-实战篇[Docker]-如何实现镜像的跨区域复制?
java·运维·docker·容器·架构图
紫神6 小时前
DDS 通信技术说明
网络·云原生·容器·k8s·dds·弱网
java_logo7 小时前
Docker 部署 DeepSeek Harness:轻松搭建局域网里的 AI Agent 平台
运维·docker·容器·ai agent·deepseek·轩辕镜像·deepseekharness
我不会起名字3228 小时前
Redis 入门(一):Redis 是什么,为什么后端都离不开它
linux·redis·docker·安装·cli
麦壳饼8 小时前
Docker 快速上手:5 分钟运行 SonnetDB
数据库·docker·sonnetdb
吴声子夜歌8 小时前
Docker入门与实战——操作Docker容器
docker
xrlfreedom8 小时前
MCP 面试高频考点:用 Docker 与 Resources 沉淀可复用 Prompts 工作流,怎么答才落地
docker·resources·mcp
九章-悲回风9 小时前
Linux - Docker及常用镜像部署
linux·运维·docker
安易算力9 小时前
GPU集群调度实践:Slurm/K8s混合部署与GPU共享优化 —— 从批处理到在线推理的统一调度架构
容器·架构·kubernetes