部署Gitlab-CE with Docker私有云环境

news2025/6/7 12:14:42

应用环境
Ubuntu 20.04.6 LTS (GNU/Linux 5.15.0-139-generic x86_64)
Docker version 28.1.1, build 4eba377

文章目录

    • 拉取容器镜像
    • 生成Run脚本
      • 参数解读
      • 实例脚本
      • 环境配置
      • 管理员密码遗忘
      • 服务邮箱配置
        • 邮件测试
    • 运维问题集锦
      • (1) 端口映射关系
      • (2) 服务日志
      • (3) 分支受保护
    • 项目操作
      • (1) 建立群组
      • (2) 创建项目
      • (3) 项目的版本控制

拉取容器镜像

sudo apt-get update

## gitlab-ce:17.9.6-ce.0
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/gitlab/gitlab-ce:17.9.6-ce.0

## gitlab-ce:17.10.4-ce.0
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/gitlab/gitlab-ce:17.10.4-ce.0
## 添加标签名Tag
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/gitlab/gitlab-ce:17.10.4-ce.0 docker.io/gitlab/gitlab-ce:17.10.4-ce.0
## 移除标签名Tag
docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/gitlab/gitlab-ce:17.10.4-ce.0

国内镜像参考:
渡渡鸟镜像
清华大学开源软件镜像

生成Run脚本

可参考:渡渡鸟-Run助手

参数解读

# 将镜像进实例化成容器并运行
docker run

# 【i】保持STDIN(标准输入)开放,即使没有附加任何东西。这通常用于让容器的进程保持运行,即使没有附加到终端。例如,你可以在容器内部运行一个交互式shell
# 【t】分配一个伪终端(pseudo-TTY),这对于交互式shell非常重要,比如当你想要在容器中运行bash或sh时。
# 【d】后台运行,即所谓的“detached”模式。容器会在后台启动,并且你会得到容器的ID或名称
-itd

# 容器命名
--name gitlab-ce

# 重启策略
## no:不自动重启,缺省时默认
## always:始终重启
## unless-stopped:Docker 服务重启后自动启动容器,除非容器被手动停止。可指定最大重试次数,例如 --restart=on-failure:3(最多重启3次)。
## on-failure:仅在容器非正常退出(退出状态码非0)时重启。
--restart=always \

# 【p】映射策略,<宿主端口>:<容器端口>
## 比如gitlab,22为ssh协议;80为http协议;443为https协议
-p 1022:22 \
-p 81:80 \
-p 10443:443 \

# 使用本地时区
-e TimeZone='Asia/Shanghai' \
-e TZ='Asia/Shanghai' \
-v /etc/localtime:/etc/localtime \

# Host域名映射
--add-host=gitlab.oh.com:172.10.3.200 \

# 挂载卷映射(宿主:容器)
## /etc/gitlab:配置文件
## /var/log/gitlab:日志数据
## /var/opt/gitlab:应用数据
-v /gitlab-ce/config:/etc/gitlab  \
-v /gitlab-ce/logs:/var/log/gitlab \
-v /gitlab-ce/data:/var/opt/gitlab \

# 让容器获取宿主机root权限
--privileged=true \

# 最后一行所引用的docker镜像源

实例脚本

建议http服务,不要使用默认的80端口。很容易与其它docker容器服务或宿主机其它服务冲突,比如宿主机安装的nginx、apache服务。

docker run -itd \
--name gitlab-ce \
--restart=always \
-p 1022:22 \
-p 81:80 \
-p 10443:443 \
-e TimeZone='Asia/Shanghai' \
-e TZ='Asia/Shanghai' \
-v /etc/localtime:/etc/localtime \
-v /gitlab-ce/config:/etc/gitlab  \
-v /gitlab-ce/logs:/var/log/gitlab \
-v /gitlab-ce/data:/var/opt/gitlab \
--privileged=true \
docker.io/gitlab/gitlab-ce:17.10.4-ce.0

环境配置

# 打开配置文件
sudo vim /gitlab-ce/config/gitlab.rb

编辑内容如下

