zzxworld

自建 Git 代码托管服务的 4 种方法

源码托管是目前程序开发环境中必不可少的一项基础服务。之前我通常会选择使用国外的 Github 或是国内的 Gitee 代码托管平台。不过随着这些平台因为特殊情况开始出现一些问题和限制后,我觉得有必要掌握一下自己架设 Git 服务的方法和流程了。

目前我所知道的大概有 4 种自己搭建 Git 服务的方法,我将从最简单的 SSH 方式开始来分别介绍它们的搭建方式。

使用 SSH

SSH 是最简单的 Git 服务搭建方式,它只需要一台运行了 SSH 服务的 Linux 服务器,以及安装好 Git 即可。登录到服务器上,创建一个存放源码的目录,比如命名为 repositories

mkdir repositories

然后进入这个目录,然后使用 Git 命令创建一个项目源码仓库即可:

cd repositories

git init --bare demo.git

以上命令在 repositories 目录下创建了一个 demo.git 的源码仓库。接下来就只需要在本地开发环境下使用 SERVER-IP:PATH 地址格式来使用这个源码仓库了。比如我要使用这个在虚拟机上搭建的 Git 服务:

git clone 192.168.0.3:/home/zzxworld/repositories/demo.git

只要确保 IP 和仓库目录的路径没问题,就能正常开始使用了。如果不想每次使用时都要输入一次 SSH 登陆密码,可以通过证书方式配置 SSH 免密登陆,这样在使用体验上会好很多。

使用 Gogs

上面使用 SSH 搭建的 Git 服务只能说满足了基本需求。如果想要有类似 GitHub 类似的界面体验,可以试试这款 Go 语言编写的专业 Git 服务软件。

我目前比较青睐于使用容器化的方式来安装各类服务类软件,所以这里将尝试使用 Podman 来演示如何安装 Gogs。

Podman 和 Docker 区别不大,如果你使用 Docker,也可以作为参考。

首先在服务器上安装好 Podman 或是 Docker 运行环境,然后创建一个目录,用来挂载 Gogs 的仓库数据。

mkdir gogs

然后执行以下容器运行命令:

podman run --rm -it -p 2222:22 -p 8080:3000 -v $PWD/gogs:/data gogs/gogs

接下来在本地电脑上打开浏览器,输入服务器 IP:8080 格式的地址(IP 这两个字符请替换为自己服务器的实际 IP 地址),就可以看到 Gogs 的安装界面了:

Gogs install

根据提示输入配置信息,然后完成安装。接下来就是跟使用 GitHub 一样的流程:注册新用户,创建项目仓库,克隆到本地等,所有这些都是界面化操作。下面是我创建的一个测试项目主页截图。

Gogs demo

使用 Gitea

上面的 Gogs 是一个由个人维护主导的开源项目。个人主导的项目在功能规划上难免会有自己喜好和取舍。当这种取舍和项目的其他贡献者存在冲突时,分道扬镳就在所难免了。Gitea 就是这么来的。所以 Gitea 源自 Gogs,只不过功能特性上更加丰富。

这种一脉相承的关系也延续到了安装和配置方式上。同样使用 Podman 容器化的安装方式,先创建好目录:

mkdir gitea

然后执行以下容器运行命令:

podman run --rm -it -p 2222:22 -p 8080:3000 -v $PWD/gitea:/data gitea/gitea

然后通过浏览器访问 IP:8080 来完成配置安装,操作过程和 Gogs 一样。下面是我完成用户注册和仓库项目创建后的截图:

Gitea demo

使用 GitLab CE

Gitlab 是体验最接近 Github 的源码托管软件,同时也是一个「最重」的选择。这个「重」体现在软件的大小和硬件需求上,比如它的安装推荐内存是 4GB。

这里同样以容器化的方式来介绍它的安装过程。首先仍然是创建挂载目录:

mkdir etc log opt

然后运行以下容器命令:

podman run --rm -it \
    -p 2222:22 -p 8080:80 \
    -v $PWD/etc:/etc/gitlab \
    -v $PWD/log:/var/log/gitlab \
    -v $PWD/opt:/var/opt/gitlab \
    gitlab gitlab/gitlab-ce

镜像有一个多 G 的大小,所以需要一点时间来完成下载。后续容器的启动也比较耗时,同样需要耐心。等启动完成,就可以通过 IP:8080 来访问服务首页了。

Gitlab Sign in

Gitlab 默认会创建一个 root 账号,初始密码位于 etc/initial_root_password 目录下。复制这个文件中 Password: 后的密码。然后用 root 账号登陆系统。

下面是我创建完一个测试项目后的截图:

Gitlab demo

如何选择

对于无需他人合作的个人项目,我会倾向于选择 SSH 的方式,这让我可以以最低的硬件成本达成源码托管服务的需求。在此之上,如果有团队配合和界面上的需要,我会倾向于选择 Gogs 和 Gitea。这两者之间的选择主要就是看自己的功能需求,优先考虑 Gogs,Gogs 没有的功能再考虑 Gitea。至于 Gitlab,其庞大的体积以及硬件要求,都不太契合我这种「抠门」的个人用户,所以在可预见的将来,都不会考虑使用。

使用 Flarum 搭建社交论坛

PHP 生态下的开源程序真是繁荣,一连几天体验了各种不同类型的开源建站程序,大部分都是基于 PHP 语言。今天要尝试的这款搭建论坛的程序也是,它的名字叫 Flarum。

使用 Zen Cart 搭建购物网站

昨天在体验 OpenCart 时,顺便提了一下 Zen Cart。之后搜了下,没想到它还健在。既然还在,那我今天就来介绍一下这个曾经让我又爱有恨的电商网站软件:Zen Cart。

使用 OpenCart 搭建购物网站

连续体验了两天博客类的建站软件,有点乏了。换换口味,来看看搭建电商购物网站的软件,今天要尝试的是 OpenCart。

使用 Typecho 搭建博客网站

开源程序体验第二篇,今天来尝试一个从功能上看和 WordPress 很像的建站程序:Typecho。