本文仅为个人的配置过程记录。
/mnt/disk1
,gitlab 相关数据配置到 /mnt/disk1/gitlab
openEuler 与 CentOS 在某些安装包上存在一定差异,这里主要记录不一样的地方。
主要作用是,用于 gitlab 发送通知邮件,因为 gitlab 的容器中未提供 postfix,这里在主机上安装,让容器使用主机的邮件服务
不用邮件通知的话,就不用这一步
# 安装 具体好像不用怎么配置
yum install postfix
# 启动
systemctl start postfix
# 开机自启
systemctl enable postfix
社区版 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
docker exec -it gitlab-web-1 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
使用 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'
/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
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
然后在容器中测试是否能正常发邮件
# 进入容器
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)
=> #, >, >, , >, , , , , , >
irb(main):003:0>
前面配置了 gitlab 的 ssh 端口,因此在页面克隆提示的时候是提示上述配置的端口信息(50023),原以为 gitlab 会自动调整 ssh 服务,但经测试,50023 端口不通。因此须修改 gitlab 所依赖的 ssh 的端口
修改容器中的文件 /assets/sshd_config
# 进入容器
docker exec -it gitlab-web-1 bash
# 修改文件
vi /assets/sshd_config # Port 改为 50023
然后重启容器。
测试正常了。
Notify.test_email
邮件测试