## GitLab URL
external_url 'http://192.168.1.50'

## GitLab SSH
gitlab_rails['gitlab_ssh_host'] = '192.168.1.50'
gitlab_rails['time_zone'] = 'Asia/Shanghai'

### GitLab Shell settings for GitLab
gitlab_rails['gitlab_shell_ssh_port'] = 1022
# gitlab_rails['gitlab_shell_git_timeout'] = 800

输入:wq保存退出后,进入Gitlab bash控制台

sudo docker exec -it gitlab-ce bash
# 更新配置
gitlab-ctl reconfigure

#修改gitlab.yml
vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

内容如下
在这里插入图片描述

提示
如果不在Gitlab bash控制台中打开,则在宿主机/gitlab-ce/data/gitlab-rails/etc/gitlab.yml

打开编辑
sudo vim /gitlab-ce/data/gitlab-rails/etc/gitlab.yml

重启服务
sudo docker restart gitlab-ce

输入:wq!保存退出后,重启容器

gitlab-ctl restart

执行结果如下
在这里插入图片描述

当成功执行后,会生成容器ID(docker后端会直接开始运行该容器)。通过portainer-ce WEB端查看,就能看到当前运行状态
在这里插入图片描述
当运行状态呈现绿色时,就可以直接访问容器Web端了。在访问前,需要先查看Gitlab实例化时随机生成的root密码(注意密码仅24小时内有效)

# 先退出Gitlab控制台
exit
# 查看root初始化密码
sudo cat initial_root_password

内容如下
在这里插入图片描述
登录到Web端后,先修改显示语言:

  • 左侧导航栏右上角头像,进入【Preferences】偏好设置。
  • 拉到最下面【Localization】本地化,将【Language】语言,设置为【Chinese, Simplified】中文。
  • 再拉到底,直接【Save changes】保存。

保存成功后,直接刷新页面或直接按F5即可。之后再进入左侧导航栏【密码】,修改root密码即可。

提示
如果宿主机是虚拟机环境(比如Ubuntu Sublinux with WSL),那仍需将GitLab私有服做物理网络穿透。否则宿主机所在局域中其它计算机仍无法访问该Gitlab服务。

管理员密码遗忘

直接进入Gitlab bash控制台

sudo docker exec -it gitlab-ce bash

