远程访问GitLab内置的PostgreSQL数据库

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 业务系统需要接入GitLab,业务系统以及GitLab都有一套各自的用户系统,需要实现同一套账户密码的话需要将数据同步给GitLab(主要是密码),然而由于GitLab安全策略,通过api进行同步GitLab用户数据并不满足需求,所以需要能直接访问GitLab数据库进行数据修改。

远程访问GitLab内置的PostgreSQL数据库

gitlab 默认的数据库是 PostgreSQL ,用它官网的话来说就是“The World’s Most Advanced Open Source Relational Database”。

一般情况下,我们没有必要去直接访问它。但是,没必要不代表没需求。gitlab 结构、用户数据、配置信息等。

注意:

在 GitLab 12.1 中删除了对 MySQL 的支持。建议在 MySQL / MariaDB 上使用 GitLab 的现有用户在升级之前迁移到 PostgreSQL。 从 GitLab 10.0 开始,需要 PostgreSQL 9.6 或更高版本,并且不支持较早的版本。我们强烈建议用户使用 PostgreSQL 9.6,因为这是用于开发和测试的 PostgreSQL 版本。

背景:业务系统需要接入GitLab,业务系统以及GitLab都有一套各自的用户系统,需要实现同一套账户密码的话需要将数据同步给GitLab(主要是密码),然而由于GitLab安全策略,通过api进行同步GitLab用户数据并不满足需求,所以需要能直接访问GitLab数据库进行数据修改。

本地GitLab使用的是Docker拉取的远程Gitlab镜像

拉取镜像
docker pull gitlab/gitlab-ce
 启动命令 
docker run 
--detach
--hostname gitlab
--publish 443:443
--publish 80:80
--publish 222:22
--publish 4567:4567
--publish 5432:5432
--name gitlab
--volume C:\Users\admin\Documents\gitlab-ce\config:/etc/gitlab
--volume C:\Users\admin\Documents\gitlab-ce\logs:/var/log/gitlab
--volume C:\Users\admin\Documents\gitlab-ce\data:/var/opt/gitlab gitlab/gitlab-ce:latest


镜像启动命令主要映射了一部分端口还有文件夹,端口方便使用工具进行远程连接,文件夹方便对GitLab配置进行修改(主要用来实现GitLab接入Cas跟业务系统的单点登录)以及与宿主机之间的文件转移。

本地直接进行访问

GitLab内置有直接访问内部 postgreSQL 的命令:

sudo gitlab-psql -d gitlabhq_production

这样就进入了 postgreSQL 命令窗口,可以输入 sql 语句进行操作

/list 查看所有数据库

image.png

select * from namespaces;查看 gitlab 中已经有了哪些用户

image.png

特别注意: 这里显示的 Name 有 4 个,除了 gitlabhq_porduction 的 owner 是 gitlab 之外,其它的是 gitlab-psql。 所以,在连接到 gitlab 内部的 postgresql 数据库时,指定数据库名称为 gitlabhq_porduction 才有实际意义,才能看到需要的信息。 这里的 dbconsole 默认是选择的 gitlabhq_production,但后续外部连接就不一定了。

配置远程访问

默认情况下,外部是无法访问 Gitlab 内部的 postgreSQL 的。具体原因需要查看GitLab配置

默认的 gitlab 数据库配置文件在/var/opt/gitlab/gitlab-rails/etc/databse.yml

做了文件映射后可以直接在宿主机本地文件查看

# This file is managed by gitlab-ctl. Manual changes will be
# erased! To change the contents below, edit /etc/gitlab/gitlab.rb
# and run `sudo gitlab-ctl reconfigure`.
production:
  main:
    adapter: postgresql
    encoding: unicode
    collation: 
    database: gitlabhq_production
    username: "gitlab"
    password: 
    host: "/var/opt/gitlab/postgresql"
    port: 5432
    socket: 
    sslmode: 
    sslcompression: 0
    sslrootcert: 
    sslca: 
    load_balancing: {"hosts":[]}
    prepared_statements: false
    statement_limit: 1000
    connect_timeout: 
    keepalives: 
    keepalives_idle: 
    keepalives_interval: 
    keepalives_count: 
    tcp_user_timeout: 
    application_name: 
    variables:
      statement_timeout:


上面配置中hosts就是本地的一个文件,外部肯定是无法访问的

也可以直接查看 postgreSQL 的用户权限配置文件/var/opt/gitlab/postgresql/data/pg_hba.conf

# If you want to allow non-local connections, you need to add more
# "host" records. In that case you will also need to make PostgreSQL listen
# on a non-local interface via the listen_addresses configuration parameter,
# or via the -i or -h command line switches.
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
# "local" is for Unix domain socket connections only
local   all         all                               peer map=gitlab


默认文件也是只有一个local,根据上面的注解翻译一下就是:

如果想允许非本地连接,需要增加更多hosts记录,在此情况下还需要配置监听地址或者使用命令-i、-h参数确保PostgreSQL数据库监听非本地连接的接口。

根据注解提供的信息查看PostgreSQL配置文件,就在同目录下postgresql.conf

# - Connection Settings -
listen_addresses = ''    # what IP address(es) to listen on;
          # comma-separated list of addresses;
          # defaults to 'localhost', '*' = all
          # (change requires restart)
port = 5432        # (change requires restart)
max_connections = 200      # (change requires restart)


看出监听的host为空

修改配置文件实现远程访问 PostgreSQL

