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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月05日 13时37分24秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
攻防世界web进阶PHP2详解
2019-04-30
如何解决词达人问题(新)
2019-04-30
攻防世界web进阶区easytornado详解
2019-04-30
攻防世界web进阶区web2详解
2019-04-30
xss-labs详解(上)1-10
2019-04-30
xss-labs详解(下)11-20
2019-04-30
攻防世界web进阶区ics-05详解
2019-04-30
攻防世界web进阶区FlatScience详解
2019-04-30
攻防世界web进阶区ics-04详解
2019-04-30
攻防世界web进阶区Cat详解
2019-04-30
攻防世界web进阶区bug详解
2019-04-30
攻防世界web进阶区ics-07详解
2019-04-30
攻防世界web进阶区unfinish详解
2019-04-30
攻防世界web进阶区i-got-id-200超详解
2019-04-30
sql注入总结学习
2019-04-30
leetcode46 全排列
2019-04-30
leetcode121 买卖股票的最佳时机
2019-04-30
leetcode 122 买卖股票的最佳时机II
2019-04-30
leetcode 309 最佳买卖股票含冷冻期
2019-04-30
leetcode 714 买卖股票的最佳时机含手续费
2019-04-30