【保姆教学】教你搭建一个自己的 GitHub 平台

1,394 阅读8分钟

前言

我们都会使用 Git ,但是我们都其实还需要一个 Git 仓库来存放我们的代码,也就是所谓的版本控制,代码托管。那么现在的平台有这么两个:GitHubGitee (码云,OSCHINA 出的)。而我们知道代码是不可能公开放在云上面的,也就是说企业内部的代码不可能发布到别人家的平台,即使是要发布上去,也是要购买私人仓库的,所以我们也需要有一个本地的管理。

早期呢大家都是用的 SVN,在本地架设 SVN 服务器,使用 SVN 进行代码托管。但是 SVN 有种种缺陷,后面 Git 应运而生,文件的存储方式和管理方式也都发生了变化,功能也变得丰富。为了解决本地 Git 管理的问题,就有一个开源社区开发了 GitLab 这么一个版本管理系统。

所以在现在的企业开发中也都在使用 GitLab 来作为我们的本地仓库管理系统。

介绍

GitLab 是利用 Ruby on Ralis 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或私人项目。它与 GitHub 有类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常利于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单程序(Wall)进行交流。它还提供了一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

安装

因为 Docker 太香了~所以我们这里使用 Docker 来安装和运行 GitLab 中文版。因为正常情况下它默认是英文版的,有爱好者将 GitLab 的英文版翻译成了中文版。由于新版本问题较多,这里我们目前使用相对稳定的 9.4 版本。

配置

docker-compose.yml 配置如下:

version: '3'
services:
  myGitLab:
    image: 'twang2218/gitlab-ce-zh:9.4'
    restart: 'no'
    hostname: 192.168.1.102
    environment:
      TZ: 'Asia/Shanghai'
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.1.102:8080'
        gitlab_rails['time_zone'] = 'Asia/Shanghai'
        gitlab_rails['gitlab_shell_ssh_port'] = 2222
        unicorn['port'] = 8888
        nginx['listen_post'] = 8080
    ports:
      - '8080:8080'
      - '8443:443'
      - '2222:22'
    volumes:
      - D:/ProgramData/Docker/gitlab/config:/etc/gitlab
      - D:/gitlab/data:/var/opt/
      - D:/ProgramData/Docker/gitlab/logs:/var/log/gitlab

说明

  1. 从 image 镜像配置可以看出我们这里用的是 twang2218 发布的 gitlab-ce-zh:9.4 版本。

ce - 社区版

zh - 中文版

来源:直接从 Docker Hub 上找

我们实际要找的👇

  1. services:myGitLab - 我要创建的是名为 myGitLab 的服务

  2. services:myGitLab.restart='false' - 开机不自启

  3. services:myGitLab.environment - 环境变量

    • TZ: 'Asia/Shanghai' - 时区:亚洲/上海

    • GITLAB_OMNIBUS_CONFIG - GitLab 的配置参数

      • external_url 'http://192.168.1.102:8080' - Web URL 的访问地址

      • gitlab_rails['gitlab_shell_ssh_port'] = 2222 - SSH 连接的端口号,本身连接服务器就要使用 22 (默认)这个端口,GitLab 也不例外一样需要 22,怕 GitLab 要使用的 22 端口和宿主机的端口号冲突,所以就要修改 GitLab 的 SSH 连接端口号避免冲突。

      • unicorn['port'] = 8888 - 内置端口

      • nginx['listen_post'] = 8080 - GitLab 是基于 Nginx 反向代理访问到的,那么整个 GitLab 镜像里就会包含 GitLabNginx 两样东西。

  4. services:myGitLab.ports - 端口映射

    • '8080:8080' - 宿主机的 9899 映射 到容器的 9899。GitLab 镜像默认安装时 expose 出来的端口为 80,但是由于我修改了上面 GitLab 的配置,我将 Nginx 监听端口的 80 手动改为了 9899,所以此时映射的端口就是 9899。
    • '8443:443' - 安全连接端口
    • '2222:22' - SSH 端口

    这样就是为了我们的 GitLab 就可以像 GitHub 一样支持 HTTPHTTPSSSH 三种连接方式。

  5. services:myGitLab.volumes - 容器数据卷(Docker 数据持久化的一种方式)

    【踩坑说明】(因为我这里是在 Windows 环境下 用 Docker Desktop 安装的)

    • 容器数据卷的配置
volumes:
  - D:/ProgramData/Docker/gitlab/config:/etc/gitlab
  - D:/gitlab/data:/var/opt/
  - D:/ProgramData/Docker/gitlab/logs:/var/log/gitlab

中间的 D:/gitlab/data:/var/opt/

