首页 > 其他分享 >DevOps实战系列【第二章】:详解Gitlab环境及搭建

DevOps实战系列【第二章】:详解Gitlab环境及搭建

时间:2023-01-08 11:36:58浏览次数:57  
标签:gitlab Gitlab DevOps rails etc 详解 docker 1.199 8929

个人亲自录制全套DevOps系列实战教程 :​​手把手教你玩转DevOps全栈技术​

DevOps实战系列【第二章】:详解Gitlab环境及搭建_docker


gitlab就不多说了,这个东西现在大多数公司内部都在使用,它分为社区和企业版本,社区版本ce是免费的,当然也可以选择gitee或github,但由于一些情况gitlab还是最受欢迎的。

首先在docker服务器根目录创建gitlab目录,表示将所有gitlab容器的数据都会映射到/docker/gitlab目录

网络规划

创建网络:通用同一个网段

docker network create --subnet=172.2.1.0/24 devops

目录规划

首先在docker服务器根目录创建gitlab目录表示将所有gitlab容器的数据都会映射到 /docker/gitlab 目录

cd /docker
mkdir gitlab

拉取Gitlab最新镜像

官网地址:​​https://docs.gitlab.com/ee/install/docker.html​

docker pull gitlab/gitlab-ce:latest

运行Gitlab容器

通过docker-compose.yml运行

我们知道docker-compose是可以编排复杂容器关系的工具,该文件中可以通过设置docker容器的多维属性并能同时创建运行多个容器,可以和kubernetes的yaml类比。

# 创建vi docker-compose.yml文件,保存到宿主机的/docker/gitlab目录。

version: '3' # docker-compose可以使用1、2、3版本,1版本已经基本弃用了,2、3分别会支持更多的指令,我们使用3即可,具体可参考官网对照表查看指令支持
services:
gitlab:
image: 'gitlab/gitlab-ce:latest' # 使用的gitlab镜像版本[其他参数见方案一解释]
restart: always
container_name: 'gitlab'
hostname: 'gitlab'
environment:
GITLAB_OMNIBUS_CONFIG: |
# Add any other gitlab.rb configuration here, each on its own line
external_url 'http://10.10.1.199:8929'
gitlab_rails['gitlab_shell_ssh_port'] = 2224
ports:
- '8929:80'
- '2224:22'
# - '9443:443' # 如果需要https访问则需要映射443端口
networks:
- 'exist-net-bloom' # 当前创建的容器加入到外部的bloom网络
volumes:
- '/docker/gitlab/config:/etc/gitlab'
- '/docker/gitlab/logs:/var/log/gitlab'
- '/docker/gitlab/data:/var/opt/gitlab'
- '/etc/timezone:/etc/timezone:ro'
- '/etc/localtime:/etc/localtime:ro'
shm_size: '256m'
networks:
exist-net-bloom: # 改名字为当前docker-compose中要引用的名字
external: # 指定已经存在的网络名字
name: devops
# 命令行执行,运行docker编排内容
docker-compose up -d
# 观察docker运行日志
docker logs -f gitlab

统一配置部分

修改docker容器内的gitlab配置, 完成gitlab容器的高级映射[避免修改宿主机映射的目录文件]

1.修改容器中vi /etc/gitlab/gitlab.rb配置,增加对外映射的ip,可以认为指定对外开放哪个ip可以访问

# 进容器内部
docker exec -it gitlab /bin/bash

# 修改gitlab.rb
vi /etc/gitlab/gitlab.rb

# 加入如下配置内容
# gitlab访问地址,可以写域名。如果端口不写的话默认为80端口,10.10.1.199是我omv(宿主机)的ip地址,大家可以根据自己的情况设置
external_url 'http://10.10.1.199'

#ssh主机ip
gitlab_rails['gitlab_ssh_host'] = '10.10.1.199'
#ssh连接端口
gitlab_rails['gitlab_shell_ssh_port'] = 2224

# 让配置生效
gitlab-ctl reconfigure
2.修改容器中vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

gitlab:
host: 10.10.1.199 # 因为上面的修改生效后会自动更新到改文件,所以host不用改
port: 8929 # 这里需要改成外部映射的8929端口
https: false # 如果想通过https访问,此处设置成true

# 让配置生效
gitlab-ctl restart

3.安装完后进入容器查看默认gitlab密码,用户名: root
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

​注意:​​安装完后查看容器日志,可能会发现如下错误

err="create memberlist: Failed to get final advertise address: No private IP address found, and explicit IP not provided"
# 错误原因是因为alertmanager配置的监听地址是localhost,
# 此处需要指定127.0.0.1,修改vi /etc/gitlab/gitlab.rb如下:
alertmanager['flags'] = {
'cluster.advertise-address' => "127.0.0.1:9093"
}

