技术背景

GithubGitee(码云)是最常见的基于git的代码托管平台,现在基于svn的代码管理仓库已经相对比较少见了,大部分还都是企业内部的代码仓。但是基于开源的Gitlab,我们在企业内网也可以立马搭建一个代码托管平台,并且自带集成有各种代码自动化测试工具,实现持续集成和持续测试。

关于Docker容器的使用,这里我们主要是为了规避不同的OS发行版所带来的安装困扰,而Gitlab官方也提供了Docker的支持。也就是说,只要本地环境中有Docker,就可以很方便的去构造一个本地的Gitlab环境。本文也是基于Docker,讲解和展示本地Gitlab的配置和使用方法。

基于Docker的Gitlab环境部署

关于更多的docker的使用和操作方法和使用案例,读者可以参考这些博客(博客1博客2博客3博客4),这里我们就直接使用docker的一些功能。比如首先我们要做的是从dockerhub中拉取Gitlab官方提供的镜像:

  1. [dechin-manjaro gitlab]# docker pull gitlab/gitlab-ce

这个下载的速度还是不错的,下载完成后可以在使用docker images查看相关镜像是否在本地仓库列表中。需要注意的是,这些基本的docker操作都需要root权限来执行。下载完镜像后,在本地找一个空的目录,创建几个文件夹用于绑定容器内的相关目录,使得容器中所生成的配置文件和日志文件数据文件等可以同步到本地的目录(而不仅仅是保存在容器内部的目录)。

  1. [dechin-manjaro gitlab]# ll
  2. 总用量 0
  3. [dechin-manjaro gitlab]# mkdir -p config
  4. [dechin-manjaro gitlab]# mkdir -p logs
  5. [dechin-manjaro gitlab]# mkdir -p data

这里创建了configlogsdata目录,分别用-v指令绑定到容器内的/etc/gitlab/var/log/gitlab/var/opt/gitlab目录,具体的运行指令如下所示(参考了参考链接1):

  1. [dechin-manjaro gitlab]# docker run -d -p 5443:443 -p 82:82 -p 2222:22 --name gitlab -v /home/dechin/projects/2021-softwares/gitlab/config:/etc/gitlab -v /home/dechin/projects/2021-softwares/gitlab/logs:/var/log/gitlab -v /home/dechin/projects/2021-softwares/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
  2. c12732a4acfb4835b8d1353b62cf85868edc2466eb0669bbabc2059f7932c309

执行之后容器开始进入后台运行,我们可以看到当前的运行状态是health: starting

  1. [dechin-manjaro gitlab]# docker ps -n 3
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. c12732a4acfb gitlab/gitlab-ce "/assets/wrapper" 6 seconds ago Up 5 seconds (health: starting) 80/tcp, 0.0.0.0:82->82/tcp, :::82->82/tcp, 0.0.0.0:2222->22/tcp, :::2222->22/tcp, 0.0.0.0:5443->443/tcp, :::5443->443/tcp gitlab
  4. 36fc44248800 gitlab/gitlab-ce "/assets/wrapper" 45 minutes ago Exited (137) 5 minutes ago hardcore_poitras
  5. d9e431790dfa gitlab/gitlab-ce "--help" 45 minutes ago Created 22/tcp, 80/tcp, 443/tcp intelligent_hopper

接下来我们要做的事情就是等待,一段时间(大约2~3分钟)之后,可以重新查看刚才的容器镜像的运行状态,此时我们可以发现状态变成了healthy

  1. [dechin-manjaro gitlab]# docker ps -n 3
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. c12732a4acfb gitlab/gitlab-ce "/assets/wrapper" 4 minutes ago Up 4 minutes (healthy)
  4. 36fc44248800 gitlab/gitlab-ce "/assets/wrapper" 49 minutes ago Exited (137) 10 minuteitras
  5. d9e431790dfa gitlab/gitlab-ce "--help" 49 minutes ago Created _hopper

