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

Docker部署GitLab服务器

一、GitLab介绍

1.1 GitLab简介

  1. GitLab 是一款基于 Git 的开源代码托管平台,集成了版本控制、代码审查、问题跟踪、持续集成与持续交付(CI/CD)等多种功能,旨在为团队提供一站式的项目管理解决方案。
  2. 借助 GitLab,开发团队可以高效协作,轻松管理代码版本,并通过内置的 DevOps 工具加速开发、测试和部署过程。
  3. GitLab 的独特优势在于其完整的容器化部署方案,官方支持与 Kubernetes 等容器编排平台的无缝集成,使平台更加易于管理、扩展,并支持现代化云原生架构。

1.2 GitLab特点

  1. 全面的功能支持
    • GitLab 不仅是一个代码仓库管理工具,还提供自动化构建、测试、部署等强大的 DevOps 功能,是现代化软件开发和团队协作的理想选择。
  2. Web 管理界面
    • 基于 Web 的操作界面,方便用户在浏览器中进行仓库管理、代码审查和 CI/CD 配置。

主要功能特点:

  • 代码仓库管理
    • 支持分支管理、合并请求(Merge Requests)和代码审查等功能,为团队提供高效的协作环境。
  • 代码托管
    • 无论是私有服务器还是公共云平台,GitLab 都支持全面的代码托管方案,满足不同规模团队的需求。
  • 内置 CI/CD 工具
    • GitLab 提供持续集成和持续交付工具,支持自动化构建、测试和部署,并包含强大的可视化管道编辑器和测试报告功能。
  • 安全管理
    • 支持多级用户权限、角色管理、双因素身份验证(2FA)、代码扫描和漏洞检测等功能,全面保障代码安全。
  • DevOps 平台
    • GitLab 提供完整的 DevOps 生命周期管理,包括计划、创建、验证、发布、配置和监控,助力团队高效协作,加速软件交付。

二、本次实践介绍

2.1 本地环境规划

本次实践为个人测试环境,操作系统版本为centos7.9。

hostnameIP地址操作系统版本Docker版本
docker192.168.1.50centos 7.926.1.4

2.2 本次实践介绍

1.本次实践部署环境为个人测试环境,生产环境请谨慎使用;
2.在Docker环境下成功部署GitLab服务器。

三、本地环境检查

3.1 检查Docker服务状态

检查Docker服务是否正常运行,确保Docker正常运行。

[root@localhost /]# systemctl status docker
● docker.service - Docker Application Container EngineLoaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)Active: active (running) since 六 2024-12-21 23:07:14 CST; 3h 29min agoDocs: https://docs.docker.comMain PID: 34141 (dockerd)Tasks: 67Memory: 151.2MCGroup: /system.slice/docker.service

docker安装教程:https://note.wym123.cn/docker/install/

3.2 检查Docker版本

检查Docker版本

[root@localhost /]# docker version
Client: Docker Engine - CommunityVersion:           26.1.4API version:       1.45Go version:        go1.21.11Git commit:        5650f9bBuilt:             Wed Jun  5 11:32:04 2024OS/Arch:           linux/amd64Context:           defaultServer: Docker Engine - CommunityEngine:Version:          26.1.4API version:      1.45 (minimum version 1.24)Go version:       go1.21.11Git commit:       de5c9cfBuilt:            Wed Jun  5 11:31:02 2024OS/Arch:          linux/amd64Experimental:     falsecontainerd:Version:          1.6.33GitCommit:        d2d58213f83a351ca8f528a95fbd145f5654e957runc:Version:          1.1.12GitCommit:        v1.1.12-0-g51d5e94docker-init:Version:          0.19.0GitCommit:        de40ad0

3.3 检查docker compose 版本

检查Docker compose版本,确保2.0以上版本。

[root@localhost /]# docker compose version
Docker Compose version v2.27.1

三、Docker Compse版本升级(可选)

1. 从 GitHub 下载 Docker Compose

  1. 打开 GitHub Docker Compose 官方发布页面:
    • 地址:https://github.com/docker/compose/releases
  2. 找到需要的版本,下载适合你的系统架构的二进制文件(如 Linux 的 docker-compose-linux-x86_64)。