不能改成另外两个一样 D:/ProgramData/Docker/gitlab/data:/var/opt/gitlab

不然启动会报错👇

Error executing action `run` on resource 
'ruby_block[directory resource: /var/opt/gitlab/git-data]'

到网上查了很多解决方案,似乎是因为 Windowsvolume 的挂载权限问题

https://gitlab.com/gitlab-org/omnibus-gitlab/issues/2280

但是在 Linux 系统下如果写成👇就没问题……

/usr/local/docker/gitlab/data:/var/opt/gitlab
  • 需要在设置里把 Docker Desktop 的通知打开,后面镜像挂载的时候会弹出通知要你开启上面容器数据卷(volumes)目录的文件共享,不然会报错:Filesharing has been cancelled

安装

在我们的 docker-compose.yml 文件所在目录下运行命令

docker-compose up -d

就会开始进行镜像的下载拉取……因为第一次配置过程有点慢,比较耗内存,当然也要看电脑配置😄

官方介绍是只需要 1G 内存,但实际使用时却需要 8G 内存。因为我们在使用 GitLab 的时候会使用到它的很多功能,比如邮件、持续集成功能。这俩就很耗内存,如果这俩玩意不开启,2G 足矣,但完全不是 1G 内存就能运行。而我们的 GitLab 可能是全公司人都会去使用,整个如果研发部人数比较多,那它就对服务器的要求就更高。

等到下面这一步花了我将近 10 min……(忘截图了,到网上找了张)

然后我又等了 5 min 正式启动完成,才能正常访问咱 GitLab 的页面 http://localhost:8080(端口 8080 是我们在配置中设置的外部访问地址为 8080,默认是 80)

安装成功!!!

安装完成后第一件事就是设置管理员密码(至少 8 位)。设置完成后就进入登录界面,进行登录,账号:root

rootGitLab 默认的超级管理员账号

登录成功

:此时已经我的 GitLab 容器运行中的状态

设置

管理区域

只有管理员账号才有管理区域按钮

进入设置

  1. 启用的 Git 访问协议:SSH 和 HTTP(S)

    这个是默认选上的,也就是当初 docker-compose.yml 的启动配置里面配的。

  2. 关闭 Gravatar 头像(这个头像是网络头像)

不难发现我们右上角自己账号就有个头像,这个头像就是基于这个服务得到的,这个就是属于软件即服务的一种体现,这个网站就是 https://en.gravatar.com/。

这个头像是国际化的,也就是说你没有头像你就可以接入这个网站的 API 就可以获得头像,然后我们所有的头像就可以使用 Gravatar 来上传和管理你的头像,没有头像会默认分配给你一个头像。包括 GitHub 在内的很多大型网站都是使用的 Gravatar 。所以它是全球统一头像管理服务平台,就和我们使用的第三方登录差不多。

因为它是在国外的,所以有的时候网络环境不行的话它会被抢掉,被抢掉以后我们去访问 GitLab 的时候可能会出现比较卡顿的情况,所以我们要把它关了。

  1. 关闭注册:因为公司都是内部使用,不提供对外服务,所以注册需要关闭掉。

  2. 关闭用量统计

账户管理

使用时建议不要直接使用 root 账号进行操作,需要先创建账号,然后所有的操作都去基于这个账号来操作,如果你是管理员账号就还需要为其他开发人员分配账号。

  1. 新建账户

因为我们的 GitLab 并没有配置邮箱服务,所以并不会发送初始密码邮件,创建成功之后可以直接进入编辑页面该账号的密码。

  1. 新账号登录

    因为我们是直接在后台修改的密码,所以为了安全起见,登录进去之后它会要求用户自己修改成自己的密码然后再进行登录。

使用

成功登录之后,它操作的模式和 GitHub 差不多,也就是我们依然需要创建项目、群组或代码片段。由于我们可以使用自己的 GitLab 来托管我们的项目,所以基于微服务分布式架构部署,通常我们需要创建一个群组类项目直接新建一个项目。

在这里的新建项目等同于我们开发时的单体项目。新建群组由这个群组来统一管理项目才相当于是做分布式项目,也就是说我的一个产品由多个项目组成。

我们在首页的菜单这也可以进入群组项目

而在这里群组它只是管理的,所以我们需要在群组里面新建项目。

然后就直接在我们想存放项目的目录下克隆就好了

git clone http://192.168.1.102:8080/test/my-test-demo.git

账号密码应该就不用多说了吧😎

项目拉下来了之后,后面的操作就都和 GitHub 一样了。

最后

作者能力有限,如果有写的不对的地方可以在评论区进行交流。

如果本文对你有帮助的话不妨点个👍呦。

分享技术,稳住,我们能赢💪!