有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
文档中心 > 云数据库 PostgreSQL > 最佳实践 > 如何配置云数据库 PostgreSQL 作为 GitLab 外部数据源

背景

Gitlab 是?种类似 github 的服务,企业可以使?它来提供 git 存储库的内部管理。它是?个?我托管的 Git-repository 管理系统,可以保持?户代码的私密性,并且可以轻松地部署代码的更改。其优势在于:
GitLab 提供了 GitLab Community Edition 版本,供?户在他们的代码所在的服务器上进行定位。
GitLab 免费提供?限数量的私人和公共存储库。
代码?段可以共享项?中的少量代码,?不是共享整个项?。
Gitlab 服务的元数据库在新版本(12.1)中目前仅?持 PostgreSQL,Gitlab 介绍不再支持 MySQL 的理由如下:
?法?持嵌套分组查询。
必须使用黑科技来提升 MySQL 对列的限制,这将导致 MySQL 拒绝存储数据。
MySQL ?法添加 TEXT 类型字段的?度限制。
MySQL 不?持分区索引。
而 PostgreSQL 都能支持到以上场景。所以 Gitlab 在安装包中集成了 PostgreSQL,但对于某些企业??,集成的数据库服务存在?定的安全风险,并且数据库服务的可靠性和可?性都不能得到保证。为了确保代码托管服务的稳定,部分业务和企业会选择采?稳定的外部数据库服务。而 Gitlab 在 Gitlab HA Repmgr 包中才?持基于 patroni 版本的?可?数据库。但是??维护集群是?件成本较?的事情,采?腾讯云数据库可极?的减少这些维护操作。
本?介绍如何将 Gitlab 中的嵌?式数据库服务更换为腾讯云数据库 PostgreSQL 服务。

步骤1:安装 GitLab

1. 准备资源
CentOS Linux release 7.6.1810 (Core)。
gitlab-ce 14.9.3 版本。
云服务器?台,内存需4GB以上,磁盘需50GB以上。建议 /opt 独?挂载?个数据盘。
腾讯云数据库 PostgreSQL ?个,规格根据?身实际情况进?配置。可初始选择?个规格较小的实例。再根据具体使用进行扩容。版本根据 Gitlab 的版本进行调整选择。
2. 下载 GitLab
?单击此处 在跳转页面下找到想要安装的 Gitlab 安装包,下载到本地后再上传?需要安装 Gitlab 服务的服务器中。
3. 安装 GitLab 使? root ?户执?下列语句安装 Gitlab,若最后?步操作提示存在依赖包未安装,可直接通过 yum 或其他安装?具提前安装完成:
curl https://packages.gitlab.com/install/repositories/gitlab/gitlabce/script.rpm.sh > gitlab-ee_install.sh
sh gitlab-ee_install.sh
export EXTERNAL_URL=https://gitlab.example.com
yum install -y curl policycoreutils-python openssh-server cronie
rpm -ivh gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm

步骤2:初始化数据源 PostgreSQL

1. 可使?云上数据库服务,如腾讯云数据库 PostgreSQL,要创建腾讯云数据库 PostgreSQL 请参见 创建 PostgreSQL 实例
注意:
创建或安装数据库时需确保数据库版本与 GitLab 版本要对应。否则在初始化 GitLab 时候将提示版本不?致,?法创建成功。
GitLab 版本
最??持的 PostgreSQL 版本
13.0
11
14.0
12
2. 通过客户端?具登录?腾讯云数据库 PostgreSQL 中。可使? psql ?具测试是否可以直接访问数据库,若?法访问,请排查?络链路和安全组配置。
psql -U <数据库管理员> -p <端口> -d postgres -h <访问地址>
3. ?先在数据库中创建?个 GitLab 所使?的账号,如 gitlab,请注意此账号必须拥有 superuser 权限或者云数据库所给与的管理员权限,如腾讯云的 pg_tencentdb_superuser
create user gitlab login password 'gitlab_****_password#123';
grant gitlab to <当前管理员账号>; grant pg_tencentdb_superuser to gitlab;
4. 然后创建?个 gitlab 所管理使?的 database:
create database gitlab owner=gitlab ENCODING = 'UTF8';
注意:
在 GitLab 库中必须要能?持 pg_trgm、btree_gist、plpgsql 插件,?需提前创建,在初始化 GitLab 时候将?动创建。但是需要保证能创建成功。

步骤3:修改 GitLab 元数据库为腾讯云数据库 PostgreSQL

1. 登录? GitLab 安装服务器中,找到 gitlab 配置?件,默认为:/etc/gitlab/gitlab.rb。默认此?件中未配置任何信息,可通过下列命令查看到相关信息:
# cat /etc/gitlab/gitlab.rb |grep -v ^# | grep -v ^$
external_url 'http://gitlab.example.com'
2. 在此?件的最后加?以下信息,将腾讯云数据库 PostgreSQL 数据源加?到 gitlab 中:
## postgresql connect
## 此参数设置为 false 指禁用内置的 postgresql,而使用外部 postgresql 数据源
postgresql['enable'] = false
gitlab_rails['db_adapter'] = "postgresql"
gitlab_rails['db_encoding'] = "utf8"
## 数据库名
gitlab_rails['db_database'] = "gitlab"
gitlab_rails['db_pool'] = 100 ## 数据库用户
gitlab_rails['db_username'] = "gitlab"
## 密码,请根据自身配置修改
gitlab_rails['db_password'] = "gitlab_Test_password#123" ## 访问地址
gitlab_rails['db_host'] = "gz-tdcpg-ep-6kvx6p19.sql.tencentcdb.com" ## 访问端口
gitlab_rails['db_port'] = "25870"
请注意,此处如果配置访问地址为域名时,在初始化时候,将提示: ActiveRecord::ConnectionNotEstablished: could not translate host name "gz-tdcpgep-6kvx6p19.sql.tencentcdb.com " to address: Name or service not known
所以若数据库访问为域名时,请使? ping 命令找到此域名的 IP 地址或者找到能解析此域名的 DNS 服务器,不建议将访问地址的域名直接修改为 IP 地址,因为使?域名的场景常伴有数据库后端是做了负载均衡或者?可?,可直接在服务器中配置 DNS 服务器或者 host。若数据库服务有变化,则可直接修改 host 或者 DNS 服务,避免对 GitLab 服务进?修改。

步骤4:初始化与登录使用 GitLab

1. 执?以下命令初始化 GitLab,此命令执?会消耗?段时间,请耐心等待,当提示:gitlab Reconfigured! 时,说明已经初始化完成。
gitlab-ctl reconfigure
2. 执?以下命令启动 GitLab。
gitlab-ctl startok
3. 可使?以下 URL 访问 GitLab,若?法访问通,可能是服务器防?墙的限制。 地址示例:http://{可访问的服务器 IP 地址}/users/sign_in 登录界面如下:
?
?
4. 初始登录账号为 root,初始密码在初始完成后,会有如下的提示:
Password stored to /etc/gitlab/initial_root_password. This file will be
cleaned up in first reconfigure run after 24 hours.
说明:
可在服务器中的此?件中找到初始化密码。完成登录后,请记得修改密码。
?
?
此时,GitLab 就安装完成,后续将正式使? GitLab。


http://www.vxiaotou.com