在这里插入图片描述

提示: 如果最新版没有提供二进制文件,可以选择较低版本,直到找到对应的文件。


2. 上传到 Linux

  1. 将下载的文件通过工具(如 scpWinSCP)上传到 /usr/local/bin 目录:

    scp docker-compose-linux-x86_64 root@<your-server-ip>:/usr/local/bin/
    
  2. 上传后,将文件重命名为 docker-compose

    mv /usr/local/bin/docker-compose-linux-x86_64 /usr/local/bin/docker-compose
    

3. 添加执行权限

为二进制文件添加可执行权限:

chmod +x /usr/local/bin/docker-compose

4. 验证安装

  1. 查看 Docker Compose 版本,验证是否安装成功:

    docker-compose version
    
  2. 如果提示权限错误(如 Permission denied),需要重新添加可执行权限:

    chmod +x /usr/local/bin/docker-compose
    

四、下载GitLab镜像

从docker hub下载GitLab镜像

[root@docker gitlab]# docker pull gitlab/gitlab-ce:latest
latest: Pulling from gitlab/gitlab-ce
7b1a6ab2e44d: Already exists
6c37b8f20a77: Pull complete
f50912690f18: Pull complete
bb6bfd78fa06: Pull complete
2c03ae575fcd: Pull complete
839c111a7d43: Pull complete
4989fee924bc: Pull complete
666a7fb30a46: Pull complete
Digest: sha256:5a0b03f09ab2f2634ecc6bfeb41521d19329cf4c9bbf330227117c048e7b5163
Status: Downloaded newer image for gitlab/gitlab-ce:latest
docker.io/gitlab/gitlab-ce:latest

五、部署GitLab服务器

5.1 创建目录

  1. 创建 GitLab 数据目录
    为了确保容器内的 GitLab 数据持久化,需要在宿主机上创建专用目录。执行以下命令:

    mkdir -p /data/gitlab/{data,logs,config} && cd /data/gitlab/
    
    • /data/gitlab/data:存储 GitLab 的数据(如仓库和数据库)。
    • /data/gitlab/logs:存储 GitLab 的日志文件。
    • /data/gitlab/config:存储 GitLab 的配置文件。
    • && cd /data/gitlab/:进入创建的主目录。

5.2 编辑 docker-compose.yml 文件

  1. 创建或编辑 Docker Compose 配置文件: 使用文本编辑器创建并编辑 docker-compose.yml 文件:

    vim /data/gitlab/docker-compose.yml
    
  2. 完整的 docker-compose.yml 示例

    version: "3"
    services:gitlab:container_name: gitlab  # 容器名称image: gitlab/gitlab-ce:latest  # 使用 GitLab 社区版最新镜像hostname: '192.168.0.50'  # 配置主机名(本地或虚拟机 IP)restart: always  # 容器意外停止时自动重启ports:- 8088:80         # 映射 HTTP 端口- 8443:443      # 映射 HTTPS 端口- 2222:22/tcp   # 映射 SSH 端口volumes:- /etc/localtime:/etc/localtime  # 同步宿主机时间- /data/gitlab/data:/var/opt/gitlab  # 数据存储路径- /data/gitlab/config:/etc/gitlab  # 配置文件路径- /data/gitlab/logs:/var/log/gitlab  # 日志文件路径environment:GITLAB_OMNIBUS_CONFIG: |external_url 'http://192.168.0.50:80'  # 外部访问 URLgitlab_rails['gitlab_shell_ssh_port'] = 2222  # 配置 SSH 端口deploy:resources:limits:  # 设置资源限制memory: 4G  # 最大内存使用reservations:  # 保留资源memory: 1G  # 最低内存保留
    

    在这里插入图片描述

注意事项:external_url 中指定的端口号不仅是访问路径的一部分,它还会影响 GitLab 应用本身的监听端口。例如,如果设置为 http://192.168.0.50:8088,GitLab 会在 8088 端口上监听并提供服务(是对于gitlab内部而言的),而不是默认的 80(HTTP)端口, 我们的访问路径是ip+映射后的端口号,不是external_url里面提供的。


