运维 - 实践篇(四)- 基础 Gitlab 私服环境搭建
前面我们已经完成了 Linux 服务器安全配置、Docker 基础开发环境搭建、Prometheus 监控环境。接下来我们要开始搭建 Gitlab + Jenkins + K8s + Harbor 的自动化持续集成环境。
本篇文章主要讲述 Gitlab 私服的搭建流程与相关常规的命令
非常遗憾!基于Docker搭建的Gitlab无法通过SSH方式拉取项目,目前暂时未能解决该问题
一、搭建GitLab私服环境
1、Docker 拉取 Gitlab 镜像文件
$ docker pull gitlab/gitlab-ce
2、创建服务数据存储目录
srv 为 linux 下默认服务数据存储目录
其实不需要显示的创建数据存储目录,因为 Docker run 容器挂载时会自动创建不存在的文件目录。
$ mkdir -p /srv/gitlab/config
$ mkdir -p /srv/gitlab/logs
$ mkdir -p /srv/gitlab/data
3、启动容器、挂载容器卷
docker network inspect code-net | grep IPv4Address 查看当前docker网络IP分配详情
PS:这里的Gitlab有几点坑爹的地方
1、配置项目组添加用户的时候需要邮箱可用,而阿里云和腾讯云都禁用了25邮箱端口服务,导致使用云服务商的服务器搭建邮箱服务器较为困难。
2、一般来说会为 Gitlab 绑定二级域名地址,这里我使用的是阿里云的服务器但是在腾讯云买的域名以及做的备案(目前正在做阿里云备案)
# 指定容器 IPAddress
$ docker run --network=code-net --ip 172.18.0.7 -d --hostname 47.111.158.6 -p 443:443 -p 80:80 -p 22:22 --name gitlab --restart=always -v /srv/gitlab/config:/etc/gitlag -v /srv/gitlab/logs:/var/log/gitlab -v /srv/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:latest
# 查看容器状态 health: starting
$ docker container ls | grep gitlab/gitlab-ce
d788d8b66338 gitlab/gitlab-ce:latest "/assets/wrapper" 52 seconds ago Up 51 seconds (health: starting) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:22222->22/tcp gitlab
# 这里启动之后需要修改容器内 SSH 端口配置,因为改动了 SSH 的端口 22 -> 22222
$ docker cp gitlab:/etc/gitlab/gitlab.rb /srv/gitlab/config/
# 该配置文件默认全部都注释 下面的指令可以追加也可以覆盖,视情况而定
# 配置 http 协议所使用的 gitlab 访问地址,可以写域名。如果端口不写的话默认为80端口
# 配置 ssh 协议所使用的访问地址和端口
# 此端口是 docker run 时 22 端口映射的 22222 端口
$ cat > /srv/gitlab/config/gitlab.rb << EOF
external_url 'http://47.111.158.6'
gitlab_rails['gitlab_ssh_host'] = '47.111.158.6'
gitlab_rails['gitlab_shell_ssh_port'] = 22
unicorn['worker_processes'] = 2
EOF
# 重启 gitlab docker 容器
$ docker restart gitlab
4、配置管理员账号
访问地址:http://47.111.158.6/users/sign_in
因为英语水平有限,不知到刚进入这个界面的时候 直接 username:root 和 password:***就是管理员的账号
当然,如果错过了管理员的配置,走用户注册流程之后还需要通过审核。这边的话可以进入容器内部修改用户信息与信息。
容器内部修改用户信息(root用户信息)
# 进入容器内部 (先通过 docker ps -a 查看容器Id)
$ docker exec -it gitlab /bin/bash
#
$ gitlab-rails console -e production
# 查看用户管理员
$ user = User.where(username:"root").first
# 或者
$ user = User.where(id: 1).first
# 配置新密码 新密码建议 大于 8位 不然保存的时候会提示错误
$ user.password = "code-fusheng"
# 确认密码
$ user.password_confirmation = "code-fusheng"
# 保存
$ user.save!
5、注册账号
访问地址:http://47.111.158.6/users/sign_in
即便注册了账号是需要通过管理员审核的。
二、Gitlab 私服项目搭建
这里我创建了,名为 code-learn 的组,然后创建了 gitlab-demo 项目,就不一一介绍如何创建组和创建项目了,自行探索。
Gitlab 和 Github 以及 Gitee 差不多,都需要通过用户邮箱账户配置 SSH 密钥。当然喝多情况下我们的电脑都需要配置多个 Git 账户信息,这里我们用个人 Gitlab 以及 Github 账户演示多Git账户信息配置。
1、查看现有 SSH 配置信息
# Mac SSH 文件目录 /Users/[username]/.ssh
$ cd /Users/zhanghao/.ssh
#
$ ssh-keygen -t rsa -C "2561035977@qq.com"
# 提示输入当前 SSH key 输入之后会生成对应的 ***_pub & *** 公钥与私钥
Enter file in which to save the key (/Users/zhanghao/.ssh/id_rsa):
$ id_rsa_gitlab_fs
# 查看公钥 并将公钥复制配置在 gitlab 或者 github 对应的 SSH 配置
# gitlab http://localhost/-/profile/keys
$ cat id_rsa_gitlab_fs.pub
ssh-rsa *******************= 2561035977@qq.com
# 多账户 git ssh 配置
$ cat >> /Users/zhanghao/.ssh/config << EOF
Host gitlab_fs
HostName 47.111.158.6
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_gitlab_fs
User 2561035977@qq.com
EOF
到这里我们完成了基础的
2、创建测试项目
3、本地 Git 拉取项目
git clone ssh://gitlab_fusheng:22222/code-learn/gitlab-demo.git
git clone http://47.111.158.6/root/gitlab-public.git
其他备忘
心情很复杂,因为各种原因导致通过 docker 搭建的 gitlab 环境无法使用 SSH 命令拉取项目,尝试了很多种方案也无济于事,网上的案例也并没有 SSH 拉取代码的操作,目前只能通过 HTTP 方式拉取项目。我并不知道这对后面的自动化部署有设么影响,抱歉了。