# 指定后使配置生效即可
gitlab-ctl reconfigure

其他配置

邮箱配置:用于用户操作时推送关键性信息

# 1.修改容器中配置文件vi /etc/gitlab/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.126.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "[email protected]"
gitlab_rails['smtp_password'] = "xxx"
gitlab_rails['smtp_domain'] = "smtp.126.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true

gitlab_rails['gitlab_email_from'] = '[email protected]'
gitlab_rails['gitlab_email_display_name'] = 'gitlab'

user['git_user_email'] = "[email protected]"

# 2.重启配置
gitlab-ctl reconfigure
gitlab-ctl restart

# 3.测试:首先进入控制台
gitlab-rails console
# 执行测试命令
Notify.test_email("接收邮箱","标题","内容").deliver_now

# 4.输出如下内容就是成功了
root@gitlab:/# gitlab-rails console
--------------------------------------------------------------------------------
Ruby: ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-linux]
GitLab: 14.6.1 (661d663ab2b) FOSS
GitLab Shell: 13.22.1
PostgreSQL: 12.7
--------------------------------------------------------------------------------
Loading production environment (Rails 6.1.4.1)
irb(main):001:0> Notify.test_email("[email protected]","ceshi","内容").deliver_now
Delivered mail [email protected] (1436.8ms)
=> #<Mail::Message:154820, Multipart: false, Headers: <Date: Wed, 02 Nov 2022 23:03:47 +0800>, <From: gitlab <[email protected]>>, <Reply-To: gitlab <[email protected]>>, <To: [email protected]>, <Message-ID: <[email protected]>>, <Subject: ceshi>, <Mime-Version: 1.0>, <Content-Type: text/html; charset=UTF-8>, <Content-Transfer-Encoding: 7bit>, <Auto-Submitted: auto-generated>, <X-Auto-Response-Suppress: All>>

坑和疑惑

# 按照以上方式启动docker会遇到一个坑,就是注册用户后,给新用户发邮件需要新用户点击邮件中的链接去重置密码,而链接点击后却是空白页?
# 这是因为邮件的链接是指向了10.10.1.199:80,并没有使用我们映射到宿主机的8929端口,这是因为我们在配置external_url 'http://10.10.1.199'时用的是默认的80,
# 那就简单了,直接指定external_url 'http://10.10.1.199:8929'不就行了吗?
# 这样改问题更大,直接通过http://10.10.1.199:8929都不能访问gitlab了,那怎么办?

# 其实问题出在docker创建时的端口映射,我们把容器的80->映射到了宿主的8929,而宿主内部使用的是80,而external_url 'http://10.10.1.199'对外的地址也是80,
# 所以改起来也很简单,就是让宿主机内部也是用8929,这样在external_url这里就可以使用external_url 'http://10.10.1.199:8929'了。

更正后的docker-compose.yml如下:

version: '3' services: gitlab: image: 'gitlab/gitlab-ce:latest' # 使用的gitlab镜像版本[其他参数见方案一解释] restart: always container_name: 'gitlab' hostname: 'gitlab' environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://10.10.1.199:8929' gitlab_rails['gitlab_shell_ssh_port'] = 2224 alertmanager['flags'] = {'cluster.advertise-address' => "127.0.0.1:9093"} ports: - '8929:8929' - '2224:22' # - '9443:443' # 如果需要https访问则需要映射443端口 networks: - 'exist-net-bloom' # 当前创建的容器加入到外部的bloom网络 volumes: - '/docker/gitlab/config:/etc/gitlab' - '/docker/gitlab/logs:/var/log/gitlab' - '/docker/gitlab/data:/var/opt/gitlab' - '/etc/timezone:/etc/timezone:ro' - '/etc/localtime:/etc/localtime:ro' shm_size: '256m' networks: exist-net-bloom: # 改名字为当前docker-compose中要引用的名字 external: # 指定已经存在的网络名字 name: devops

​疑惑:​​有的小伙伴可能注意了,你的GITLAB_OMNIBUS_CONFIG环境变量中不是指定了external_url '​​http://10.10.1.199:8929​​'吗?怎么实际设置vi /etc/gitlab/gitlab.rb的时候却使用了external_url '​​http://10.10.1.199​​'不带端口的?

​官方的解释:​​GITLAB_OMNIBUS_CONFIG这个变量可以指定所有gitlab.rb配置文件中的属性,但这个不会写入到容器的gitlab.rb配置文件,所以他只是一个临时的配置,实际运行是还是使用的gitlab.rb中的配置。

​疑惑:​​既然不生效,为什么要在docker-compose.yml中指定呢?

其实直接说不生效并不准确,通过GITLAB_OMNIBUS_CONFIG指定的参数,在我不重新读gitlab.rb配置时确实是生效的,但是当重新执行gitlab-ctl reconfigure后就会以gitlab.rb中的配置为准了。而我们以上操作确实在启动docker容器后又改了gitlab.rb并重启加载,这样就导致GITLAB_OMNIBUS_CONFIG是失效的。