5.3 部署 GitLab

  1. 启动容器: 使用 Docker Compose 命令启动 GitLab 容器:

    docker compose up -d
    
    • up:启动容器。
    • -d:以守护进程模式运行容器(后台运行)。
    • 在这里插入图片描述
  2. 运行结果

    • 执行后,Docker Compose 将下载 gitlab/gitlab-ce:latest 镜像并启动容器。

    • 可以通过以下命令查看运行状态:

      docker ps
      
    • 输出示例:

      CONTAINER ID   IMAGE                      COMMAND                  CREATED        STATUS       PORTS                                        NAMES
      123456789abc   gitlab/gitlab-ce:latest   "/assets/wrapper"        2 minutes ago  Up 1 minute  0.0.0.0:80->80/tcp, 0.0.0.0:8443->443/tcp   gitlab
      

六、访问gitlab仓库

6.1 进入 GitLab 登录页

  1. 访问 GitLab Web 界面
    在浏览器中输入以下地址访问 GitLab 登录页:

    http://192.168.0.50:80
    
    • 注意:将 192.168.0.50 替换为您部署 GitLab 的服务器 IP 地址。

    • 如果配置了 HTTPS,则访问地址为:

      https://192.168.0.50:8443
      

    在这里插入图片描述


6.2 获取初始密码

在 GitLab 容器的首次启动过程中,会生成默认的超级管理员账号 root 和随机密码。初始密码可以通过以下命令查看:

  1. 查看初始密码文件
    在容器中查看初始密码:

    docker exec -it gitlab cat /etc/gitlab/initial_root_password
    

    输出示例:

    Password: KfK95J1yFzESkYkNjEkj
    

    说明

    • 密码文件位于 /etc/gitlab/initial_root_password
    • 该密码仅在首次启动时有效。
  2. 删除初始密码文件(可选)
    为了安全起见,可以在记下初始密码后删除该文件:

    docker exec -it gitlab rm /etc/gitlab/initial_root_password
    

6.3 重置登录密码(如有需要)

如果遗忘了超级管理员密码,可以通过以下步骤进行重置:

  1. 进入 GitLab 容器内部
    使用 Docker 命令进入容器:

    docker exec -it gitlab /bin/bash
    
    • docker exec:在运行中的容器内执行命令。
    • gitlab:GitLab 容器的名称。

    输出示例:

    [root@docker gitlab]# docker exec -it gitlab /bin/bash
    root@192:/#
    
  2. 进入 Rails 控制台
    启动 GitLab 的 Rails 控制台:

    gitlab-rails console -e production
    
    • -e production:以生产环境模式启动控制台。
  3. 查询超级管理员用户
    查询超级管理员用户信息(默认用户 ID 为 1):

    user = User.where(id: 1).first
    

    示例图片:
    在这里插入图片描述

  4. 修改密码
    设置新的密码(以 admin36987 为例):

    user.password = 'admin36987'
    
  5. 保存修改并退出
    保存新密码并退出控制台:

    user.save!  # 保存更改
    exit        # 退出控制台
    

    示例图片:
    在这里插入图片描述


6.4 访问 GitLab 首页

  1. 使用初始密码或修改后的账号密码登录 GitLab:

    • 用户名root
    • 密码:初始密码或修改后的密码(如 admin36987)。

    修改密码:
    在这里插入图片描述

  2. 首次登录时提示设置新密码
    如果使用初始密码登录,GitLab 会提示您设置新密码。


6.5 设置中文语言

  1. 进入 Preferences 页面
    登录后,点击右上角头像,进入 Preferences 页面:

    Profile > Preferences
    
  2. 修改语言设置
    Preferences 页面找到 Localization 区域,将 Language 选项修改为 简体中文

    示例图片:

    • 修改前:
      在这里插入图片描述

    • 修改后:
      在这里插入图片描述

  3. 保存设置
    点击保存按钮,刷新界面后语言会立即切换为简体中文。

相关文章:

Docker部署GitLab服务器