了解上述配置文件后就可以分别单独修改文件来实现外部访问,但是GitLab重启之后就会失效,所以是可以只修改GitLab的总配置文件来实现远程访问,GitLab重启之后还是可以访问。

打开/etc/gitlab/gitlab.rb配置文件,找到## Gitlab PostgreSQL区块,在### Advanced settings最末,加上以下内容:

postgresql['listen_address'] = '{gitlab主机IP}'
postgresql['port'] = 5432
postgresql['trust_auth_cidr_addresses'] = %w(127.0.0.1/24)
postgresql['md5_auth_cidr_addresses'] = %w({gitlab主机IP}/0)
postgresql['sql_user'] = "gitlab"
postgresql['sql_user_password'] = Digest::MD5.hexdigest "gitlab" << postgresql['sql_user']


把{gitlab 主机 IP}替换成 gitlab 主机的真实 IP 即可。

这几行的配置分别是:

  • postgresql 的监听地址,
  • postgresql 的监听端口,
  • 本地访问(127.0.0.1 或者 localhost)postgresql 不用输密码,
  • 需要输入密码的访问地址,
  • 连接到 postgresql 数据库的账号(示例中为 gitlab),
  • 连接到 postgresql 数据库的密码(示例中为 gitlab)。

然后,找到### Gitlab database settings,在最末添加以下内容:


gitlab_rails['db_username'] = "gitlab"
gitlab_rails['db_password'] = "gitlab"
gitlab_rails['db_host'] = "{gitlab主机IP}"
gitlab_rails['db_port'] = 5432
gitlab_rails['db_database'] = "gitlabhq_production"


这几行的配置分别是:

  • 数据库用户名
  • 密码
  • 地址
  • 端口

如果不设定最后一行,那么默认连接的数据库就是 postgres。

到这里,配置就修改完了,先运行sudo gitlab-ctl restart postgresql,再运行sudo gitlab-ctl reconfigure就可以生效了。

由于使用了docker启动的GitLab网桥好像有点问题

ip配置好之后启动还是会报错,最方便的方法就是直接把{gitlab主机IP}改为0.0.0.0

通过GUI连接

我使用的是Navicat Premium版本,基本上主流数据库都支持连接,除此之外也可以使用DBeaver,除了关系型数据库也支持nosql数据库。

image.png

这样就可以非常方便的对数据库进行操作了。

image.png

总结&后续

本文通过修改GitLab配置文件实现远程访问GitLab内置PostgreSQL数据库,后续尝试通过java代码进行连接以及对数据的增删改查,以实现相关系统轻量级接入GitLab的需求。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
4天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
6天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
66 11
|
4天前
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与最佳实践
在微服务架构中,数据库访问的效率直接影响到系统的性能和可扩展性。本文探讨了优化微服务架构中数据库访问的策略与最佳实践,包括数据分片、缓存策略、异步处理和服务间通信优化。通过具体的技术方案和实例分析,提供了一系列实用的建议,以帮助开发团队提升微服务系统的响应速度和稳定性。
|
1天前
|
存储 SQL 关系型数据库
MySQL的安装&数据库的简单操作
本文介绍了数据库的基本概念及MySQL的安装配置。首先解释了数据库、数据库管理系统和SQL的概念,接着详细描述了MySQL的安装步骤及其全局配置文件my.ini的调整方法。文章还介绍了如何启动MySQL服务,包括配置环境变量和使用命令行的方法。最后,详细说明了数据库的各种操作,如创建、选择和删除数据库的SQL语句,并提供了实际操作示例。
26 13
MySQL的安装&数据库的简单操作
|
7天前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
4天前
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与实践
随着微服务架构的普及,如何高效管理和优化数据库访问成为了关键挑战。本文探讨了在微服务环境中优化数据库访问的策略,包括数据库分片、缓存机制、异步处理等技术手段。通过深入分析实际案例和最佳实践,本文旨在为开发者提供实际可行的解决方案,以提升系统性能和可扩展性。
|
1天前
|
缓存 关系型数据库 数据库
如何优化 PostgreSQL 数据库性能?
如何优化 PostgreSQL 数据库性能?
9 2
|
11天前
|
SQL NoSQL Java
彻底革新你的数据库操作体验!Micronaut数据访问技巧让你瞬间爱上代码编写!
【9月更文挑战第10天】Java开发者们一直在寻找简化应用程序与数据库交互的方法。Micronaut作为一个现代框架,提供了多种工具和特性来提升数据访问效率。本文介绍如何使用Micronaut简化数据库操作,并提供具体示例代码。Micronaut支持JPA/Hibernate、SQL及NoSQL(如MongoDB),简化配置并无缝集成。通过定义带有`@Repository`注解的接口,可以实现Spring Data风格的命名查询。
27 6
|
17天前
|
关系型数据库 分布式数据库 数据库
开源云原生数据库PolarDB PostgreSQL 15兼容版本正式发布
PolarDB进行了深度的内核优化,从而实现以更低的成本提供商业数据库的性能。
|
18天前
|
SQL 存储 关系型数据库
C#一分钟浅谈:使用 ADO.NET 进行数据库访问
【9月更文挑战第3天】在.NET开发中,与数据库交互至关重要。ADO.NET是Microsoft提供的用于访问关系型数据库的类库,包含连接数据库、执行SQL命令等功能。本文从基础入手,介绍如何使用ADO.NET进行数据库访问,并提供示例代码,同时讨论常见问题及其解决方案,如连接字符串错误、SQL注入风险和资源泄露等,帮助开发者更好地利用ADO.NET提升应用的安全性和稳定性。
49 6