使用 PostgreSQL 安装私有 GitLab CE 服务器

GitLab 非常适合代码协作,但我发现它在我写作时对我非常有用。 我用它来跟踪修订和我的总体工作。

但由于我喜欢修补,所以我没有停止在虚拟机上安装 Gitlab CE – 这太简单了。

我选择了合适的 GitLab CE 服务器设置,其中包含单独的 PostgreSQL 数据库服务器和用于故障转移的副本。

在本教程中,我将与您分享相同的设置:

  • 在系统上设置 GitLab 服务器
  • 外部 PostgreSQL 作为另一台服务器上 GitLab 的主数据库
  • 将 PostgreSQL 副本服务器设置为故障转移模式,以便在主数据库丢失或损坏时,副本服务器可以接管

正如您可以想象的那样,该设置需要三台服务器,一台用于主 GitLab 应用程序,一台用于主数据库,一台用于副本。

我将在这个项目中使用 Linode。 您还可以使用 DigitalOcean。 新用户可获得 60 天 100 美元的免费积分

第1步:安装Gitlab CE

与要安装 GitLab 的服务器建立 SSH 连接。

在安装新软件包之前,最好刷新软件包缓存并更新软件包。

sudo apt update && sudo apt upgrade -y

如果您想知道,额外的 -y 如果您需要手动确认更新过程的开始,则会在末尾自动输入“y”。

接下来,安装依赖包。 您可能已经拥有其中一些软件包。

sudo apt install -y ca-certificates curl lsb-release openssh-server tzdata
debian-archive-keyring apt-transport-https software-properties-common -y

让我们将 GitLab 存储库添加到您的系统中,以便它可以直接从 GitLab 提取包。 有一种特别的 Shell为您完成这一切的脚本。

curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

安装 Gitlab Community Edition,这意味着您自己托管 GitLab:

sudo apt install gitlab-ce

编辑Gitlab配置文件以设置主机名和其他参数:

sudo nano /etc/gitlab/gitlab.rb
external_url 'https://gitlab.xxx.com'

第2步:安装PostgreSQL

建立与用于数据库的服务器的 SSH 连接。

刷新包缓存并刷新系统:

sudo apt update && sudo apt upgrade -y

现在安装 PostgreSQL:

sudo apt install postgresql postgresql-contrib -y

确保 PostgreSQL 正在运行:

systemctl status postgresql
root@db1:~# systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Fri 2023-08-18 16:37:09 UTC; 1h 19min ago
    Process: 505 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 505 (code=exited, status=0/SUCCESS)
        CPU: 736us

Aug 18 16:37:09 db1.cluster systemd[1]: Starting PostgreSQL RDBMS...
Aug 18 16:37:09 db1.cluster systemd[1]: Finished PostgreSQL RDBMS.
root@db1:~# 

使 PostgreSQL 在启动时自动运行:

sudo systemctl enable postgresql

步骤3:配置主数据库

登录 PostgreSQL: postgres 安装期间自动为您创建的用户。

创建 PostgreSQL 将用于连接到副本的副本用户:

su postgres
psql
CREATE ROLE replica_user WITH REPLICATION LOGIN PASSWORD 'P@ssword321';

创建主数据库、用户和密码。 当然,请使用您能记住的强密码。

CREATE ROLE gitlab WITH SUPERUSER PASSWORD 'P@ssword321';
CREATE DATABASE gitlabprod;
ALTER DATABASE gitlabprod OWNER TO gitlab;
q

编辑那些 pg_hba.conf 文件输入 /etc/postgresql/xx/main (将xx更改为适当的版本号):

sudo nano /etc/postgresql/13/main/pg_hba.conf

将此行附加到文件末尾:

host db_name db_user primary_gitlab_server_IP/32 md5

在主 GitLab 服务器上需要对其进行进一步更改 gitlab.rb 配置文件:

sudo nano /etc/gitlab/gitlab.rb

禁用由提供的捆绑综合总线

PostgreSQL postgresql['enable'] = false

PostgreSQL 连接详细信息:

gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_encoding'] = 'unicode' gitlab_rails
['db_host'] = '10.1.0.5' # IP/hostname of database server 
gitlab_rails['db_password'] = 'DB password'

返回数据库服务器编辑那些 postgresql.conf 文件并更改以下值:

sudo nano /etc/postgresql/xx/main/postgresql.conf
  • 取消注释“listen”部分并将其从“localhost”更改为 *
  • 改变那个 wal_level 从“副本”到“逻辑”的指令

在 GitLab 服务器上,重新配置 GitLab 以应用设置。 这大约需要 5 到 6 分钟。 :

gitlab-ctl reconfigure

更改默认密码。 您的用户名是 root。

gitlab-rake "gitlab:password:reset[root]"

步骤 4:配置副本服务器

建立与副本服务器的 SSH 连接。

刷新包缓存并刷新系统:

sudo apt update && sudo apt upgrade -y

现在安装 PostgreSQL:

sudo apt install postgresql postgresql-contrib -y

新安装的 PostgreSQL 将启动。 但是,您必须停止正在运行的服务器以准备与主数据库同步:

sudo systemctl stop postgresql

删除 PostgreSQL 数据目录中的所有当前文件:

sudo rm -rv /var/lib/postgresql/xx/main/

运行 pg_basebackup 将主数据库的数据传输到副本:

sudo pg_basebackup -h <ip of primary node> -U replica_user -X stream -C -S replica_1 -v -R -W -D /var/lib/postgresql/xx/main/

更正权限并将所有权授予正确的用户:

sudo chown postgres -R /var/lib/postgresql/14/main/

重新启动 PostgreSQL:

sudo systemctl start postgresql

在主数据库服务器上输入 psql 并运行此查询来测试:

SELECT client_addr, state
FROM pg_stat_replication;

如果结果是“Streaming’,现在将数据从主机复制到副本。 做得好!

你成功设置了吗?

整个过程需要时间和精力。 但对于经验丰富的系统管理员来说,这不应该构成太大的问题。

我试图列出我使用过的所有步骤。 但是,如果我错过了一个步骤或者您遇到任何问题,请在评论部分告诉我。