openEuler 22.03 安装及配置Gitlab容器

  • openEuler 22.03 安装及配置Gitlab容器
  • 1 环境说明
  • 2 相关软件安装
  • 2.1 安装 postfix
  • 2.2 安装 docker
  • 2.3 时区调整
  • 3 配置 gitlab
  • 3.1 配置 gitlab 容器
  • 3.2 配置邮件发送功能
  • 3.3 ssh 配置
  • 3.4 默认语言配置
  • 部分参考文档

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

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

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

使用 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

有些包可以在 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

2.3 时区调整

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

3 配置 gitlab

3.1 配置 gitlab 容器

使用 docker 的 gitlab: gitlab-ce

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

下载 gitlab 的镜像

docker pull gitlab/gitlab-ce

这次没有用 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

创建 compose 配置文件

mkdir -p ~/gitlab
cd ~/gitlab
# 创建一个 yml 文件
touch docker-compose.yml

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'
  • 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

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

docker logs -f gitlab-web-1

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

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

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

然后重启 postfix 服务

systemctl restart postfix

然后需要配置 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
  • 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

记录如下

[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)
=> #<Mail::Message:294900, Multipart: false, Headers: <Date: Wed, 21 Sep 2022 09:56:27 +0000>, <From: GitLab <gitlab@git.MYDOMAIN.net>>, <Reply-To: GitLab <noreply@git.MYDOMAIN.net>>, <To: MYEMAIL@126.com>, <Message-ID: <632adfcbbe408_228466427916@git.MYDOMAIN.net.mail>>, <Subject: title>, <Mime-Version: 1.0>, <Content-Type: text/html; charset=UTF-8>, <Content-Transfer-Encoding: 7bit>, <Auto-Submitted: auto-generated>, <X-Auto-Response-Suppress: All>>
irb(main):003:0>

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

然后重启容器。

测试正常了。

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