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

应用环境
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) FOSSPostgreSQL:   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.pswp.cn/pingmian/82353.shtml

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

相关文章

MyBatis 的动态 SQL 特性来实现有值字段才进行插入或更新

MyBatis 动态 SQL 解决方案 <!-- 动态INSERT语句 --> <insert id"addDailyFreezeTer" parameterType"com.linyang.pecker.pojo.DailyFreezeTerminalBean">INSERT INTO dailyfreezeter_info<trim prefix"(" suffix")" …

网络原理与 TCP/IP 协议详解

一、网络通信的本质与基础概念 1.1 什么是网络通信&#xff1f; 网络通信的本质是跨设备的数据交换&#xff0c;其核心目标是让不同物理位置的设备能够共享信息。这种交换需要解决三个核心问题&#xff1a; 如何定位设备&#xff1f; → IP地址如何找到具体服务&#xff1f;…

CUDA编程笔记(1)--最简单的核函数

本文用来记录cuda编程的一些笔记以及知识 本笔记运行在windows系统&#xff0c;vs编译器中&#xff0c;cuda版本是12.6 先看一下最基本的代码例子&#xff1a; #include<iostream> #include<cstdio> #include "cuda_runtime.h" #include "device…

系统架构中的限流实践:构建多层防护体系(二)

系统架构中的限流实践:构建多层防护体系 一、接入层限流:流量拦截第一关二、应用层限流(服务内限流)Java生态方案对比三、分布式限流(跨服务限流)四、数据层限流(数据库/缓存限流)1. 数据库防护策略2. 缓存优化方案五、中间件层限流(消息队列/分布式服务)六、客户端限…

AI学习笔记二十八:使用ESP32 CAM和YOLOV5实现目标检测

若该文为原创文章&#xff0c;转载请注明原文出处。 最近在研究使用APP如何显示ESP32 CAM的摄像头数据&#xff0c;看到有人实现把ESP32 CAM的数据流上传&#xff0c;通过YOLOV5来检测&#xff0c;实现拉流推理&#xff0c;这里复现一下。 一、环境 arduino配置esp32-cam开发环…

uni-app(5):Vue3语法基础上

Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统&#xff0c;只关注视图层&#xff0c;…

JAVA:Kafka 存储接口详解与实践样例

📦 1、简述 Kafka 以其高吞吐、可扩展和高可靠性著称,其强大性能的背后核心在于其高效的存储设计。Kafka 不是传统意义上的队列,而是一个分布式日志系统,其存储模块是核心组成部分。 本文将深入剖析 Kafka 的存储接口实现机制,并结合 Java 示例进行模拟验证。 🧱 2、…

Docker 使用镜像[SpringBoot之Docker实战系列] - 第537篇

历史文章&#xff08;文章累计530&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…

数据库入门教程:以商品订单系统为例

数据库入门教程&#xff1a;以商品订单系统为例 一、前言 数据库是现代软件开发中不可或缺的基础&#xff0c;掌握数据库的基本概念和操作&#xff0c;是每个开发者的必经之路。本文将以“商品-品牌-客户-订单-订单项”为例&#xff0c;带你快速入门数据库的核心知识和基本操…

GeoServer样式设置:使用本地图标及分层/分视野显示

GeoServer样式设置:使用本地图标及分层/分视野显示 1、本地图标生效设置2、GeoServer添加不同视野的图标点样式1)服务预览效果2)本地图标引用3)不同视野显示不同图标4)标注注记显示空间的点数据,使用图标来表示是非常常见的业务需求,而且由于在不同比例尺下,可能需要设…

DL00347-基于人工智能YOLOv11的安检X光危险品刀具检测含数据集

&#x1f6a8; AI技术革新&#xff0c;提升安检效率与安全性&#xff01;YOLOv11助力X光危险品刀具检测&#xff01; &#x1f4a1; 在安全领域&#xff0c;效率与精准度的要求从未如此迫切。作为科研人员&#xff0c;是否一直在寻找一款可以提升安检准确率、减少人工干预、提…

