当前位置 博文首页 > GitLab使用外部提供的Redis缓存数据库的方法详解

    GitLab使用外部提供的Redis缓存数据库的方法详解

    作者:淼叔 时间:2021-09-03 18:56

    在这里插入图片描述

    缺省的情况下GitLab的官方镜像中提供了一个Redis,如果希望把此缓存数据库放在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"

    配置文件:Redis

    [root@liumiaocn redis]# cat docker-compose.yml 
    version: '2'
    services:
     # redis master
     master:
     image: redis:5.0.9
     container_name: redis
     restart: always
     command: redis-server --port 6379
     ports:
     - 6379:6379
     volumes:
     - ./data:/data
    [root@liumiaocn redis]# 

    启动命令

    执行命令: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]#

    Redis

    [root@liumiaocn redis]# docker-compose ps
    Name Command State Ports 
    -----------------------------------------------------------------------
    redis docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp
    [root@liumiaocn redis]# 

    使用外部Redis服务

    步骤1: 设定gitlab.rb

    [root@liumiaocn redis]# docker exec -it gitlab_gitlab_1 sh
    # cd /etc/gitlab
    # ls
    gitlab-secrets.json ssh_host_ecdsa_key ssh_host_ed25519_key ssh_host_rsa_key trusted-certs
    gitlab.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.org
    585,586c585,586
    < gitlab_rails['redis_host'] = "192.168.163.151"
    < gitlab_rails['redis_port'] = 6379
    ---
    > # gitlab_rails['redis_host'] = "127.0.0.1"
    > # gitlab_rails['redis_port'] = 6379
    1049c1049
    < redis['enable'] = false
    ---
    > # redis['enable'] = true
    # 

    步骤2: 验证连接

    [root@liumiaocn redis]# docker exec -it gitlab_gitlab_1 sh
    # redis-cli -h 192.168.163.151 -p 6379
    192.168.163.151:6379> ping
    PONG
    192.168.163.151:6379> keys *
    (empty list or set)
    192.168.163.151:6379>

    步骤3: gitlab-ctl reconfigure

    执行命令:gitlab-ctl reconfigure

    或者

    执行命令:docker-compose restart

    执行日志示例如下所示:

    # gitlab-ctl reconfigure
    Starting Chef Client, version 14.14.29
    resolving cookbooks for run list: ["gitlab"]
    Synchronizing Cookbooks:
     - package (0.1.0)
     - postgresql (0.1.0)
     - redis (0.1.0)
     - monitoring (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)
     - acme (4.1.1)
     - crond (0.1.0)
     - gitlab (0.0.1)
    Installing Cookbook Gems:
    Compiling Cookbooks...
    Recipe: gitlab::default
    ...省略
    Recipe: monitoring::gitlab-exporter
     * runit_service[gitlab-exporter] action restart (up to date)
    
    Running handlers:
    Running handlers complete
    Chef Client finished, 14/654 resources updated in 03 minutes 13 seconds
    gitlab Reconfigured!
    # 

    注:虽然提示已经完成了,后续的处理一般还需要稍等,可根据docker logs命令获取的日志信息来以及docker ps返回的状态信息来确认是否真正结束。

    步骤4 : 结果确认

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

    进入到GitLab容器中可以看到内置的Redis的服务已经不在运行了

    [root@liumiaocn gitlab]# docker exec -it gitlab_gitlab_1 sh
    # gitlab-ctl status
    run: alertmanager: (pid 1629) 714s; run: log: (pid 972) 1117s
    run: gitaly: (pid 1609) 718s; run: log: (pid 462) 1337s
    run: gitlab-exporter: (pid 2412) 671s; run: log: (pid 893) 1152s
    run: gitlab-workhorse: (pid 2405) 672s; run: log: (pid 831) 1183s
    run: grafana: (pid 1644) 713s; run: log: (pid 1443) 778s
    run: logrotate: (pid 864) 1167s; run: log: (pid 873) 1166s
    run: nginx: (pid 846) 1178s; run: log: (pid 855) 1177s
    run: postgres-exporter: (pid 1638) 713s; run: log: (pid 1008) 1103s
    run: postgresql: (pid 498) 1323s; run: log: (pid 523) 1322s
    run: prometheus: (pid 1584) 719s; run: log: (pid 940) 1130s
    run: sidekiq: (pid 2399) 672s; run: log: (pid 811) 1194s
    run: sshd: (pid 30) 1381s; run: log: (pid 29) 1381s
    run: unicorn: (pid 3147) 499s; run: log: (pid 792) 1203s
    # 

    连接外部的Redis服务即可可以看到相关的缓存数据内容了。

    [root@liumiaocn gitlab]# docker exec -it redis sh
    # redis-cli -h 192.168.163.151 -p 6379
    192.168.163.151:6379> ping
    PONG
    192.168.163.151:6379> keys *
     1) "resque:gitlab:cron_job:repository_check_worker"
     2) "resque:gitlab:cron_job:container_expiration_policy_worker"
     3) "resque:gitlab:cron_job:import_export_project_cleanup_worker"
     4) "resque:gitlab:cron_job:container_expiration_policy_worker:enqueued"
     5) "gitlab:exclusive_lease:user_update_tracked_fields:1"
     6) "resque:gitlab:cron_job:pages_domain_verification_cron_worker"
     7) "cache:gitlab:broadcast_message_current_banner_json"
    ...省略
    94) "cache:gitlab:flipper/v1/feature/prometheus_metrics_measure_import_export_clean_up_cpu_duration"
    95) "resque:gitlab:cron_job:remove_unreferenced_lfs_objects_worker:enqueued"
    96) "resque:gitlab:cron_job:prune_old_events_worker:enqueued"
    97) "cache:gitlab:flipper/v1/feature/soft_email_confirmation"
    98) "session:gitlab:2::ad9aec16d58b972dc89d245757ab7b87b4fcb5c08b9fdcb4572be5ebe4807cba"
    99) "resque:gitlab:queues"
    192.168.163.151:6379> 

    总结

    jsjbwy