GitLab: 如何使用外部提供的PostgreSQL数据库
发布日期:2021-06-30 20:20:00 浏览次数:2 分类:技术文章

本文共 9785 字,大约阅读时间需要 32 分钟。

在这里插入图片描述

缺省的情况下GitLab的官方镜像中提供了一个PostgreSQL,如果希望把此数据库放在GitLab的容器之外的话需要怎么做呢?这篇文章结合示例进行说明具体的做法。


文章目录


环境准备

配置文件:GitLab

version: '2'    services:  # Version Control service: Gitlab  gitlab:    image: gitlab/gitlab-ce:12.10.5-ce.0    ports:      - "35001:80"      - "30022:22"      - "443:443"    volumes:      - ./log/:/var/log/gitlab      - ./data/:/var/opt/gitlab      - ./conf/:/etc/gitlab    restart: "no"

配置文件:PostgreSQL

liumiaocn:postgres liumiao$ cat docker-compose.yml version: '2'services:  # database service: PostgreSQL  postgres:    image: postgres:12.4-alpine    ports:      - "35432:5432"    volumes:      - ./data/:/var/lib/postgresql/data    environment:      - POSTGRES_PASSWORD=liumiao    restart: "no"liumiaocn:postgres liumiao$

启动命令

执行命令:docker-compose up -d

结果确认

  • GitLab
[root@liumiaocn gitlab]# docker-compose ps     Name             Command          State                                     Ports                               ---------------------------------------------------------------------------------------------------------------------gitlab_gitlab_1   /assets/wrapper   Up (healthy)   0.0.0.0:30022->22/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:35001->80/tcp[root@liumiaocn gitlab]#
  • PostgreSQL
[root@liumiaocn postgres]# docker-compose ps       Name                      Command              State            Ports         -------------------------------------------------------------------------------------postgres_postgres_1   docker-entrypoint.sh postgres   Up      0.0.0.0:35432->5432/tcp[root@liumiaocn postgres]#

使用外部PostgreSQL服务

步骤1: 设定gitlab.rb

[root@liumiaocn ~]# docker exec -it gitlab_gitlab_1 sh# cd /etc/gitlab# lsgitlab-secrets.json  ssh_host_ecdsa_key      ssh_host_ed25519_key      ssh_host_rsa_key      trusted-certsgitlab.rb	     ssh_host_ecdsa_key.pub  ssh_host_ed25519_key.pub  ssh_host_rsa_key.pub# cp -p gitlab.rb gitlab.rb.org# vi gitlab.rb# diff gitlab.rb gitlab.rb.org561,562c561,562< gitlab_rails['db_adapter'] = "postgresql"< gitlab_rails['db_encoding'] = "utf8"---> # gitlab_rails['db_adapter'] = "postgresql"> # gitlab_rails['db_encoding'] = "unicode"564c564< gitlab_rails['db_database'] = "postgres"---> # gitlab_rails['db_database'] = "gitlabhq_production"566,569c566,569< gitlab_rails['db_username'] = "postgres"< gitlab_rails['db_password'] = 'liumiao'< gitlab_rails['db_host'] = '192.168.163.151'< gitlab_rails['db_port'] = 35432---> # gitlab_rails['db_username'] = "gitlab"> # gitlab_rails['db_password'] = nil> # gitlab_rails['db_host'] = nil> # gitlab_rails['db_port'] = 5432914c914< postgresql['enable'] = false---> # postgresql['enable'] = true#

步骤2: gitlab-ctl reconfigure

执行命令:gitlab-ctl reconfigure

或者

执行命令:docker-compose restart

执行日志示例如下所示:

# gitlab-ctl reconfigureStarting Chef Client, version 14.14.29resolving cookbooks for run list: ["gitlab"]Synchronizing Cookbooks:  - package (0.1.0)  - postgresql (0.1.0)  - redis (0.1.0)  - registry (0.1.0)  - mattermost (0.1.0)  - consul (0.1.0)  - gitaly (0.1.0)  - praefect (0.1.0)  - letsencrypt (0.1.0)  - nginx (0.1.0)  - runit (4.3.0)  - crond (0.1.0)  - gitlab (0.0.1)  - monitoring (0.1.0)  - acme (4.1.1)Installing Cookbook Gems:Compiling Cookbooks...Recipe: gitlab::default...省略

步骤3 : 结果确认

登录之后可以正常进行root密码的重置

在这里插入图片描述
重置之后也可以使用新的密码正常登录
在这里插入图片描述

  • 进入到GitLab容器中可以看到内置的PostgreSQL的服务已经不在运行了
[root@liumiaocn gitlab]# docker exec -it gitlab_gitlab_1 sh# gitlab-ctl statusrun: alertmanager: (pid 297) 636s; run: log: (pid 296) 636srun: gitaly: (pid 306) 636s; run: log: (pid 305) 636srun: gitlab-exporter: (pid 289) 636s; run: log: (pid 288) 636srun: gitlab-workhorse: (pid 291) 636s; run: log: (pid 290) 636srun: grafana: (pid 285) 636s; run: log: (pid 284) 636srun: logrotate: (pid 287) 636s; run: log: (pid 286) 636srun: nginx: (pid 299) 636s; run: log: (pid 298) 636srun: prometheus: (pid 295) 636s; run: log: (pid 294) 636srun: redis: (pid 304) 636s; run: log: (pid 303) 636srun: redis-exporter: (pid 293) 636s; run: log: (pid 292) 636srun: sidekiq: (pid 307) 636s; run: log: (pid 302) 636srun: sshd: (pid 25) 651s; run: log: (pid 24) 651srun: unicorn: (pid 301) 636s; run: log: (pid 300) 636s#
  • 连接外部的GitLab服务即可可以看到表的结构已经创建在指定的postgres数据库中了。