这表示Gitlab容器的初始化已经完成了,接下来我们可以在本地的目录下(而不是容器内部的目录)找到名为gitlab.rb的配置文件,需要对其进行修改:

  1. [dechin-manjaro gitlab]# vi config/gitlab.rb

要修改的地方主要有以下几点:

  1. external_url 'http://192.168.0.105:82' # 大约在32行,注意替换本地ip地址
  2. gitlab_rails['gitlab_shell_ssh_port'] = 2222 # 大约在631行
  3. # nginx['redirect_http_to_https_port'] = 82 # 大约在1312行
  4. nginx['listen_port'] = 82 # 大约在1354行

修改完成后,重启gitlab的容器镜像(在上一次的run中,我们将其命名为gitlab):

  1. [dechin-manjaro gitlab]# docker restart gitlab
  2. gitlab

跟刚才一样的,需要看容器状态以确定是否启动成功:

  1. [dechin-manjaro gitlab]# docker ps -n 3
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS
  3. c12732a4acfb gitlab/gitlab-ce "/assets/wrapper" 13 minutes ago Up 12 seconds (health:
  4. 36fc44248800 gitlab/gitlab-ce "/assets/wrapper" 57 minutes ago Exited (137) 18 minutere_poitras
  5. d9e431790dfa gitlab/gitlab-ce "--help" 58 minutes ago Created igent_hopper

当状态变成了healthy之后,就可以进入下一步的工作:

  1. [dechin-manjaro gitlab]# docker ps -n 3
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS
  3. c12732a4acfb gitlab/gitlab-ce "/assets/wrapper" 15 minutes ago Up 2 minutes (healt
  4. 36fc44248800 gitlab/gitlab-ce "/assets/wrapper" About an hour ago Exited (137) 20 min_poitras
  5. d9e431790dfa gitlab/gitlab-ce "--help" About an hour ago Created ent_hopper

Gitlab配置

在前面的步骤都执行成功后,我们应该可以在浏览器中输入http://192.168.0.105:82/(这里注意替换本地ip地址,Linux系统可以通过ifconfig获取)打开Gitlab的管理界面如下:



首次登录会被要求重设密码,帐号是root。重设完密码之后,就可以进入Gitlab的登录页面:



输入root帐号和刚才设定的密码之后,就可以登录进入Gitlab主页:



在主页上点击创建项目,可以新建一个本地的项目:



创建好项目后的项目主页如下:



这里因为我们略过了一个步骤,在第一次使用Gitlab平台的时候,需要使用RSA加密生成密钥对,点击刚才界面上的添加ssh key进入添加密钥对的界面:



此时我们需要在本地终端窗口中执行如下的指令来产生密钥对:

  1. [dechin@dechin-manjaro projects]$ ssh-keygen -t rsa -b 2048
  2. Generating public/private rsa key pair.
  3. Enter file in which to save the key (/home/dechin/.ssh/id_rsa): private_gitlab.pub # 文件名,可以不加pub
  4. Enter passphrase (empty for no passphrase): # 输入自定义密码
  5. Enter same passphrase again: # 再次输入自定义密码
  6. Your identification has been saved in private_gitlab.pub
  7. Your public key has been saved in private_gitlab.pub.pub
  8. The key fingerprint is:
  9. SHA256:Xr3DhNi+8ZMJ×××××××××××××××××××0w dechin@dechin-manjaro
  10. The key's randomart image is:
  11. +---[RSA 2048]----+
  12. |o.. |
  13. |.. o. . . |
  14. |..+o + * |
  15. | . E o.oo++o |
  16. | o . .++. |
  17. | o.. . .. |
  18. +----[SHA256]-----+

执行完该指令会在当前目录下产生两个密钥文件:

  1. [dechin@dechin-manjaro projects]$ ll
  2. 总用量 8
  3. -rw------- 1 dechin dechin 1876 5 5 16:43 private_gitlab.pub
  4. -rw-r--r-- 1 dechin dechin 403 5 5 16:43 private_gitlab.pub.pub

其中少一个pub的文件是私钥,不应该暴露出来,而多一个pub的文件是公钥,需要复制这个文件中的字符串,输入到刚才Gitlab的配置中:

  1. [dechin@dechin-manjaro projects]$ cat private_gitlab.pub.pub
  2. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDt6VXrvTPhWr5iUy3KpIzRryX3SGBUAYietTMSqEOuZjRXr1u14lFk1cT5jwAHw7BtnfBOrwptTIYaWztoWR94gG1W1KFc6HRY0SWrUHtwXwOypWcqMv7Z2AT6TFIgNf/2ZZAlYisC0G9xTO5qTcYDyJe/88zcIm/5B6NQ7safAkGkGYY+WrFxBpnNU2bEdSbx4Sem2v2TD9GRxSg9RpLSXQaULi1bpDgGfxLJZBxj2Eeo11j9ayjipWFqJ43pJ dechin@dechin-manjaro

一般是以ssh-rsa开头的字符串,输入完成后点击Add Key,即可完成密钥对的配置:

代码仓基本操作

在完成前面章节的基本配置之后,就可以使用https的方式将需要托管的代码仓库clone下来同步操作,首先复制仓库链接:



到本地终端窗口执行git clone指令:

  1. [dechin@dechin-manjaro projects]$ git clone http://192.168.0.105:82/root/myfirstproject.git
  2. 正克隆到 'myfirstproject'...
  3. Username for 'http://192.168.0.105:82': root
  4. Password for 'http://root@192.168.0.105:82':
  5. remote: Enumerating objects: 3, done.
  6. remote: Counting objects: 100% (3/3), done.
  7. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
  8. 接收对象中: 100% (3/3), 完成.

完成克隆操作后,可以在当前目录下看到一个新生成的与仓库同名的文件夹,里面仅有一个项目初始化的readme文件,这也是创建项目时候所选择的配置:

  1. [dechin@dechin-manjaro projects]$ ll
  2. 总用量 12
  3. drwxr-xr-x 3 dechin dechin 4096 5 5 16:50 myfirstproject
  4. -rw------- 1 dechin dechin 1876 5 5 16:43 private_gitlab.pub
  5. -rw-r--r-- 1 dechin dechin 403 5 5 16:43 private_gitlab.pub.pub
  6. [dechin@dechin-manjaro projects]$ cd myfirstproject/
  7. [dechin@dechin-manjaro myfirstproject]$ ll
  8. 总用量 4
  9. -rw-r--r-- 1 dechin dechin 44 5 5 16:50 README.md

关于更多的git相关操作,读者可以参考这一篇博客,这里我们仅为了展示本地部署的gitlab的使用场景演示:

  1. [dechin@dechin-manjaro myfirstproject]$ mkdir src # 创建一个src目录
  2. [dechin@dechin-manjaro myfirstproject]$ cd src/
  3. [dechin@dechin-manjaro src]$ touch .gitkeep # 创建一个gitkeep文件,可以使得目录不被简化,空目录无法被git识别
  4. [dechin@dechin-manjaro src]$ git status # 查看修改状态
  5. 位于分支 master
  6. 您的分支与上游分支 'origin/master' 一致。
  7. 未跟踪的文件:
  8. (使用 "git add <文件>..." 以包含要提交的内容)
  9. ./
  10. 提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
  11. [dechin@dechin-manjaro src]$ git add ./ # 添加当前目录下的所有修改
  12. [dechin@dechin-manjaro src]$ git commit -m 'Create a folder from localhost' 提交修改说明
  13. [master 211278b] Create a folder from localhost
  14. 1 file changed, 0 insertions(+), 0 deletions(-)
  15. create mode 100644 src/.gitkeep
  16. [dechin@dechin-manjaro src]$ git push # 推送修改
  17. Username for 'http://192.168.0.105:82': root # 输入gitlab的用户名
  18. Password for 'http://root@192.168.0.105:82': # 输入gitlab的密码
  19. 枚举对象中: 5, 完成.
  20. 对象计数中: 100% (5/5), 完成.
  21. 使用 8 个线程进行压缩
  22. 压缩对象中: 100% (2/2), 完成.
  23. 写入对象中: 100% (4/4), 327 字节 | 327.00 KiB/s, 完成.
  24. 总共 4(差异 0),复用 0(差异 0),包复用 0
  25. To http://192.168.0.105:82/root/myfirstproject.git
  26. 5ee2b12..211278b master -> master

提交修改前后对比:





我们可以看到push完成后,Gitlab项目界面上多了一个src目录出来,这就说明变更提交成功了,而且每一次变更的说明信息都会被保存,最近一次的变更说明会在主页上显示出来。接下来再试试Gitlab的分支管理,新建一个分支,然后直接提交:

  1. [dechin@dechin-manjaro myfirstproject]$ git checkout -b dev
  2. 切换到一个新分支 'dev'
  3. [dechin@dechin-manjaro myfirstproject]$ git push
  4. fatal: 当前分支 dev 没有对应的上游分支。
  5. 为推送当前分支并建立与远程上游的跟踪,使用
  6. git push --set-upstream origin dev
  7. [dechin@dechin-manjaro myfirstproject]$ git push --set-upstream origin dev
  8. Username for 'http://192.168.0.105:82': root
  9. Password for 'http://root@192.168.0.105:82':
  10. 总共 0(差异 0),复用 0(差异 0),包复用 0
  11. remote:
  12. remote: To create a merge request for dev, visit:
  13. remote: http://192.168.0.105:82/root/myfirstproject/-/merge_requests/new?merge_request%5Bsource_branch%5D=dev
  14. remote:
  15. To http://192.168.0.105:82/root/myfirstproject.git
  16. * [new branch] dev -> dev
  17. 分支 'dev' 设置为跟踪来自 'origin' 的远程分支 'dev'



上传新的分支之后,就会在分支列表中看到不同的分支。那么除了这些提交修改同步的功能之外,Gitlab也有类似于Github的工作管理界面,比如个人活跃度:



比如基于Merge Request和Issue的任务提交与下发系统:



在同一个无线网络的局域网下,使用手机等终端设备也可以访问该私有的Gitlab仓库:



基本上功能还是比较完善的。而关于自动化集成的方案,会在后续介绍Jenkins的博客中再展开说明。

总结概要

本文按照操作流程的时间顺序,分别介绍了Gitlab的Docker容器部署、Gitlab平台的基本配置以及基于Git的代码仓基本管理与同步方法。通过掌握这一套的流程,就可以实现在本地构建一个类似于Github的代码托管系统,在企业内网更好的管理私有代码仓库,避免因为在Github上进行代码开发而被其他企业窃取核心技术。

版权声明

本文首发链接为:https://www.cnblogs.com/dechinphy/p/gitlab.html

作者ID:DechinPhy

更多原著文章请参考:https://www.cnblogs.com/dechinphy/

参考链接

  1. https://blog.csdn.net/shan165310175/article/details/92797199#commentBox

基于Docker配置本地Gitlab的更多相关文章

  1. 搭建并配置本地GitLab服务器教程

    由于工作单位不一定能够方便使用外部网络,现以下载rpm包来搭建一套本地GitLab服务器. 1. 系统准备 系统:redhat 7.3 2. 下载所需安装包 去官网下rpm包,下载地址,ce是免费的社 ...

  2. 上穷碧落下凡尘:Win10系统下基于Docker配置Elasticsearch7配合Python3进行全文检索交互

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_166 基于文档式的全文检索引擎大家都不陌生,之前一篇文章:使用Redisearch实现的全文检索功能服务,曾经使用Rediseac ...

  3. Docker配置本地镜像与容器的存储位置

    默认情况下Docker的存放位置为:/var/lib/docker 可以通过下面命令查看具体位置: sudo docker info | grep "Docker Root Dir" ...

  4. 基于docker搭建Jenkins+Gitlab+Harbor+Rancher架构实现CI/CD操作(续)---Harbor的安装

    前期安装文档:https://www.cnblogs.com/lq-93/p/11828626.html Harbor的作用:     开发提交代码至gitlab容器中,Jenkins拉取代码构建镜像 ...

  5. 基于docker搭建Jenkins+Gitlab+Harbor+Rancher架构实现CI/CD操作(续)

    说明:前期的安装,请转向https://www.cnblogs.com/lq-93/p/11824039.html (4).查看gitlab镜像是否启动成功 docker inspect  容器id  ...

  6. 基于docker搭建Jenkins+Gitlab+Harbor+Rancher架构实现CI/CD操作

    一.各个组件的功能描述: Docker 是一个开源的应用容器引擎. Jenkis 是一个开源自动化服务器. (1).负责监控gitlab代码.gitlab中配置文件的变动: (2).负责执行镜像文件的 ...

  7. ubunt 基于deb 配置本地apt 源 分成仅本机使用,局域网使用2种

    dpkg-scanpackages /software /dev/null | gzip>/software/Packages.gz

  8. 基于Docker在Win10平台搭建Ruby on Rails 6.0框架开发环境

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_170 2020年,"非著名Web框架"–Ruby on Rails已经15岁了.在今年,Rails 6.0趋于 ...

  9. 如何搭建基于Docker的gitlab服务器集成CI/CD实现DEVOPS(完整版)

    From this lesson you will learn about 1,How to install and configure a docker based gitlab server 2, ...

随机推荐

  1. docker启动ubuntu的桌面环境

    一.概述 由于最近一段时间在家办公,国内服务器在阿里云,国外站点在aws.家里的移动宽带比较差,无法访问aws. 所以尝试在阿里云启动docker,找到一个lxde桌面环境的ubuntu镜像. 二.启 ...

  2. vue监听生命周期

    监听生命周期事件 内部监听声明周期函数 data() { return { monitor: null }; }, mounted() { this.monitor = setInterval(() ...

  3. C# 中 string.Empty、""、null的差别

    一.string.Empty 和 ""                                                           原文1   原文2 1. ...

  4. Java 使用BigDecimal计算值没有变化?

    BigDecimal 加减乘除后自身变量不会变化, 需要定义一个新的BigDecimal来获取计算好后的值

  5. Linux入门视频笔记四(vim入门)

    一.vim的基本介绍(纯命令模式编辑器) 1.vim的两种模式:命令模式(不能输入任何东西).编辑模式(按i进入编辑模式) 2.ESC:从编辑模式退出到命令模式 3.保存: ①:wq code.c(如 ...

  6. [系统重装日志2]win10系统安装pytorch0.4.1(gpu版本)

    目录 0,资源整理 1,安装最新版的显卡驱动 2,安装visual studio 3,安装cuda 4,安装cudnn,配置环境变量 5,安装pytorch 6,安装torchvision 7,验证 ...

  7. 13、Script file 'E:\Anaconda Distribution\Anaconda\Scripts\pip-script.py' is not present.

    pip-script.py文件缺失问题 问题: Script file 'E:\Anaconda Distribution\Anaconda\Scripts\pip-script.py' is not ...

  8. 一款轻阅读应用ReadIT,记录我的RN躺坑之旅

    背景 一款轻阅读应用ReadIT,支持功能:优质文章推送.评论点赞.计划制定.计划闹钟.天气预报.收藏文章.深浅两套主题.多语言切换.极光推送等功能.后续还会继续集成功能.前后端均自主研发,借鉴市面较 ...

  9. 第14 章 : Kubernetes Service讲解

    Kubernetes Service 本文将主要分享以下四方面的内容: 为什么需要 K8s service: K8s service 用例解读: K8s service 操作演示: K8s servi ...

  10. Database | 浅谈Query Optimization (1)

    综述 由于SQL是声明式语言(declarative),用户只告诉了DBMS想要获取什么,但没有指出如何计算.因此,DBMS需要将SQL语句转换成可执行的查询计划(Query Plan).但是对同样的 ...