当前位置: 首页 > news >正文

Gitlab 安装全流程

Version:gitlab-ce:16.2.4-ce.0

简介

Gitlab 是一个开源的 Git 代码仓库系统,可以实现自托管的 Github 项目,即用于构建私有的代码托管平台和项目管理系统。系统基于 Ruby on Rails 开发,速度快、安全稳定。它拥有与 Github 类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

此次安装采用的是 Docker 形式进行安装。

镜像拉取

版本选择

在这里可以找到所有的社区办镜像版本,当前最新的为 16.2.4-ce.0 版本。

image-20230822095424293

镜像架构问题

注意看镜像支持的 OS/ARCH 仅只有 linux/amd64,如果你的系统是 x86_64 或者 amd64 的都可以正常运行,如果你是 arm 架构的就不行了。

针对 MacOS 的 M1/M2 芯片处理

如果是苹果的 M1/M2 芯片,其也是 arm 架构,但是可以通过设置 Docker Desktop 来运行。这主要是依赖于苹果的 Rosetta 2 转换器,可以将 x86 架构的应用程序自动翻译成 ARM 架构的应用程序,在 M 系列芯片上运行。

image-20230822101510517

image-20230822101527842

这两项都打开,在执行 docker run 时增加参数 --platform linux/amd64 即可。

拉取镜像

image-20230822103920004

运行镜像

准备

准备好数据存放目录,这里以 ~/Downloads/tmp/gitlab 为例。

export GITLAB_HOME=~/Downloads/tmp/gitlab
echo $GITLAB_HOMEcd $GITLAB_HOME
mkdir config logs data

运行

docker run --detach \# Mac 平台 M1/M2 芯片需要运行,需要指定。前提:已经在 Docker Desktop 中设置好对应配置。--platform linux/amd64 \# 使用域名--hostname git.tutuit.cn \# HTTPS 访问端口--publish 4443:443 \# HTTP 访问端口,尽量不要对外暴露使用,建议使用 HTTPS。如果前端进行了 Nginx 代理,可以在 Nginx 中使用此端口--publish 8880:80 \# 22 端口,用来使用 SSH 协议拉取代码--publish 4422:22 \--name gitlab \--restart always \# 配置目录--volume $GITLAB_HOME/config:/etc/gitlab \# 日志目录--volume $GITLAB_HOME/logs:/var/log/gitlab \# 数据存放目录--volume $GITLAB_HOME/data:/var/opt/gitlab \gitlab/gitlab-ce:16.2.4-ce.0

image-20230822105526543

到此,Gitlab 启动就完成了,接下来配置前端代理 Nginx。

Nginx 配置

由于要是用 HTTPS 协议,所以需要证书,我这里使用的是 git.tutuit.cn 域名,根据自己域名的不同,去生成对应的证书即可,阿里云等平台都可以生成,也可以自己本地生成。

生成的证书如下:

image-20230822105940003

增加 Nginx 配置

增加 443 HTTPS 端口监听,并配置上证书文件