--连接gitlab数据库(#号前缀是控制台提示符状态)
gitlab-rails console -e production

## 执行结果
--------------------------------------------------------------------------------
 Ruby:         ruby 3.2.5 (2024-07-26 revision 31d0f1a2e7) [x86_64-linux]
 GitLab:       17.6.1 (8a31863db02) FOSS
 PostgreSQL:   14.11
------------------------------------------------------------[ booted in 32.61s ]
Loading production environment (Rails 7.0.8.4)
irb(main):001:0>

--修改root密码
# 查找并指向到root账号
irb(main):005:0> user = User.find_by(username: 'root')
=> #<User id:1 @root>
# 修改root密码(注意第2遍为确认密码),user.save即为保存
irb(main):006:0> user.password = 'S87fdj@&yhkk'
irb(main):007:0> user.password_confirmation = 'S87fdj@&yhkk'
irb(main):008:0> user.save!
=> true
irb(main):009:0> exit

# 退出Gitlab bash控制台
root@2a11f26e011d:/# exit

服务邮箱配置

# 打开配置文件
sudo vim /gitlab-ce/config/gitlab.rb

追加内容如下

### GitLab email server settings
###! Docs: https://docs.gitlab.com/omnibus/settings/smtp.html
###! **Use smtp instead of sendmail/postfix.**
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "admin@smtp.com"
gitlab_rails['smtp_password'] = "S87fdj@&yhkk"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['smtp_tls'] = true
# gitlab_rails['smtp_pool'] = false

###! **Can be: 'none', 'peer', 'client_once', 'fail_if_no_peer_cert'**
###! Docs: http://api.rubyonrails.org/classes/ActionMailer/Base.html
gitlab_rails['smtp_openssl_verify_mode'] = 'none'

# gitlab_rails['smtp_ca_path'] = "/etc/ssl/certs"
# gitlab_rails['smtp_ca_file'] = "/etc/ssl/certs/ca-certificates.crt"

### Email Settings
gitlab_rails['gitlab_email_enabled'] = true

##! If your SMTP server does not like the default 'From: gitlab@gitlab.example.com'
##! can change the 'From' with this setting.
gitlab_rails['gitlab_email_from'] = 'master@gitlab.com'
gitlab_rails['gitlab_email_display_name'] = 'GitLab CE'
gitlab_rails['gitlab_email_reply_to'] = 'master@gitlab.com'
# gitlab_rails['gitlab_email_subject_suffix'] = ''
# gitlab_rails['gitlab_email_smime_enabled'] = false
# gitlab_rails['gitlab_email_smime_key_file'] = '/etc/gitlab/ssl/gitlab_smime.key'
# gitlab_rails['gitlab_email_smime_cert_file'] = '/etc/gitlab/ssl/gitlab_smime.crt'
# gitlab_rails['gitlab_email_smime_ca_certs_file'] = '/etc/gitlab/ssl/gitlab_smime_cas.crt'
邮件测试

输入:wq保存退出后,进入Gitlab bash控制台

sudo docker exec -it gitlab-ce bash
# 更新配置
gitlab-ctl reconfigure

# 重启gitlab-ctl服务
gitlab-ctl restart

# 邮件测试
gitlab-rails console -e production
Notify.test_email('admin@smtp.com', 'Subject', 'Body').deliver_now

邮箱有收到邮件,就表示配置成功!

运维问题集锦

(1) 端口映射关系

# 登录gitlab控制台
sudo docker exec -it gitlab-ce bash

# 查看运行进程
netstat -ltwen

# 查看宿主机运行进程
sudo netstat -tunlp
sudo netstat -aptn

##查看指定端口占用情况
sudo ps aux | grep 'xrdp*'
sudo netstat -tunlp | grep 端口号

在这里插入图片描述

(2) 服务日志

# 宿主机docker跟踪
## 参数:--tail 10表示实时跟踪最新的10条记录
sudo docker logs -f gitlab-ce --tail 10

# 直接进入如下路径,Gitlab容器内相关子服务进程日志都在这里,比如nginx、redis、reconfigure重载配置实例化记录等等
cd /gitlab-ce/logs/

# 将地址解析添加到hosts列表
echo "192.168.1.50 gitlab.local" | sudo tee -a /etc/hosts

# 查看配置内容, 仅输出有效的配置项
sudo cat gitlab.rb | grep -vE '^#|^$'

(3) 分支受保护

错误信息【IntelliJ Idea or WebStorm】
remote: GitLab: You are not allowed to push code to protected branches on this project.
不允许将代码推送到此项目的受保护分支。
在这里插入图片描述
错误信息【Visual Sutdio】
Git failed with a fatal error.Unencrypted HTTP is not recommended for Gitlab. Ensure the repository remote URL is using HTTPS.
Git失败并出现致命错误。不建议对Gitlab使用未加密的HTTP。确保存储库远程URL使用HTTPS。

该错误也是因为支分保护的问题,本身极狐官方不推荐在http协议下进行远程操作代码。推荐是采用https或SSH代码操作方案。

打开项目【设置】-【仓库】-【受保护分支】一栏
在这里插入图片描述
允许推送和合并角色调整为如图(含开发角色),或者直接取消保护也可以(选项是立即生效的)。

项目操作

(1) 建立群组

在这里插入图片描述

(2) 创建项目

在这里插入图片描述

(3) 项目的版本控制

在解决方案中,经常会存在多个项目和项目目录,经常需要处理忽略对某个项目、项目里某个文件夹、文件的版本跟踪控制。

忽略某个项目版本控制,在解决方案根下的.gitignore文件,按下图添加该目录路径即可。
在这里插入图片描述
忽略文件夹版本控制(含子目录及文件),编辑项目根下的.gitignore文件,按下图添加该目录路径即可。
在这里插入图片描述
忽略某个文件,在上图中# Editor directories and files一切直接放入文件名就可以了。当然主文件名或扩展名是支持通配符的。

-待续-

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2386477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

拉普拉斯高斯(LoG)滤波器掩模的注意事项

目录 问题&#xff1a; 解答&#xff1a; 一、高斯函数归一化&#xff1a;消除幅度偏差 1. 归一化的定义 2. 为何必须归一化&#xff1f; 二、拉普拉斯系数和为零&#xff1a;抑制直流项干扰 1. 拉普拉斯算子的特性 2. 系数和不为零的后果 三、直流项如何影响零交叉点&…

铠大师:让用户畅享多元应用,助力鸿蒙生态发展

在全球信息技术产业格局加速重构的背景下&#xff0c;中国科技力量正以开放包容的姿态重塑操作系统生态范式。 5月19日&#xff0c;华为在成都举办的nova14系列及鸿蒙电脑新品发布会上&#xff0c;正式对外发布搭载了鸿蒙系统的笔记本电脑HUAWEI MateBook Pro与HUAWEI MateBoo…

基于aspnet,微信小程序,mysql数据库,在线微信小程序汽车故障预约系统

详细视频:【基于aspnet,微信小程序,mysql数据库,在线微信小程序汽车故障预约系统。-哔哩哔哩】 https://b23.tv/zfqLWPV

如何使用AI搭建WordPress网站

人工智能正迅速成为包括网页设计在内的许多行业在其功能设置中添加的一种工具。在数字设计和营销领域&#xff0c;许多成熟的工具都在其产品中添加了人工智能功能。WordPress 也是如此。作为目前最流行的网站建设工具之一&#xff0c;WordPress 的人工智能插件越来越多也就不足…

Java并发编程:全面解析锁策略、CAS与synchronized优化机制

一、六种锁策略场景化解析 1. 乐观锁 vs 悲观锁&#xff1a;图书馆借书的两种策略 核心差异&#xff1a;对资源是否会被抢占的预期不同。 乐观锁&#xff08;假设冲突概率低&#xff09; → 行为&#xff1a;直接去书架上拿书&#xff08;围绕加锁要做的工作更少&#xff09…

2025第三届黄河流域网络安全技能挑战赛--Crypto--WriteUp

2025第三届黄河流域网络安全技能挑战赛–Crypto–WriteUp Crypto sandwitch task from Crypto.Util.number import * import gmpy2 flag bflag{fake_flag} assert len(flag) 39 p getPrime(512) q getPrime(512) n p * q e 0x3 pad1 beasy_problem pad2 bHow_to_so…

[爬虫知识] IP代理

相关实战案例&#xff1a;[爬虫实战] 代理爬取&#xff1a;小白也能看懂怎么用代理 相关爬虫专栏&#xff1a;JS逆向爬虫实战 爬虫知识点合集 爬虫实战案例 引言&#xff1a;爬虫与IP封锁的攻防战 对网络爬虫而言&#xff0c;遇到的一个较棘手的问题就是封IP&#xff1a;请…

6个月Python学习计划 Day 1 - Python 基础入门 开发环境搭建

6个月Python学习计划&#xff1a;从入门到AI实战&#xff08;前端开发者进阶指南&#xff09; &#x1f3af; 今日目标 理解 Python 的背景和用途安装 Python 开发环境熟悉基本语法&#xff1a;变量、数据类型、打印输出动手编写第一个 Python 程序 &#x1f9e0; 学习内容详…

GraphPad Prism工作表的基本操作

《2025新书现货 GraphPad Prism图表可视化与统计数据分析&#xff08;视频教学版&#xff09;雍杨 康巧昆 清华大学出版社教材书籍 9787302686460 GraphPadPrism图表可视化 无规格》【摘要 书评 试读】- 京东图书 GraphPad Prism中包含5种工作表&#xff0c;每种工作表的基本操…

成年后还能学习多少知识,由大脑的这个数量决定

撰文&#xff5c;Anne Trafton 编译&#xff5c;郑添惺 审校&#xff5c;clefable 麻省理工学院&#xff08;MIT&#xff09;的一些神经科学家发现&#xff0c;成年的大脑中含有数百万个“静默突触”&#xff08;silent synapses&#xff09;。它们是神经元之间未成熟的神经突…

MySQL连接错误解决方案:Can‘t connect to MySQL server on ‘localhost‘ (10038)

错误描述 当您尝试连接MySQL数据库时&#xff0c;可能会遇到以下错误提示&#xff1a; 这个错误表明客户端无法连接到本地MySQL服务器。 可能的原因 MySQL服务未启动 MySQL配置问题 防火墙或安全软件阻止连接 端口被占用或未正确配置 网络连接问题 解决方案 方法一&am…

CSS相关知识

1.清除浮动的方法 2.定位 静态定位相当于标准流 相对定位不脱离文档流&#xff0c;仍然占据原来的位置&#xff08;最频繁的作用是给绝对定位当爹&#xff09; 绝对定位脱离文档标准流&#xff0c;不再占有原来位置 3.BFC 1. 解决浮动元素导致的父容器高度塌陷 2. 阻止相邻元…

AI扫描王APP:高效便捷的手机扫描工具,让生活更智能

AI扫描王APP是一款功能强大的手机扫描软件&#xff0c;专为追求高效、便捷的用户设计。它不仅支持文字提取和扫描翻译&#xff0c;还能进行测量&#xff0c;满足用户在不同场景下的需求。无论是办公、学习还是日常使用&#xff0c;AI扫描王都能帮助你快速完成任务&#xff0c;节…

《仿盒马》app开发技术分享-- 原生地图展示(端云一体)

开发准备 上一节我们实现了获取当前用户的位置&#xff0c;并且成功的拿到了经纬度&#xff0c;这一节我们就要根据拿到的经纬度&#xff0c;结合我们其他的知识点来实现地图的展示。 功能分析 地图的展示&#xff0c;我们需要在管理中心先给我们对应的应用开启地图api功能&…

IP、子网掩码、默认网关、DNS

IP、子网掩码、默认网关、DNS 1. 概述1.1 windows配置处 2.IP 地址&#xff08;Internet Protocol Address&#xff09;2.1 公网ip2.2 内网ip2.3 &#x1f310; 公网 IP 与内网 IP 的关系&#xff08;NAT&#xff09; 3. 子网掩码&#xff08;Subnet Mask&#xff09;4. 默认网…

华为OD机试真题——字符串加密 (2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 B卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

角度回归——八参数检测四边形Gliding Vertex

文章目录 一、介绍&#xff08;一&#xff09;五参数检测方法&#xff08; 基于角度&#xff09;&#xff08;二&#xff09;八参数检测方法&#xff08;point-based&#xff09;的边界 二、方案分析&#xff08;一&#xff09;问题定义&#xff08;二&#xff09;方案&#xf…

AI助力,制作视频裁剪软件

1. 视频裁剪软件套路多 最近再做一些测试&#xff0c;经常需要录屏什么的&#xff0c;有时候录制的时长视频&#xff0c;需要裁剪&#xff0c;比如去掉开头一些帧或者结尾的一些帧&#xff0c;就想保留关键点。但是网上下的一些软件&#xff0c;打开一用都是要付费的。所以想着…

[实战]用户系统-2-完善登录和校验以及VIP

这里写目录标题 完善登录和校验新建lib-auth创建配置引入配置和JWT完善登录基本登录单点登录多点登录校验和拦截编写守卫编写装饰器使用完善VIP修改mysql模型编写vip守卫代码进度完善登录和校验 之前我们模拟过用户的登录,本节将实现token的生成,校验,redis做黑名单。我们需…

印度语言指令驱动的无人机导航!UAV-VLN:端到端视觉语言导航助力无人机自主飞行

作者&#xff1a;Pranav Saxena, Nishant Raghuvanshi and Neena Goveas单位&#xff1a;比尔拉理工学院&#xff08;戈瓦校区&#xff09;论文标题&#xff1a;UAV-VLN: End-to-End Vision Language guided Navigation for UAVs论文链接&#xff1a;https://arxiv.org/pdf/250…