​细节:​​其实不知道大家有没有注意,如果按照我上边的操作,执行完docker-compose.yml启动容器后,直接访问http://10.10.1.199:8926是无响应的,就是因为这个时候GITLAB_OMNIBUS_CONFIG的设置生效了,因为这里我指定的external_url '​​http://10.10.1.199:8929​​'是带端口的,而宿主和容器的映射却是8929->80。

​最后一步:​​所以按照正确的修正,修改了docker-compose.yml中的端口映射后,还需要修改一下vi /etc/gitlab/gitlab.rb才算完整:

external_url 'http://10.10.1.199:8929'

重新部署gitlab:
因为修改了docker-compose.yml,所以需要更新一下配置并构建

# 关闭并移除现有gitlab容器 docker-compose down # 重构并启动:【之前的配置并不会丢失】 docker-compose up -d --build

常用命令

命令

描述

gitlab-ctl reconfigure

重载配置

gitlab-ctl check-config

检查配置并启动

gitlab-ctl diff-config

将用户配置与包可用配置进行比较

gitlab-ctl status

查看所有启动组件的进程和状态

gitlab-ctl service-list

查看所有服务

gitlab-ctl stop

停止GitLab服务

gitlab-ctl start

启动GitLab服务

gitlab-ctl restart

重启GitLab服务

gitlab-ctl once

如服务已停止则启动,如服务已启动则重启

常用修改

gitlab默认的主分支是main:

# 修改路径: Menu->Admin->Settings->Repository->Default initial branch name自行设置,比如master是我们常用的主分支。

gitlab默认开启了分支保护:

# 不是owner用户需要mergerequest,测试期间可以暂时关闭,线上一般是开启的,为了安全,夜方便codereview。 # 关闭路径: Menu->Admin->Settings->General->Visibility and access controls->选中”Not protected“

以上参考官方文档:
​https://docs.gitlab.cn/jh/install/docker.html​

标签:gitlab,Gitlab,DevOps,rails,etc,详解,docker,1.199,8929
From: https://blog.51cto.com/u_15909716/5996596

相关文章

  • DevOps实战系列【第三章】:详解Maven仓库及环境搭建
    个人亲自录制全套DevOps系列实战教程:​​手把手教你玩转DevOps全栈技术​​Maven私有仓库,就不多说了,我们这里选用最新的Nexus3的3.17版本,平时公司使用的都是Nexus2.x,新的......
  • 嵌入式:人机交互接口设计详解
    键盘和LED的接口原理HA7279A是一片具有串行接口并可同时驱动8位共阴式数码管或64只独立LED的智能显示驱动芯片。该芯片同时可连接多达64键的键盘矩阵,一片即可完成LED显示及......
  • [Docker] 将容器打包成镜像、镜像分层机制详解
    目录commit命令创建一个容器打包镜像联合文件系统联合文件系统实践前置准备不使用联合文件系统的挂载使用联合文件系统进行挂载写时复制机制commit命令#将容器打包成......
  • nohup命令详解
    原文地址:https://www.cnblogs.com/sddai/p/14681585.html1.nohup用途:不挂断地运行命令。语法:nohupCommand[Arg…][&]无论是否将nohup命令的输出重定向......
  • 玩转SpringBoot之定时任务详解
        pom文件<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins......
  • 【Python】open及file函数详解
    open函数python内置函数,一般用于本地文件的读写操作,创建一个 file 对象,调用file()方法进行读写。Tips:file对象需要调用close#参数@params:file:str|by......
  • 详解价内税&价外税
    本文概要本文将对价内税、价外税、含税价、不含税格等概念进行介绍通过三个例题让你彻底明白计算价内税、价外税、商家可得金额、消费者应付金额的具体逻辑对一些常用的税率......
  • 数据可视化大屏应急管理综合指挥调度系统完整案例详解(PHP-API、Echarts、百度地图)
    文章目录​​项目说明​​​​一、项目说明​​​​单位信息数据库字段:​​​​资源数据库字段​​​​项目需求​​​​二、项目开发​​​​1.项目分析​​​​2.引入库​......
  • 指针详解(C语言进阶)
    字符指针指针数组自学b站“鹏哥C语言”笔记。本章笔记不全。回顾:在文章【初识指针】中,我们已经了解到的指针概念有指针是一种变量,用来存放地址,地址唯一标识一块内存空间。指......
  • DevOps实践指南读后感-5
    DevOps实践指南DevOps是一种软件工程文化和实践,旨在统一整合软件开发和软件运维。DevOps运动的主要特点是强烈倡导对构建软件的所有环节(从集成、测试、发布到部署和基础架......