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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
3天前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的数据库集群
PostgreSQL的逻辑存储结构涵盖了数据库集群、数据库、表、索引、视图等对象,每个对象都有唯一的oid标识。数据库集群是由单个PostgreSQL实例管理的所有数据库集合,共享同一配置和资源。集群的数据存储在一个称为数据目录的单一目录中,可通过-D选项或PGDATA环境变量指定。
|
17天前
|
关系型数据库 分布式数据库 数据库
PostgreSQL+Citus分布式数据库
PostgreSQL+Citus分布式数据库
49 15
|
2月前
|
SQL 关系型数据库 数据库
PostgreSQL数据库报错 ERROR: multiple default values specified for column "" of table "" 如何解决?
PostgreSQL数据库报错 ERROR: multiple default values specified for column "" of table "" 如何解决?
323 59
|
24天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
40 3
|
25天前
|
SQL 关系型数据库 数据库
PostgreSQL性能飙升的秘密:这几个调优技巧让你的数据库查询速度翻倍!
【10月更文挑战第25天】本文介绍了几种有效提升 PostgreSQL 数据库查询效率的方法,包括索引优化、查询优化、配置优化和硬件优化。通过合理设计索引、编写高效 SQL 查询、调整配置参数和选择合适硬件,可以显著提高数据库性能。
147 1
|
26天前
|
SQL Java 数据库连接
打破瓶颈:利用Java连接池技术提升数据库访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,避免了频繁的连接建立和断开,显著提升了数据库访问效率。常见的连接池库包括HikariCP、C3P0和DBCP,它们提供了丰富的配置选项和强大的功能,帮助优化应用性能。
44 2
|
28天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
104 4
|
1月前
|
SQL 关系型数据库 数据库
使用 PostgreSQL 和 Python 实现数据库操作
【10月更文挑战第2天】使用 PostgreSQL 和 Python 实现数据库操作
|
2月前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
455 2

热门文章

最新文章

下一篇
无影云桌面