一、GitLab介绍 1.1 GitLab简介 GitLab 是一款基于 Git 的开源代码托管平台&#xff0c;集成了版本控制、代码审查、问题跟踪、持续集成与持续交付&#xff08;CI/CD&#xff09;等多种功能&#xff0c;旨在为团队提供一站式的项目管理解决方案。借助 GitLab&#xff0c;开发…...

python版本的Selenium的下载及chrome环境搭建和简单使用

针对Python版本的Selenium下载及Chrome环境搭建和使用&#xff0c;以下将详细阐述具体步骤&#xff1a; 一、Python版本的Selenium下载 安装Python环境&#xff1a; 确保系统上已经安装了Python 3.8及以上版本。可以从[Python官方网站]下载并安装最新版本的Python&#xff0c;…...

重温设计模式--4、组合模式

文章目录 1 、组合模式&#xff08;Composite Pattern&#xff09;概述2. 组合模式的结构3. C 代码示例4. C示例代码25 .应用场景 1 、组合模式&#xff08;Composite Pattern&#xff09;概述 定义&#xff1a;组合模式是一种结构型设计模式&#xff0c;它允许你将对象组合成…...

5、mysql的读写分离

主从复制 主从复制的含义 主从复制&#xff1a;在一个mysql的集群当中&#xff0c;至少3台&#xff0c;即主1台&#xff0c;从2台。 当有数据写入时&#xff0c;主负责写入本库&#xff0c;然后把数据同步到从服务器。 一定是在主服务器写入数据&#xff0c;从服务器的写入…...

uniapp Native.js原生arr插件服务发送广播到uniapp页面中

前言 最近搞了个设备&#xff0c;需求是读取m1卡&#xff0c;厂家给了个安卓原生demo&#xff0c;接入arr插件如下&#xff0c;接入后发现还是少了一部分代码&#xff0c;设备服务调起后触发刷卡无法发送到uniapp里。 中间是一些踩坑记录&#xff0c;最后面是解决办法&#xf…...

如何在 Ubuntu 22.04 上安装 Elasticsearch

简介 在本教程中&#xff0c;你将学习如何在 Ubuntu 22.04 服务器上安装 Elasticsearch。此外&#xff0c;你还将学习如何使用 Elasticsearch REST API 索引和操作数据。 Elasticsearch 是一个基于 Apache Lucene Library 的免费分布式搜索和分析引擎。它是一个快速且可扩展的…...

单片机长耗时前后台任务优化

代码&#xff1a; void Task_10ms(void) {... }//改 void Task_2ms(void) {static uint8_t s_state 0switch(s_state){case 0:....s_state 1;break;case 1:....s_state 2;break;case 3:....s_state 1;break;default: //此段可以去除s_state 0;break; } } 参考链接 MCU长…...

Linux大数据方向shell

一、概述 shell是一个命令行解释器&#xff0c;它接收应用程序/用户命令&#xff0c;然后调用操作系统内核&#xff0c;还是一个功能相当强大的编程语言&#xff0c;易编写&#xff0c;易调试&#xff0c;灵活性强。 二、shell入门 1.输出hello world touch helloworld.sh&…...

爬虫 APP 逆向 ---> shopee(虾皮) 电商

shopee 泰国站点&#xff1a;https://shopee.co.th/ shopee 网页访问时&#xff0c;直接弹出使用 app 登录查看&#xff0c;那就登录 shopee 泰国站点 app。 手机抓包&#xff1a;分类接口 接口&#xff1a;https://mall.shopee.co.th/api/v4/pages/get_category_tree 请求参…...

axios 常见的content-type、responseType有哪些?

一、Content Type Content Type &#xff0c;也被称为MIME类型&#xff08;Multipurpose Internet Mail Extensions&#xff09;&#xff0c;是一种用于标识数据格式的机制。在HTTP协议中&#xff0c;Content Type’通常通过请求或响应头部的’Content-Type’字段来指定。这个…...

从零开始C++游戏开发之第七篇:游戏状态机与回合管理