[root@liumiaocn gitlab]# psql -h 192.168.163.151 -p 35432 postgres postgresPassword for user postgres: psql (9.2.24, server 12.4)WARNING: psql version 9.2, server version 12.0.         Some psql features might not work.Type "help" for help.postgres=# \l                                 List of databases   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   -----------+----------+----------+------------+------------+----------------------- postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 |  template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +           |          |          |            |            | postgres=CTc/postgres template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +           |          |          |            |            | postgres=CTc/postgres(3 rows)postgres=# \cpsql (9.2.24, server 12.4)WARNING: psql version 9.2, server version 12.0.         Some psql features might not work.You are now connected to database "postgres" as user "postgres".postgres=# \dt                              List of relations Schema |                      Name                       | Type  |  Owner   --------+-------------------------------------------------+-------+---------- public | abuse_reports                                   | table | postgres public | alerts_service_data                             | table | postgres public | allowed_email_domains                           | table | postgres public | analytics_cycle_analytics_group_stages          | table | postgres public | analytics_cycle_analytics_project_stages        | table | postgres public | analytics_language_trend_repository_languages   | table | postgres public | appearances                                     | table | postgres public | application_setting_terms                       | table | postgres public | application_settings                            | table | postgres public | approval_merge_request_rule_sources             | table | postgres public | approval_merge_request_rules                    | table | postgres public | approval_merge_request_rules_approved_approvers | table | postgres public | approval_merge_request_rules_groups             | table | postgres public | approval_merge_request_rules_users              | table | postgres public | approval_project_rules                          | table | postgres public | approval_project_rules_groups                   | table | postgres public | approval_project_rules_protected_branches       | table | postgres public | approval_project_rules_users                    | table | postgres...省略 public | x509_certificates                               | table | postgres public | x509_commit_signatures                          | table | postgres public | x509_issuers                                    | table | postgres public | zoom_meetings                                   | table | postgres(340 rows)postgres=#

常见错误

Connection refused

  • 现象:提示Connection refused
Recipe: gitlab::database_migrations  * bash[migrate gitlab-rails database] action run    [execute] rake aborted!              PG::ConnectionBad: could not connect to server: Connection refused              	Is the server running on host "192.168.163.151" and accepting              	TCP/IP connections on port 5432?              /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:48:in `block (3 levels) in 
' /opt/gitlab/embedded/bin/bundle:23:in `load' /opt/gitlab/embedded/bin/bundle:23:in `
' Tasks: TOP => gitlab:db:configure (See full trace by running task with --trace)
  • 原因:可能是由于端口号错误、IP地址错误、网络不通、防火墙设定等诸多原因,建议先用psql确认一下,比如端口号错误,可能的示例日志如下:
[root@liumiaocn gitlab]# psql -h 192.168.163.151 -p 5432 postgres postgrespsql: could not connect to server: Connection refused	Is the server running on host "192.168.163.151" and accepting	TCP/IP connections on port 5432?[root@liumiaocn gitlab]#

数据库gitlabhq_production不存在

  • 现象:database “gitlabhq_production” does not exist
gitlab_1  |   * bash[migrate gitlab-rails database] action rungitlab_1  |     [execute] rake aborted!gitlab_1  |               ActiveRecord::NoDatabaseError: FATAL:  database "gitlabhq_production" does not existgitlab_1  |               /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:48:in `block (3 levels) in 
'gitlab_1 | /opt/gitlab/embedded/bin/bundle:23:in `load'gitlab_1 | /opt/gitlab/embedded/bin/bundle:23:in `
'gitlab_1 | gitlab_1 | Caused by:gitlab_1 | PG::ConnectionBad: FATAL: database "gitlabhq_production" does not existgitlab_1 | /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:48:in `block (3 levels) in
'gitlab_1 | /opt/gitlab/embedded/bin/bundle:23:in `load'gitlab_1 | /opt/gitlab/embedded/bin/bundle:23:in `
'gitlab_1 | Tasks: TOP => gitlab:db:configuregitlab_1 | (See full trace by running task with --trace)gitlab_1 | gitlab_1 | ================================================================================gitlab_1 | Error executing action `run` on resource 'bash[migrate gitlab-rails database]'gitlab_1 | ================================================================================
  • 原因:缺省情况下,不做设定时,GitLab中的PostgreSQL的database名称为gitlabhq_production,如果使用的是外部的PostgreSQL,此数据库没有创建时自然会出错,可以手动创建也可以使用缺省的postgres数据库

参考文档

https://docs.gitlab.com/ee/administration/postgresql/external.html

转载地址:https://liumiaocn.blog.csdn.net/article/details/108359572 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:GitLab: 官方镜像中的Redis
下一篇:Node-RED使用指南:28:撤销与删除恢复

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月05日 13时37分24秒