### HTTPS server
server {listen 443 ssl;server_name git.tutuit.com;index index.html index.htm;ssl_certificate /opt/homebrew/etc/nginx/ssl/gitlab/git.tutuit.cn.pem;ssl_certificate_key /opt/homebrew/etc/nginx/ssl/gitlab/git.tutuit.cn.key;ssl_session_timeout 5m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;client_max_body_size 1024M;fastcgi_connect_timeout 1200s;fastcgi_send_timeout 1200s;fastcgi_read_timeout 1200s;proxy_read_timeout 300s;client_body_timeout 500s;send_timeout 500s;location / {proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# proxy_set_header X-Forwarded-Proto https;proxy_pass http://127.0.0.1:8880;}
}

自定义 hosts

由于这里只是本地演示项目,就不去做域名解析工作了,直接修改本地 hosts,使之对应上即可。

image-20230822110543718

访问

Gitlab 镜像、Nginx 都已启动完毕,开始访问:https://git.tutuit.cn/

image-20230822114403940

默认用户名:root

默认密码:在挂载的 $GITLAB_HOME/config/initial_root_password 文件中。

后续

关闭公开注册

登录成功之后会看到如下警告信息:

image-20230822114635617

建议把公开注册关闭掉,使用邀请注册。

image-20230822114915208

HTTPS 和 SSH 拉取代码

创建一个 Demo 项目,点击 Clone 可以看到如下信息:

image-20230822115925225

这里有两个问题:

  1. 这里 SSH 协议提供的链接是无法正常拉取代码的,因为在启动 Gitlab Docker 镜像时,为了防止和宿主机冲突,使用了宿主机的 4422 端口映射到了容器的 22 端口,这里提供的 SSH 协议是默认的走 22 端口,所以不行。

image-20230822121415684

  1. 这里 HTTP 项只显示了 HTTP,而非 HTTPS,这是因为未对 Gitlab 本身做 HTTPS 的配置,如果你使用它来 clone 代码,同样会得到错误,因为在 Nginx 上并没有配置 HTTP(80) 的监听,也不建议使用 HTTP。

image-20230822121543247

遇到了问题,也知道了大致原理,就可以一个一个解决了。

解决问题 1

既然 Gitlab 默认生成的 SSH 链接是走的 22 端口,那是不是可以通过配置让他生成走 4422 端口的?没错,确实可以。编辑文件 $GITLAB_HOME/config/gitlab.rb,增加如下配置然后重启:

# gitlab.rb 中
gitlab_rails['gitlab_shell_ssh_port'] = 4422# 重启 Gitlab
docker restart gitlab

新的 SSH 链接如下:

image-20230822122106591

这时再用其拉取代码试试:

image-20230822122140025

OK,大功告成,第一个问题解决。

解决问题 2

问题 2 的原因在于没有配置过 Gitlab 的 HTTPS 相关的配置,这导致其生成的链接默认是 HTTP 的,那不用说了,肯定也有配置是可以修改 HTTPS 相关内容。可以加入以下配置项:

# gitlab.rb 中
# 默认的域名 URL
external_url 'https://git.tutuit.cn'# 开启 HTTP 到 HTTPS 的重定向
nginx['redirect_http_to_https'] = true
# 之前 Nginx 使用的证书,把他复制到 $GITLAB_HOME/config/ssl 目录下
nginx['ssl_certificate'] = "/etc/gitlab/ssl/git.tutuit.cn.pem"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/git.tutuit.cn.key"# 重启 Gitlab
docker restart gitlab

再访问发现又出问题了:

image-20230822123033651

为啥呢?简单分析得出:在浏览器访问 https://git.tutuit.cn/root/demo 会被 Nginx 代理,Nginx 代理的是 8880 端口:

image-20230822123152427

对应着 Gitlab 这个容器的 80 端口,而在上面更改 Gitlab 配置的时候,增加了 nginx['redirect_http_to_https'] = true 的配置,也就是说形成了“循环”,浏览器 =>(443) Nginx =>(80) Gitlab,那 Gitlab 一看是 80 访问,就给重定向了,如此循环往复。所以浏览器就噶掉了。

那就把 Nginx =>(80) Gitlab 改成 443 试试。

image-20230822124402300

重启 Nginx 之后重新访问:

image-20230822124554198

clone 代码结果:

image-20230822124608214

至此,大功告成。

邮件通知

有时,我们可能会用到邮件通知工能,比如:

  • 通过邮箱新增用户,注册信息会直接发送到对应的邮箱。
  • CI/CD 的结果进行通知。
  • 代码审查、合并通知。
  • 等等。

$GITLAB_HOME/config/gitlab.rb 中增加配置:

# gitlab.rb 中
# 开启 smtp 协议
gitlab_rails['smtp_enable'] = true
# smtp 服务地址
gitlab_rails['smtp_address'] = "smtp.ym.163.com"
# TLS 端口
gitlab_rails['smtp_port'] = 994
gitlab_rails['smtp_user_name'] = "你的邮箱"
gitlab_rails['smtp_password'] = "你的密码"
# 登录方式
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
# 启用 TLS
gitlab_rails['smtp_tls'] = true 
gitlab_rails['gitlab_email_from'] = '发件人'
# 服务域
gitlab_rails['smtp_domain'] = "ym.163.com"

重启邮箱即可生效。

相关文章:

Gitlab 安装全流程

Version:gitlab-ce:16.2.4-ce.0 简介 Gitlab 是一个开源的 Git 代码仓库系统,可以实现自托管的 Github 项目,即用于构建私有的代码托管平台和项目管理系统。系统基于 Ruby on Rails 开发,速度快、安全稳定。它拥有与 Github 类似…...

pdf转word最简单方法~

pdf转word最简单方法!pdf转word最简单方法我们都知道,PDF文件是一种只读文件格式,无法按照需求对PDF文件进行更改与编辑,从而影响到了PDF文件的使用。所以,我们需要将PDF文件转换为word文档,以此来保证文件…...

Android 9.0 WiFi 扫描结果上报和获取流程

本文是对wifi扫描结果上报和获取过程的java层代码流程梳理总结。 我们先分析扫描成功的上报和获取过程。 一、WiFi扫描成功的上报和获取过程 WiFi扫描成功的上报和获取大致是由三条不连贯流程组成的,分别是通知framework和WifiTracker获取扫描结果以及应用主动获取…...

Java 项目日志实例:Log4j2

点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~ Apache Log4j 2 是对 Log4j 的升级,与其前身 Log4j 1.x 相比有了显着的改进,并提供了许多 Logback 可用的改进,同时支持 JCL 以及 SLF4J…...

Effective C++条款14——在资源管理类中小心coping行为(资源管理)

条款13导入这样的观念:“资源取得时机便是初始化时机”(Resource Acquisitionls Initialization; RAII),并以此作为“资源管理类”的脊柱,也描述了auto_ ptr和tr1::shared ptr如何将这个观念表现在 heap-based资源上。然而并非所有资源都是heap-based&am…...

【网络教程】如何创建/添加钉钉机器人以及如何获取机器人的Token/Secret

文章目录 创建钉钉机器人添加钉钉机器人获取机器人的Token/Secret相关网站创建钉钉机器人 这里以PC端的操作为例,按照如下操作进行 访问 钉钉开放平台选择机器人选项卡,点击右上角的创建应用,这里会有一个弹窗,我这里选择的是继续使用旧版,如图按照要求填写相关信息创建自…...

wx原生微信小程序入门常用总结

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、定义值和修改值1、定义值2、修改值(1)代码(2)代码说明(3)注意点 二、点击事件三、微…...

制作一个专属于安防监控业的小程序商城

随着科技的发展和人们生活水平的提高,安防监控设备在我们的日常生活中起到了越来越重要的作用。因此,建立一个安防监控设备商城小程序就变得尤为重要。下面将介绍如何建立这样一个小程序。 第一步,登录乔拓云平台后台,进入商城管理…...

基于java羽毛球馆管理系统设计与实现

摘 要 时代的变化速度实在超出人类的所料,21世纪,计算机已经发展到各行各业,各个地区,它的载体媒介-计算机,大众称之为的电脑,是一种特高速的科学仪器,比人类的脑袋要灵光无数倍,什么…...

安装elasticsearch8.9.0及修改配置

安装es流程 打开文件,添加以下行 vim /etc/sysctl.conf vm.max_map_count=262144重启生效 sysctl -p创建用户 useradd es passwd es修改es目录所属用户 chown -R es:es /opt/elasticsearch-8.9.0如果内存不足,可以修改es的初始化内存和Max内存,修改文件/opt/elasticsearch-8…...

如何构建高效的接口自动化测试框架?看完你就会了...

在选择接口测试自动化框架时,需要根据团队的技术栈和项目需求来综合考虑。对于测试团队来说,使用Python相关的测试框架更为便捷。无论选择哪种框架,重要的是确保 框架功能完备,易于维护和扩展,提高测试效率和准确性。今…...

53 | 金融行业股票销售指标分析

金融行业股票销售指标分析 引言: 金融行业中的股票销售指标分析是评估股票市场表现、投资者行为以及交易平台效果的重要手段。通过深入分析关键的销售指标,投资者、金融机构和交易平台可以更好地了解市场趋势,作出明智的投资决策,优化交易策略。本文将探讨金融行业股票销售…...

qiuzhiji1

前言:记录一下毕业后的求职历程 背景:18级 湖北理工学院计算机学院(黄石) 网络工程 本文初次撰写于2023年8月17日,正处于离职找工作的空档期,部分经历可能记不清了。所有内容尽量保证了客观,主要是分享一下自己的经历,顺带锻炼文字能力。 文章会不定期更新,较新的日期会…...

使用VisualStudio制作上位机(二)

文章目录 使用VisualStudio制作上位机(二)第三部分:GUI内部函数设计使用VisualStudio制作上位机(二) Author:YAL 第三部分:GUI内部函数设计 事件添加 给窗体或窗体按钮相关的操作添加事件有两种方式,事件的名字直白的表面了这是什么事件。 直接双击界面,自动生成窗…...

Datawhale AI夏令营 - 用户新增预测挑战赛 | 学习笔记

数据分析与可视化 为了拟合出更好的结果就要了解训练数据之间的相互关系,进行数据分析是必不可少的一步 导入必要的库 # 导入库 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns pandas库是一个强大的分析结构化…...

HarmonyOS/OpenHarmony(Stage模型)卡片开发AbilityStage组件容器

AbilityStage是一个Module级别的组件容器,应用的HAP在首次加载时会创建一个AbilityStage实例,可以对该Module进行初始化等操作。 AbilityStage与Module一一对应,即一个Module拥有一个AbilityStage。 DevEco Studio默认工程中未自动生成Abilit…...

利用torchvision库实现目标检测与语义分割

一、介绍 利用torchvision库实现目标检测与语义分割。 二、代码 1、目标检测 from PIL import Image import matplotlib.pyplot as plt import torchvision.transforms as T import torchvision import numpy as np import cv2 import randomCOCO_INSTANCE_CATEGORY_NAMES …...

基于决策树(Decision Tree)的乳腺癌诊断

决策树(DecisionTree)学习是以实例为基础的归纳学习算法。算法从--组无序、无规则的事例中推理出决策树表示形式的分类规则,决策树也能表示为多个If-Then规则。一般在决策树中采用“自顶向下、分而治之”的递归方式,将搜索空间分为若千个互不相交的子集,在决策树的内部节点(非叶…...

前端面试的计算机网络部分(2)每天10个小知识点

目录 系列文章目录前端面试的计算机网络部分(1)每天10个小知识点 知识点11. DNS 完整的查询过程递归查询过程:迭代查询过程: 12. OSI 七层模型13. TCP 的三次握手和四次挥手三次握手(Three-Way Handshake)&…...

【LeetCode】224. 基本计算器

224. 基本计算器(困难) 方法:双栈解法 思路 我们可以使用两个栈 nums 和 ops 。 nums : 存放所有的数字ops :存放所有的数字以外的操作,/- 也看做是一种操作 然后从前往后做,对遍历到的字符做…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: ​onCreate()​​ ​调用时机​:Activity 首次创建时调用。​…...

LLMs 系列实操科普(1)

写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...