在游戏开发的道路上&#xff0c;状态管理是一个无法绕开的重要课题。尤其是在棋牌类游戏中&#xff0c;游戏的进行需要有条不紊地按照回合推进&#xff0c;同时管理多个游戏状态&#xff0c;如“等待玩家加入”、“游戏进行中”、“结算阶段”等。如何优雅且高效地实现这些逻辑…...

【全开源】Java多语言tiktok跨境商城TikTok内嵌商城送搭建教程

开发工具&#xff1a;IntelliJ IDEA 部署环境: Tomcat8.x Mysql5.6 JDK1.8 Maven3.x Redis ZooKeeper3.4。 本系统开发使用JAVA技术栈开发 使用uniapp技术栈 支持多端 H5AndroidIOS PC端使用&#xff1a;vueelementui 用户端使用&#xff1a;uniapp 管理端使用&#xff1a…...

mac启ssh服务用于快速文件传输

x.1 在mac上启SSH服务 方法一&#xff1a;图形交互界面启ssh&#xff08;推荐&#xff09; 通过sharing - advanced - remote login来启动ssh&#xff1b;&#xff08;中文版mac应该是 “系统设置 → 通用 → 共享”里打开“远程登录”来启动&#xff09; 查看自己的用户名和…...

《探索 Apache Spark MLlib 与 Java 结合的卓越之道》

在当今大数据与人工智能蓬勃发展的时代&#xff0c;Apache Spark MLlib 作为强大的机器学习库&#xff0c;与广泛应用的 Java 语言相结合&#xff0c;为数据科学家和开发者们提供了丰富的可能性。那么&#xff0c;Apache Spark MLlib 与 Java 结合的最佳实践究竟是什么呢&#…...

使用 Python 创建多栏 Word 文档 – 详解

目录 引言 一、工具与安装 二、Python 在 Word 中创建简单的多栏布局 三、Python 在 Word 文档的栏间添加分隔线 四、Python 从Word文档的指定位置开启多栏设置 五、Python 为多栏 Word 文档的各栏添加页码 引言 在文档设计中&#xff0c;排版不仅决定了内容的呈现方式&…...

WebPack3项目升级webpack5的配置调试记录

文章目录 前言一、webpack3环境1.1、知识点记录1.1.1、配置解释1.1.2、webpack与sass版本对应关系1.1.3、CommonJS与ESModule1.1.4、node版本管理nvm1.1.5、sass-loader、sass与node-sass 1.2、其他1.2.1、.d.ts是什么文件1.2.2、react与types/react版本对应关系1.2.3、webpack…...

Mysql的MHA高可用及故障切换

Mysql的MHA高可用及故障切换 MHA主从复制的单点问题配置1. 主从复制2. MHA高可用安装MHA的组件配置无密码认证manager节点配置manager节点上测试启动连接 故障切换模拟恢复 MHA master high availability 建立在主从复制基础之上的故障切换的软件系统。 主从复制的单点问题 …...

【ES6复习笔记】箭头函数(5)

简介 本教程将介绍如何在 JavaScript 中使用箭头函数&#xff0c;包括箭头函数的基本语法、特点以及在实际开发中的应用。通过本教程&#xff0c;你将学会如何使用箭头函数来简化代码&#xff0c;提高代码的可读性和简洁性。 箭头函数的基本语法 箭头函数是 ES6 引入的一种新…...

单片机学习笔记——入门51单片机

一、单片机基础介绍 1.何为单片机 单片机&#xff0c;英文Micro Controller Unit&#xff0c;简称MCU 。内部集成了中央处理器CPU、随机存储器ROM、只读存储器RAM、定时器/计算器、中断系统和IO口等一系列电脑的常用硬件功能 单片机的任务是信息采集&#xff08;依靠传感器&a…...

Docker Run使用方法及参数详细说明

Docker Run使用方法及参数详细说明 基本语法常用参数使用示例总结Docker Run是Docker中最基本的命令之一,用于创建并启动一个新的容器。通过Docker Run,用户可以基于指定的镜像创建一个容器实例,并且可以配置容器的各种参数,如网络设置、存储选项等。下面将详细介绍Docker …...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...