测试计划与用例撰写指南

测试计划与用例撰写指南 一、测试计划&#xff1a;项目测试的 “导航地图”1.1 测试计划的核心目标 1.2 测试计划的关键要素 1.2.1 项目概述 1.2.2 测试策略 1.2.3 资源与进度 1.2.4 风险评估与应对 二、测试用例&#xff1a;测试执行的 “行动指南”2.1 测试用例的设计原则 2…

微服务的应用案例

从“菜市场”到“智慧超市”&#xff1a;一场微服务的变革之旅 曾经&#xff0c;我们的系统像一个熙熙攘攘的传统菜市场。所有功能模块&#xff08;摊贩&#xff09;都挤在一个巨大的单体应用中。用户请求&#xff08;买菜的顾客&#xff09;一多&#xff0c;整个市场就拥堵不堪…

Java设计模式之观察者模式:从基础到高级的全面解析

文章目录 一、观察者模式基础概念1.1 什么是观察者模式?1.2 观察者模式的四大角色1.3 观察者模式类图二、观察者模式实现步骤2.1 基础实现步骤2.2 详细代码实现第一步:定义主题接口第二步:定义观察者接口第三步:创建具体主题第四步:创建具体观察者第五步:客户端使用三、观…

GATT 服务的核心函数bt_gatt_discover的介绍

目录 概述 1 GATT 基本概念 1.1 GATT 的介绍 1.2 GATT 的角色 1.3 核心组件 1.4 客户端操作 2 bt_gatt_discover函数的功能和应用 2.1 函数介绍 2.1 发现类型&#xff08;Discover Type&#xff09; 3 典型使用流程 3.1 服务发现示例 3.2 级联发现模式 3.3 按UUID过…

【更新至2023年】1985-2023年全国及各省就业人数数据(无缺失)

1985-2023年全国及各省就业人数数据&#xff08;无缺失&#xff09; 1、时间&#xff1a;1985-2023年 2、来源&#xff1a;Z国统计年鉴、各省年鉴、新中国60年 3、指标&#xff1a;就业人数 4、范围&#xff1a;全国及31省 5、缺失情况&#xff1a;无缺失 6、指标解释&am…

0基础学习Linux之揭开朦胧一面:环境基础开发工具

目录 Linux下安装软件的方案&#xff1a; 对于操作系统的理解&#xff1a; 操作系统的生态问题&#xff1a; 什么是好的操作系统&#xff08;os&#xff09;&#xff1a; 重新理解centos VS ubnutu VS kail&#xff1a; 关于yum: 用 yum 安装软件(安装和卸载软件一定要有r…

YOLO 算法详解:实时目标检测的里程碑

在计算机视觉领域&#xff0c;目标检测一直是一个关键且热门的研究方向&#xff0c;而 YOLO&#xff08;You Only Look Once&#xff09;算法凭借其出色的实时性和较高的检测精度&#xff0c;成为了目标检测算法中的明星选手。本文将深入探讨 YOLO 算法的原理、发展历程、技术优…

leetcode98.验证二叉搜索树:递归法中序遍历的递增性验证之道

一、题目深度解析与BST核心性质 题目描述 验证二叉搜索树&#xff08;BST&#xff09;是算法中的经典问题&#xff0c;要求判断给定的二叉树是否满足BST的定义&#xff1a; 左子树中所有节点的值严格小于根节点的值右子树中所有节点的值严格大于根节点的值左右子树本身也必须…

MathQ-Verify:数学问题验证的五步流水线,为大模型推理筑牢数据基石

MathQ-Verify&#xff1a;数学问题验证的五步流水线&#xff0c;为大模型推理筑牢数据基石 大语言模型在数学推理领域进展显著&#xff0c;但现有研究多聚焦于生成正确推理路径和答案&#xff0c;却忽视了数学问题本身的有效性。MathQ-Verify&#xff0c;通过五阶段流水线严格…