如何在 CentOS 7 上安装和配置 Gogs

戈格斯是 最著名和使用最广泛的 Git 应用程序之一. 它为 Gitlab 或 Gitea 等其他服务提供了一种低消耗的替代方案。 Gogs 是一个开源的自托管 Git 服务,它提供了所有必要的功能和优势来建立一个私有和安全的版本控制系统。

优势和权衡

与所有事情一样,Gogsha 有一些缺点和权衡。 最值得注意的是,最近开发受到限制,因此更新和新功能可能需要一些时间才能实现。 Gogs 还缺乏高级功能,例如内置 CI/CD、对 Git LFS 2.0 或 Git Protocol V2 的支持、壁球合并以及有限的第三方集成。

但是,由于 Gogs 的特点是效率高、内存占用少和核心功能无痛,因此它具有许多优点:

  • 资源使用率低(RAM/CPU)。
  • 平台无关。
  • 存储库管理和 Web 代码编辑器。
  • 内置维基。
  • 新版本和错误的文档和跟踪功能。
  • 外部 Git 镜像。
  • 易于设置。

我们将介绍 Gogs for CentOS 7 的安装、配置和升级过程。如果您使用 Ubuntu,请查看我们关于如何在 Ubuntu 18.04 上安装和配置 Gogs 的教程。

要求

在开始安装过程之前,我们需要三件事:

  • 数据库管理软件(支持以下任何一种):
    • MySQL(5.7 或更高版本)/MariaDB(10.2 或更高版本)
    • PostgreSQL(版本 9.4.4 或更高版本)
    • SQLite3
  • 吉特:
    • 服务器端和客户端的版本 1.8.3 或更高版本
  • SSH 访问

注意:数据库管理软件的安装不在本文讨论范围内; 但是,我们有一些资源可供您查看 MYSQL/玛丽亚数据库, PostgreSQL, 和 SQLite3.

在将 git 安装到服务器之前检查本地包索引是否已更新是一种很好的做法。

LiquidWeb_Ubuntu # sudo apt-get update
Reading package lists... Done

现在让我们继续安装 git。 我们可以通过运行带有版本标签的 git 来验证安装了哪个版本。

LiquidWeb_Ubuntu # sudo apt-get install git
... 
Preparing to unpack .../git_1%3a2.17.1-1ubuntu0.8_amd64.deb ...
Unpacking git (1:2.17.1-1ubuntu0.8) ...
Setting up git (1:2.17.1-1ubuntu0.8) …

LiquidWeb_Ubuntu # git --version
git version 2.17.1

高斯安装

1. 设置环境

作为一项安全措施,最好为 gogs 创建一个新用户,以防止任何具有高级权限的用户(尤其是 root)与此服务交互。

LiquidWeb_Ubuntu # sudo adduser --disabled-login --home /home/git --shell /bin/bash --gecos 'Gogs' git
Adding user `git' ...
Adding new group `git' (1001) ...
Adding new user `git' (1001) with group `git' ...
Creating home directory `/home/git' ...
Copying files from `/etc/skel' ...

2. 从二进制文件安装

接下来,我们将必要的文件下载到 从二进制文件安装,解压文件,启动服务,运行初始配置脚本。

确认我们服务器的架构(amd64 或 x86_64)后,下载核心文件。

LiquidWeb_Ubuntu # uname -m
x86_64

LiquidWeb_Ubuntu # su git
git@host:/root$ cd ~
git@host:~$ pwd
/home/git

##Download the files (we can pull the link from the official download page)
git@host:~$ curl -O https://dl.gogs.io/0.12.3/gogs_0.12.3_linux_amd64.tar.gz
...
git@host:~$ ls|grep gogs
gogs_0.12.3_linux_amd64.tar.gz

下一步是提取文件并确保已创建目录。

tar -xzvf gogs_0.12.3_linux_amd64.tar.gz

ls|grep gogs
gogs

如果我们以 root(或其他用户)身份执行,我们需要确保目录和文件具有适当的权限。

sudo chown -R git: /home/git/gogs

将配置好的单元文件复制到服务管理器的目录中。

sudo cp -a /home/git/gogs/scripts/systemd/gogs.service /etc/systemd/system/

最后一步是启动并启用服务。

sudo systemctl start gogs

sudo systemctl enable gogs
Created symlink /etc/systemd/system/multi-user.target.wants/gogs.service → /etc/systemd/system/gogs.service.

作为预防措施,请验证服务已启动。

systemctl status gogs
● gogs.service - Gogs
   Loaded: loaded (/etc/systemd/system/gogs.service; enabled; vendor preset: enabled)
   Active: active (running)

