• openEuler 22.03 安装及配置Gitlab容器


    openEuler 22.03 安装及配置Gitlab容器

    本文仅为个人的配置过程记录。

    1 环境说明

    • 系统:openEuler 22.03 LTS
    • 网络:192.168.3.101 及域名 git.MYDOMAIN.net
    • 自定义端口:50080 git网页端口,50023 git的ssh端口
    • 硬盘:数据盘挂载为: /mnt/disk1,gitlab 相关数据配置到 /mnt/disk1/gitlab

    2 相关软件安装

    openEuler 与 CentOS 在某些安装包上存在一定差异,这里主要记录不一样的地方。

    2.1 安装 postfix

    主要作用是,用于 gitlab 发送通知邮件,因为 gitlab 的容器中未提供 postfix,这里在主机上安装,让容器使用主机的邮件服务

    不用邮件通知的话,就不用这一步

    # 安装 具体好像不用怎么配置
    yum install postfix
    # 启动
    systemctl start postfix
    # 开机自启
    systemctl enable postfix
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.2 安装 docker

    • 坑1: 安装了国内版的极狐 Gitlab,发现有空间等限制,卸载
    • 坑2: 相关的依赖,openEuler 与 CentOS 有差异

    社区版 docker,可以使用清华软件源:

    /etc/yum.repos.d/docker-ce.repo

    [docker-ce-stable]
    name=Docker CE Stable - x86_64
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/8/x86_64/stable
    enabled=1
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    使用 yum 安装时会提示欠缺的依赖,由于与 CentOS 有一定差异,因此无法自动安装依赖,需要安装的依赖包括:

    fuse3-libs-3.2.1-12.el8.x86_64.rpm
    fuse-overlayfs-0.7.2-6.el7_8.x86_64.rpm
    slirp4netns-0.4.3-4.el7_8.x86_64.rpm
    
    • 1
    • 2
    • 3

    有些包可以在 CentOS8 的 extras 源中找到,有些在 base 源。具体细节忘了,总之找找总能找到。

    最终安装 docker 需要使用 --nodeps 选项跳过依赖

    yum install docker-ce
    # 其实我忘了用的 yum 安装的还是下载的 rpm 安装的,应该是 rpm 吧,因为用了 --nodeps 选项。那前面不用配置 yum 源也行
    rpm -ivh --nodeps docker-ce-20.10.9-3.el8.x86_64.rpm
    
    • 1
    • 2
    • 3

    2.3 时区调整

    docker exec -it gitlab-web-1 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
    
    • 1

    3 配置 gitlab

    3.1 配置 gitlab 容器

    使用 docker 的 gitlab: gitlab-ce

    文档参考: https://docs.gitlab.com/ee/install/docker.html

    下载 gitlab 的镜像

    docker pull gitlab/gitlab-ce
    
    • 1

    这次没有用 docker run 的方式启动,而是用 docker compose 的方式启动,注意需要先安装 docker compose (install-the-plugin-manually)

    DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
    mkdir -p $DOCKER_CONFIG/cli-plugins
    # 下载 docker-compose
    curl -SL https://github.com/docker/compose/releases/download/v2.11.0/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
    # 添加执行权限
    chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
    # 查看 compose 版本
    docker compose version
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    创建 compose 配置文件

    mkdir -p ~/gitlab
    cd ~/gitlab
    # 创建一个 yml 文件
    touch docker-compose.yml
    
    • 1
    • 2
    • 3
    • 4

    docker-compose.yml 内容

    version: '3.6'
    services:
      web:
        image: 'gitlab/gitlab-ce:latest'
        restart: always
        hostname: 'git.MYDOMAIN.net'
        environment:
          GITLAB_OMNIBUS_CONFIG: |
            external_url 'http://git.MYDOMAIN.net:50080'
            gitlab_rails['gitlab_shell_ssh_port'] = 50023
            nginx['redirect_http_to_https_port'] = 50080
        ports:
          - '50080:50080'
          - '50023:50023'
        volumes:
          - '$GITLAB_HOME/config:/etc/gitlab'
          - '$GITLAB_HOME/logs:/var/log/gitlab'
          - '$GITLAB_HOME/data:/var/opt/gitlab'
        shm_size: '256m'
        extra_hosts: 
          host_machine: '192.168.3.101'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • hostname: 容器内主机名字
    • environment: 环境变量,设置主链接,通过 ssh 克隆连接 git 时的端口,nginx 使用的端口
    • ports: 暴露到外部的端口
    • extra_hosts: 相当于向 /etc/hosts 添加的映射内容

    启动容器

    # 环境变量
    export GITLAB_HOME=/mnt/disk1/gitlab
    # 启动容器
    docker compose up -d
    # 查看已启动的容器
    docker ps    # 容器名应该是 gitlab-web-1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    查看 gitlab 初始化日志(没记错的话,启动容器自动就 reconfigure 了,不行的话自己手动运行一下容器里的命令 gitlab-ctl reconfigure

    docker logs -f gitlab-web-1
    
    • 1

    查看密码(注意及时查看,这个文件会在24小时内自动删除,如果忘了初始化密码,可以参考这个

    docker exec -it gitlab-web-1 grep 'Password:' /etc/gitlab/initial_root_password
    
    • 1

    3.2 配置邮件发送功能

    docker 的官方容器是不含邮件发送代理的,官方如此说:

    The Docker images don’t include a mail transport agent (MTA). The recommended solution is to add an MTA (such as Postfix or Sendmail) running in a separate container. As another option, you can install an MTA directly in the GitLab container, but this adds maintenance overhead as you’ll likely need to reinstall the MTA after every upgrade or restart.

    可以再运行一个 postfix 或 sendmail 的容器。但刚才在系统安装过了,那么我就使用刚才在主机安装的 postfix。

    备注:通过 netstat -apn | grep 25查看 smtp 的服务是否正常开启(默认监听端口25),结果是 127.0.0.1:25,只注意到了25端口,没有注意到ip为localhost,导致浪费了很多时间。(注意,如何安装 netstat 前面有介绍方法)

    首先修改主机上的 postfix 的配置,/etc/postfix/main.cf(只列出修改项)

    # 监听所有网卡
    inet_interfaces = all 
    # 添加允许网段 容器内的ip是 172.18 网段,这里添加为12位掩码
    mynetworks = 172.16.0.0/12, 127.0.0.0/8
    
    • 1
    • 2
    • 3
    • 4

    然后重启 postfix 服务

    systemctl restart postfix
    
    • 1

    然后需要配置 gitlab 的配置文件,在主机上修改即可(只列出修改项)
    /mnt/disk1/gitlab/config/gitlab.rb

    gitlab_rails['smtp_enable'] = true
    gitlab_rails['smtp_address'] = "192.168.3.101"
    gitlab_rails['smtp_port'] = 25
    gitlab_rails['smtp_domain'] = "192.168.3.101"
    gitlab_rails['smtp_openssl_verify_mode'] = 'none'
    gitlab_rails['gitlab_email_enabled'] = true
    gitlab_rails['incoming_email_enabled'] = false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 192.168.3.101: 外部主机的实际ip,这个ip是在路由器上绑定了的,所以这里就直接设置主机的ip了
    • smtp_openssl_verify_mode: 如果没有设置ssl,一定要注意关闭这个

    然后在容器中测试是否能正常发邮件

    # 进入容器
    docker exec -it gitlab-web-1 bash
    # 进入 gitlab shell
    gitlab-rails console
    # 发送邮件 如果邮件收到,则服务正常
    Notify.test_email('MYEMAIL@126.com', 'title', 'contenct').deliver_now
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    记录如下

    [root@nuc01-openEuler ~]# docker exec -it gitlab-web-1 bash
    root@git:/# gitlab-rails console
    --------------------------------------------------------------------------------
     Ruby:         ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-linux]
     GitLab:       15.3.3 (c629a47f87f) FOSS
     GitLab Shell: 14.10.0
     PostgreSQL:   13.6
    ------------------------------------------------------------[ booted in 49.90s ]
    Loading production environment (Rails 6.1.6.1)
    irb(main):001:0> Notify.test_email('MYEMAIL@126.com', 'title', 'contenct').deliver_now
    Delivered mail 632adefd37acf_22846642789a@git.MYDOMAIN.net.mail (194.5ms)
    Traceback (most recent call last):
            1: from (irb):1
    Net::SMTPServerBusy (454 4.7.1 <MYEMAIL@126.com>: Relay access denied)
    irb(main):002:0> Notify.test_email('MYEMAIL@126.com', 'title', 'contenct').deliver_now
    Delivered mail 632adfcbbe408_228466427916@git.MYDOMAIN.net.mail (190.4ms)
    => #, >, >, , >, , , , , , >
    irb(main):003:0>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    3.3 ssh 配置

    前面配置了 gitlab 的 ssh 端口,因此在页面克隆提示的时候是提示上述配置的端口信息(50023),原以为 gitlab 会自动调整 ssh 服务,但经测试,50023 端口不通。因此须修改 gitlab 所依赖的 ssh 的端口

    修改容器中的文件 /assets/sshd_config

    # 进入容器
    docker exec -it gitlab-web-1 bash
    # 修改文件
    vi /assets/sshd_config    # Port 改为 50023
    
    • 1
    • 2
    • 3
    • 4

    然后重启容器。

    测试正常了。

    3.4 默认语言配置

    部分参考文档

    1. gitlab docker,主要文档
    2. install docker compose,解决 docker compose 安装的问题
    3. gitlab SMTP settings,解决邮件发送功能的配置问题
    4. Postfix发送SMTP邮件报错Relay access denied,解决外部使用 smtp 的问题
    5. docker下gitlab邮箱开启失败问题,学习到gitlab的 Notify.test_email 邮件测试
    6. GitLab 14 修改默认语言
      其他备注:如果在 CentOS7 中安装最新版的 docker,会有问题,docker 需要用 runc,runc 依赖于 libseccomp-2.4.1 以上,但是 CentOS7 中最高只到 libseccomp-2.3.1,因此需要卸载低版本,然后编译安装高版本的,参考:1. CentOS7使用tar方式安装Containerd,配置文件介绍 2. libseccomp
  • 相关阅读:
    Linux小程序---实现进度条功能
    EDA设计学习笔记2:STM32F103C8T6最小系统板的仿绘
    IED设备模型
    vs code Conda退出虚拟环境报错 ERROR REPORT
    几个PPT字体排版技巧,点进来就能学到新知识
    “淘宝” 开放平台接口设计思路(内附API接口免费接入地址)
    CTF 入门指南:从零开始学习网络安全竞赛
    AMD GPU 内核驱动分析(三)-dma-fence 同步工作模型
    黑客(网络安全)技术自学30天
    v-if与v-show造成部分元素丢失的问题——v-if复用元素问题
  • 原文地址:https://blog.csdn.net/ylhlly/article/details/127637101