通过 docker-compose 快速部署 gitlab
一、概述
GitLab是一个基于Web的Git存储库管理器,为软件开发提供完整的DevOps平台。它允许开发人员协作编写代码,管理项目,并自动化软件交付过程。GitLab提供广泛的功能,包括版本控制、问题跟踪、持续集成和部署、代码审查等等。
GitLab有两个版本:社区版和企业版。社区版是开源的,可以免费使用,而企业版是商业产品,提供额外的功能和支持。
一些关键特性包括:
-
Git存储库管理:GitLab提供一个集中式的位置来存储和管理Git存储库。
-
持续集成和部署(CI/CD):GitLab提供内置的CI/CD流水线,自动化代码更改的测试、构建和部署。
-
问题跟踪:GitLab提供内置的问题跟踪系统,允许开发人员跟踪错误和功能请求。
-
代码审查:GitLab允许开发人员在代码更改之前进行审查和讨论,以提高代码质量。
官方文档:docs.gitlab.com/ee/
版本分为:社区版(CE),企业版(EE)
二、gitlab 架构原理
-
repository
:代码库,可以是硬盘或 NFS 文件系统 -
Nginx
:Web 入口 -
postgresql 数据库
:包含以下信息:-
repository
中的数据(元数据,issue,合并请求 merge request 等) - 可以登录 Web 的用户(权限)
-
-
Redis
:缓存,负责分发任务 -
sidekiq
:后台任务,主要负责发送电子邮件。任务需要来自 Redis -
Unicorn
:Gitlab 自身的 Web 服务器,包含了 Gitlab 主进程,负责处理快速/一般任务,与 Redis 一起工作。工作内容包括:- 通过检查存储在 Redis 中的用户会话来检查权限
- 为 Sidekiq 制作任务
- 从仓库(warehouse)取东西或在那里移动东西
-
gitlab-shell
:用于 SSH 交互,而不是 HTTP。gitlab-shell 通过 Redis 与 Sidekiq 进行通信,并直接或通过 TCP 间接访问 Unicorn -
gitaly
:后台服务,专门负责访问磁盘以高效处理 git 操作,并缓存耗时操作。所有的 git 操作都通过 Gitaly 处理 -
gitlab-workhorse
:反向代理服务器,可以处理与 Rails 无关的请求(磁盘上的CSS、JS 文件等),处理Git Push/Pull 请求,处理到Rails的连接(修改由Rails发送的响应或发送给 Rails 的请求,管理 Rails 的长期 WebSocket 连接等)。 -
mail_room
:处理邮件请求。回复 GitLab 发出的邮件时,GitLab 会调用此服务
总之,GitLab的架构旨在提供一个高度可定制和可扩展的DevOps平台,以支持现代软件开发和交付的需求。
三、前期准备
1)部署 docker
# 安装yum-config-manager配置工具
yum -y install yum-utils
# 建议使用阿里云yum源:(推荐)
#yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker-ce版本
yum install -y docker-ce
# 启动并开机启动
systemctl enable --now docker
docker --version
2)部署 docker-compose
curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
四、直接通过 docker 部署 gitlab
官方文档:docs.gitlab.com/ee/install/…
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 22: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 \
--shm-size 256m \
gitlab/gitlab-ce:latest
获取密码
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
访问:http://ip
或者 http://${hostname}
五、通过docker-compose部署 gitlab
1)下载 gitlab 镜像
# 这里安装社区版,企业版:gitlab/gitlab-ee:latest
docker pull gitlab/gitlab-ce:latest
2)docker-compose 文件配置
在当前目录下创建目录
mkdir config logs data
docker-compose.yaml
version: '3.6'
services:
web:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'www.mygitlab.com'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.182.110:30080' # web站点访问地址
# Add any other gitlab.rb configuration here, each on its own line
ports:
- '30080:30080' # 注意宿主机和容器内部的端口要一致,否则external_url无法访问
- '30443:443'
- '30022:22'
volumes:
- './config:/etc/gitlab'
- './logs:/var/log/gitlab'
- './data:/var/opt/gitlab'
shm_size: '256m'
3)执行部署
docker-compose -f docker-compose.yml up -d
# 查看日志
docker-compose logs -f
# 查看状态
docker-compose -f docker-compose.yml ps
容器起来之后,默认用户是root
,要登录web界面需要先进入容器的这个文件获取密码:
docker exec -it gitlab-web-1 grep 'Password:' /etc/gitlab/initial_root_password
web 访问:http://ip:port
4)解读 gitlab Dockerfile 文件
FROM ubuntu:20.04
MAINTAINER GitLab Inc. <support@gitlab.com>
SHELL ["/bin/sh", "-c"]
# 设置编码
ENV LANG=C.UTF-8
# 安装必须得依赖包
# BusyBox 是一个小型可执行文件,它结合了许多常见 UNIX 实用程序的精简版。它占用很小的体积,通常用在嵌入式设备上。 在安卓系统上安装busybox,就可以运行更多的unix命令如vi,find,grep,cat,wegt等。
# tzdata软件包:是一组表示地球上各地的时间历史的代码和数据,目前由IANA维护。
RUN apt-get update -q \
&& DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
busybox \
ca-certificates \
openssh-server \
tzdata \
wget \
&& rm -rf /var/lib/apt/lists/*
# 使用 BusyBox
ENV EDITOR /bin/vi
RUN busybox --install \
&& { \
echo '#!/bin/sh'; \
echo '/bin/vi "$@"'; \
} > /usr/local/bin/busybox-editor \
&& chmod +x /usr/local/bin/busybox-editor \
&& update-alternatives --install /usr/bin/editor editor /usr/local/bin/busybox-editor 1
# 删除 MOTD
# MOTD 是message of the day的缩写,意思是“当天的提示信息”,通常在用户成功登录到Linux后出现,该信息可以从/etc/motd文本文件中找到
RUN rm -rf /etc/update-motd.d /etc/motd /etc/motd.dynamic
RUN ln -fs /dev/null /run/motd.dynamic
# 拷贝资源
COPY RELEASE /
COPY assets/ /assets/
# 设置资源的权限,去掉w写权限
RUN chmod -R og-w /assets RELEASE ; \
/assets/setup
# 允许访问内置的工具
ENV PATH /opt/gitlab/embedded/bin:/opt/gitlab/bin:/assets:$PATH
# 设置TERM环境变量
ENV TERM xterm
# 暴露ssh, http, ssh端口
EXPOSE 443 80 22
# 定义卷
VOLUME ["/etc/gitlab", "/var/opt/gitlab", "/var/log/gitlab"]
# 包装器来处理信号、触发runit并重新配置GitLab
CMD ["/assets/wrapper"]
# 配置健康检查
HEALTHCHECK --interval=60s --timeout=30s --retries=5 \
CMD /opt/gitlab/bin/gitlab-healthcheck --fail --max-time 10
六、gitlab 操作(拉取和提交代码)
1)配置 ssh 秘钥
2)创建项目
3)拉取代码
git clone git@192.168.182.110:root/test.git
4)提交代码
git add .
git commit -m "test"
git push origin master
这里只是浅显的演示了,关于更多git的操作可以参考我之前的文章:Git常用操作(Gitlab)
七、gitlab 常用命令
# 启动所有 gitlab 组件;
gitlab-ctl start
# 停止所有 gitlab 组件;
gitlab-ctl stop
# 重启所有 gitlab 组件;
gitlab-ctl restart
# 查看服务状态;
gitlab-ctl status
# 修改gitlab配置文件;
vim /etc/gitlab/gitlab.rb
# 重新编译gitlab的配置;
gitlab-ctl reconfigure
# 检查gitlab;
gitlab-rake gitlab:check SANITIZE=true --trace
# 查看日志;
gitlab-ctl tail
gitlab-ctl tail nginx/gitlab_access.log
gitlab 一般作为公司的内部代码仓库,用的还是比较多的,通过docker-compose 快速部署 gitlab 的讲解就先到这里了,有任何疑问欢迎给我留言或私信哦,也可关注我的公众号【大数据与云原生技术分享】加群交流或私信沟通哦~
推荐阅读
-
纯干货分享 | 研发效能提升——敏捷需求篇-而敏捷需求是提升效能的方式中不可或缺的模块之一。 云智慧的敏捷教练——Iris Xu近期在公司做了一场分享,主题为「敏捷需求挖掘和组织方法,交付更高业务价值的产品」。Iris具有丰富的团队敏捷转型实施经验,完成了企业多个团队从传统模式到敏捷转型的落地和实施,积淀了很多的经验。 这次分享主要包含以下2个部分: 第一部分是用户影响地图 第二部分是事件驱动的业务分析Event driven business analysis(以下简称EDBA) 用户影响地图,是一种从业务目标到产品需求映射的需求挖掘和组织的方法。 在软件开发过程中可能会遇到一些问题,比如大家使用不同的业务语言、技术语言,造成角色间的沟通阻碍,还会导致一些问题,比如需求误解、需求传递错误等;这会直接导致产品的功能需求和要实现的业务目标不是映射关系。 但在交付期间,研发人员必须要将这些需求实现交付,他们实则并不清楚这些功能需求产生的原因是什么、要解决客户的哪些痛点。研发人员往往只是拿到了解决方案,需要把它实现,但没有和业务侧一起去思考解决方案是否正确,能否真正的帮助客户解决问题。而用户影响地图通常是能够连接业务目标和产品功能的一种手段。 我们在每次迭代里加入的假设,也就是功能需求。首先把它先实现,再逐步去验证我们每一个小目标是否已经实现,再看下一个目标要是什么。那影响地图就是在这个过程中帮我们不断地去梳理目标和功能之间的关系。 我们在软件开发中可能存在的一些问题 针对这些问题,我们如何避免?先简单介绍做敏捷转型的常规思路: 先做团队级的敏捷,首先把产品、开发、测试人员,还有一些更后端的人员比如交互运维的同学放在一起,组成一个特训团队做交付。这个团队要包含交付过程中所涉及的所有角色。 接着业务敏捷要打通整个业务环节和研发侧的一个交付。上图中可以看到在敏捷中需求是分层管理的,第一层是业务需求,在这个层级是以用户目标和业务目标作为输入进行规划,同时需要去考虑客户的诉求。业务人员通过获取到的业务需求,进一步的和团队一起将其分解为产品需求。所以业务需求其实是我们真正去发布和运营的单元,它可以被独立发布到我们的生产环境上。我们的产品需求其实就是产品的具体功能,它是我们集成和测试的对象,也就是我们最终去部署到系统上的一个基本单元。产品需求再到了我们的开发团队,映射到迭代计划会上要把它分解为相应的技术任务,包括我们平时所说的比如一些前端的开发、后端的开发、测试都是相应的技术任务。所以业务敏捷要达到的目标是需要去持续顺畅高质量的交付业务价值。 将这几个点串起来,形成金字塔结构。最上层我们会把业务目标放在整个金字塔的塔尖。这个业务目标是通过用户的目标以及北极星指标确立的。确认业务目标后再去梳理相应的业务流程,最后生产。另外产品需求包含了操作流程和业务规则,具需求交付时间、工程时间以及我们的一些质量标准的要求。 谈到用户影响的地图,在敏捷江湖上其实有一个传说,大家都有一个说法叫做敏捷需求的“任督二脉”。用户影响地图其实就是任脉,在黑客马拉松上用过的用户故事地图其实叫督脉。所以说用户影响地图是在用户故事地图之前,先帮我们去梳理出我们要做哪些东西。当我们真正识别出我们要实现的业务活动之后,用户故事地图才去梳理我们整个的业务工作流,以及每个工作流节点下所要包含的具体功能和用户故事。所以说用户影响地图需要解决的问题,我们包括以下这些: 首先是范围蔓延,我们在整张地图上,功能和对应的业务目标是要去有一个映射的。这就避免了一些在我们比如有很多干系人参与的会议上,那大家都有不同想法些立场,会提出很多需求(正确以及错误的需求)。这个时候我们会依据目标去看这些需求是否真的是会影响我们的目标。 这里提到的错误需求,比如是利益相关的人提出的、客户认为产品应该有的、某个产品经理需求分析师认为可以有的....但是这些功能在用户影响地图中匹配不到对应目标的话,就需要降低优先级或弃掉。另外,通常我们去制定解决方案的时候,会考虑较完美的实现,导致解决方案括很多的功能。这个时候关键目标至关重要,会帮助我们梳理筛选、确定优先级。 看一下用户影响到地图概貌 总共分为一个三层的结构: 第一层why,你的业务目标哪个是最重要的,为什么?涉及到的角色有哪些? 第二层how ,怎样产生影响?影响用户角色什么样的行为? (不需要去列出所有的影响,基于业务目标) 第三层what,最关键的是在梳理需求时不需一次把所有细节想全,这通常团队中经常遇到的问题。 我们用这个例子来看一下 这是一个客服中心的影响地图,业务目标是 3个月内不增加客服人数的前提下能支持1.5倍的用户数。此业务目标设定是符合 smart 原则的,specific非常的具体,miserable 是可以衡量的,action reoriented是面向活动的, real list 也是很实际的。 量化的目标会指引我们接下来的行动,梳理一个业务目标,尽量去量化,比如 :我们通过打造一条什么样的流水线,能够提高整个部署的效率,时间是原来的 1/2 。这样才是一个能量化的有意义的目标。 回到这幅图, how 层级识别出来的内容,客服角色:想要对它施加的影响,把客户引导到论坛上,帮助客户更容易的跟踪问题,更快速的去定位问题。初级用户:方论坛上找到问题。高级用户:在论坛上回答问题。通过我们这些用户角色,进行活动,完成在不增加客户客服人数的前提下支持更多的用户数量。 最后一个层级,才是我们日常接触比较多的真正的功能的特性和需求,比如引导到客户到论坛上,其实这个产品就需要有一个常见问题的论坛的链接。这个层次需要我们团队进一步地在交付,在每个迭代之前做进一步的梳理,细化成相应的用户故事。 这个是云智慧团队中,自己做的影响地图的范例,可以看下整个的层级结构。序号表示优先级。 那我们用户影响地图可以总结为:
-
澎湃新闻对话腾讯丁珂:从 "治已病 "到 "治未病",企业需快速构建 "安全免疫力"--丁珂指出,对企业而言,安全不是成本而是生命线 丁珂指出,对企业而言,安全不是成本而是生命线,也是商业 "硬币 "的另一面。在数字智能化的新阶段,发展驱动安全建设已成为普遍共识,企业需要转变安全思维,从被动建设到主动防御,构建一套新的安全范式和框架,以更加积极、主动的安全观来提升数字安全免疫力,以 "治未病 "的理念取代 "治已病",前置安全,快速构建 "安全免疫力"。对 "已病",前置预判,及时应对处置安全风险,才能维护品牌价值,保障健康发展。 与此同时,安全建设还普遍存在 "不知道往哪投、怎么投 "的痛点。对此,腾讯安全提出,企业可以按照数字安全免疫模型的框架进行安全全局部署,重点在业务安全、数据安全、安全运维管理、边界安全、终端安全、应用开发安全等薄弱环节的关键领域注入 "免疫增强针"。 今年进入公众视野的AIGC还在产业化、产品化的过程中,但大量攻击者已经利用它生成攻击脚本、钓鱼邮件,甚至伪造身份进行诈骗。"人工智能本身是否安全,会不会让网络更不安全? 腾讯安全研究认为,AIGC的风险主要集中在 "无法解释 "和 "无法追踪 "的特点上,但这在技术上是能够找到应对方法的。丁珂谈到,AIGC作为生产力的巨大提升,确实会带来更复杂的攻防态势和更大的防御难度。但任何新技术都要经历这样的周期。而法律法规也会随着技术的演进而不断更新,使新技术的发展更加规范和健全。 丁珂认为,随着我国网络安全法律法规体系的不断完善,合规性将给企业推进网络安全带来很大的推动力,并很直观地展现在需求端。未来,伴随着数据要素市场的建立或企业对数据价值的挖掘,也将带动数据安全市场的快速增长。 对于腾讯安全的商业逻辑和运营,丁珂表示,不谋求建立竞争壁垒,而是期望与生态共同发展,腾讯安全希望通过能力开放,实现安全与业务相伴的生态模式。 谈到未来,丁磊表示,安全领域已经进入加速发展期,在蓝海中会持续关注很多新的业务领域,希望孵化出新的商业模式,腾讯安全团队也会持续关注并抓住机会做好产品。 以下为采访实录(在不改变原意的基础上略有删减): 冲浪新闻:当前,以人工智能、大数据等新技术为驱动的第四次工业革命正向纵深推进,给人类生产生活带来深刻变革。而互联网作为新技术的载体,面临的安全挑战不仅数量越来越多,形式也越来越复杂。从互联网安全从业者的角度,腾讯观察到近年来国内外网络安全形势发生了哪些变化?这些变化呈现出怎样的趋势?
-
如何轻松创建个性炫酷博客:借助Docker、Docker-Compose和Nginx的 halo 快速部署指南(第一部分)
-
快速了解GitLab的安装、部署与服务设置全攻略
-
如何快速部署与启动 GitLab,以及访问指南
-
快速部署 Gitlab 并实现中文界面汉化指南
-
通过 docker-compose 快速部署 gitlab
-
如何轻松地使用docker-compose搭建并部署 GitLab 中文版本
-
快速了解 SkyWalking,并通过 Docker Compose 部署服务
-
通过 docker-compose 快速部署 MySQL保姆级教程