默认情况下,gogs 会在 3000 端口启动一个 HTTP 服务。如果另一个服务已经使用了这个端口,我们必须在第一次运行之前编辑配置文件,并将 HTTP 端口更改为空闲端口。 除非我们设置不同的安装目录,否则这个文件位于 /home/git/gogs/custom/conf/app.ini。

/home/git/gogs/custom/conf/app.ini
[server]
...
HTTP_PORT        = 3000

使用服务器的 IP 地址 (https://Server_IP:3000) 通过 Web 浏览器访问第一次运行的配置设置)。

我们可以保留大部分默认设置,但请记住:

  • 数据库类型: 它必须与服务器上安装的相同。
  • 运行用户: 这将是我们之前创建的用户(git)。
  • 领域申请网址: 我们要将服务链接到的域。 如果我们没有服务的主域,我们可以使用服务器的 IP 地址。

如果你没有使用 SQLite3,你可能需要创建数据库和数据库用户。 以下是实现此目的的两种不同方法。

MySQL/MariaDB

mysql> CREATE DATABASE gogs;
mysql> CREATE USER 'gogs'@'localhost' IDENTIFIED BY 'MY_PASSWORD';
mysql> GRANT ALL PRIVILEGES ON gogs.* TO 'gogs'@'localhost';

PostgreSQL

sudo -u postgres psql

postgres=# CREATE DATABASE gogs;
postgres=# CREATE USER gogs WITH ENCRYPTED PASSWORD 'MY_PASSWORD';
postgres=# GRANT ALL PRIVILEGES ON DATABASE gogs TO gogs;

确保更改 ‘我的密码‘ 到您要使用的实际密码。

或者,我们可以创建 admin 立即帐户,尽管我们可以稍后设置。 准备好后,点击 安装 Gogs 按钮。

3-gogs-安装

安装成功后,您将看到以下屏幕。

4-gogs-安装成功

3. 可选:反向代理

在这个阶段,Gogs 已安装并正常工作。 虽然不是强制性的,但我们可以从为我们的应用程序设置反向代理中受益。 它可以增强安全性和性能,同时使审计和日志记录更加直接。 另外,在不涉及端口的情况下访问域更容易。

要设置反向代理,我们必须为 gogs 服务使用域名,而不是服务器的 IP 地址。 一旦我们有了域,我们只需要更新应用程序的配置文件。

/home/git/gogs/custom/conf/app.ini
[server]
DOMAIN           = gogs.mydomain.com
HTTP_PORT        = 3000
EXTERNAL_URL     = https://gogs.mydomain.com:3000/

在这个 example,目标是通过在我们的网络浏览器中键入 gogs.mydomain.com 来访问该应用程序。

配置完成后,让我们继续讨论反向代理本身。 如果我们使用 Nginx,我们需要将此块添加到域的配置文件中。 通常的位置是 /etc/nginx/sites-available/mydomain.com(用 mydomain.com 代替实际的域)。

server {
        listen 80;
        listen [::]:80;

        root /var/www/gogs.mydomain.com/html;
        index index.html index.php index.nginx-debian.html;

        server_name gogs.mydomain.com www.gogs.mydomain.com;

        location / {
               proxy_pass https://127.0.0.1:3000;
        }
}

为了 Apache 用户,原理是一样的,只是语法不同。

<VirtualHost *:80>
ServerName gogs.mydomain.com
ProxyPreserveHost On
ProxyPass /  https://gogs.mydomain.com:3000/
ProxyPassReverse /  https://gogs.mydomain.com:3000/
</VirtualHost>

对于 Ubuntu,配置文件通常位于 /etc/apache2/sites-available/mydomain.com。 如果您使用的是 cPanel,请使用 /etc/apache2/conf.d/userdata/std/2_4/some_user/gogs.mydomain.com/gogs_mydomain.conf 创建自定义条目。

4.升级Gogs

升级过程很简单。 我们需要下载新的核心文件并替换旧的安装。 使用我们创建的 Git 用户,我们将移动旧安装,然后下载新文件。

su git 
cd /home/git 
mv gogs gogs_bk 

curl -O https://dl.gogs.io/new_version/gogs_new_version_linux_amd64.tar.gz
tar -xzvf gogs_new_version_linux_amd64.tar.gz

ls|grep gogs
gogs

接下来,我们同步旧安装文件夹中的所有自定义数据。

rsync -avHl gogs_bk/{custom,data,log} gogs

最后,我们重新启动服务来测试我们的工作,如果一切正常,我们应该可以像往常一样访问门户。

systemctl restart gogs.service 

结论

教程到此结束! 此时,Gogs 应该可以运行了。 我们介绍了 Gogs 的安装、设置和维护。 这是一项专业服务,涵盖所有基础知识,同时保持易于使用的体验和很少的整体维护。 虽然在寻找私有和自托管的 Git 服务时没有理由不选择 Gogs,但有经验的用户将获得 Gogs 提供的好处。