tencent cloud

文档反馈

如何配置云数据库 PostgreSQL 作为 GitLab 外部数据源

最后更新时间:2024-01-22 16:24:46

    背景

    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。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持