GitLab 搭建

本贴最后更新于 944 天前,其中的信息可能已经事过景迁

首先安装 docker 和 docker-compose,然后新建 doker-compose.yml 并配置如下:

gitlab:
  image: 'gitlab/gitlab-ce:latest'
  restart: always
  hostname: 'git.example.com'
  ports:
    - '80:80'
    - '443:443'
    - '9922:22'
  volumes:
    - '/srv/gitlab/config:/etc/gitlab'
    - '/srv/gitlab/logs:/var/log/gitlab'
    - '/srv/gitlab/data:/var/opt/gitlab'

然后根据需要修改 /srv/gitlab/config/gitlab.rb 文件,然后重启容器或者或者进入到容器内执行 gitlab-ctl reconfigure 命令使新配置生效

smtp 配置成功以后可以进入容器,执行 gitlab-rails console,然后再执行 Notify.test_email('test@example.com', 'Subject', 'Text').deliver_now 发送一封邮件来检查 smtp 配置

由于 git 的 ssh 和系统 ssh 都使用 22 号端口,所以需要映射出来的端口需要不一样,或者服务器有多个 ip,ssh 和 gitlab 分别监听不同 ip 的 22 号端口。

如果只有一个 ip,又觉得 ssh clone 的地址是 这样的格式不好看,需要进行一些配置:

  • 进入到容器内查看 /etc/group/etc/passwd 中 git 用户配置的 gid 和 uid,这里假设都是 998

  • 在宿主机上使用 groupadd -g 998 gituseradd -m -u 998 -g git -s /bin/sh -d /home/git git 创建和容器内相同 gid 和 uid

  • 同时再将 /srv/gitlab/data/.ssh/authorized_keys 软链接到 /home/git/.ssh/authorized_keys,这个文件是由 gitlab 创建,用于 git ssh 认证用的

  • 如果在网页上已经添加过 ssh key 会发现 authorized_keys 最前面有一个 command,使用的命令的文件实际上是 docker 容器内的文件,在 ssh 连接的时候实际上会执行这个 command,所以我们在宿主机中建立一个同名的文件 /opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell,内容如下:

    #!/bin/sh
    ssh -i /home/git/.ssh/id_rsa -p 9922 -o StrictHostKeyChecking=no git@127.0.0.1 "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"
    
  • 上面文件的作用就是将 ssh 连接转发到 9922 端口,这样就就交给容器了,这里实际上还是一个 ssh 连接做的转发,宿主机连接到容器还需要一次然认证,所以需要使用 su git 命令切换为 git 用户,使用 ssh-keygen -t rsa -b 4096 生成 ssh key

  • /home/git/.ssh/id_rsa.pub 修改为 /home/git/.ssh/authorized_keys_proxy,再将这个文件映射为容器内/gitlab-data/ssh/authorized_keys 文件

  • 这次提交中,添加了除了 /.ssh/authorized_keys 以外的 /gitlab-data/authorized_keys 文件用于 ssh 认证,这样就可以宿主机的 git 账户就可以连接到容器了

  • 这样就可以 git clone git@example.com:xxx/xxx.git 的方式进行操作了,同时之前的 9922 端口可以限制为只监听 127.0.0.1

最终配置如下:

gitlab:
  image: 'gitlab/gitlab-ce:latest'
  restart: always
  hostname: 'git.example.com'
  ports:
    - '80:80'
    - '443:443'
    - '127.0.0.1:9922:22'
  volumes:
    - '/srv/gitlab/config:/etc/gitlab'
    - '/srv/gitlab/logs:/var/log/gitlab'
    - '/srv/gitlab/data:/var/opt/gitlab'
    - '/home/git/.ssh/authorized_keys_proxy:/gitlab-data/ssh/authorized_keys'
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    1 引用 • 11 回帖
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 6 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 88 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    9 引用 • 32 回帖 • 161 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖 • 2 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 394 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    21 引用 • 140 回帖 • 31 关注
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 596 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖 • 33 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 49 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 218 关注
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    534 引用 • 3528 回帖 • 1 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    5 引用 • 26 回帖 • 495 关注
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖 • 1 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 688 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 740 关注
  • gRpc
    10 引用 • 8 回帖 • 55 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 427 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    186 引用 • 318 回帖 • 341 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    122 引用 • 73 回帖
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 293 关注