公司一直在使用码云(gitee)作为代码托管平台, 但是码云偶尔会宕机, 一些 CI 流程依赖于码云就跑不了了, 最近又宕了一次, 影响比较大, 所以决定搞一台机器部署一个 Gitlab 用来作为码云的后备.
使用 Docker 部署是一种非常简单的方式, 因为 Docker 会帮你把繁琐的环境也一起打包为一个镜像, 所以可以用一行命令直接就部署好...
本来我是这么以为的, 但实际上还是有些东西要考虑的, 下面我就把我的部署过程整理出来.
步骤:
准备硬件设备并安装操作系统;
配置额外的存储空间(可选);
安装Docker;
部署并配置Gitlab.
开始执行
-
准备硬件设备并安装操作系统:
硬件我是拿了公司一台闲置的电脑, 操作系统选择了 OpenEuler , 可以在官网查找并下载 ISO镜像 .
下载完毕后, 准备一个U盘制作一个启动盘:
-
Windows
推荐使用 rufus 制作;
-
MacOS
将镜像格式转化一下:
hdiutil convert -format UDRW -o openeuler 下载好的镜像路径
确认需要烧录的设备:
diskutil list
, 例如我这里是: /dev/disk4解除挂载
diskutil unmountDisk /dev/disk4
将镜像写入
sudo dd if=./openeuler.dmg of=/dev/disk4 bs=2m
, 可能会持续一段时间, 耐心等待
写入完成后, 将U盘作为设备的启动盘, 启动并安装 OpenEuler , 这里有几个注意事项:
在安装界面将网络连接好, 并在通用设置中设置为自动连接, 否则后续需要在命令行中配置网络比较麻烦;
如果禁用了root用户, 新建用户记得勾选为管理员.
-
-
配置额外的存储空间(可选)
这一步取决于你的设备存储空间是否充足, 我安装操作系统的固态硬盘只有 256G , 所以还找了一块 1T 的机械硬盘来做存储空间.
如果你空间充足可以忽略这一部分, 以下为详细步骤:
-
分区
使用
sudo fdisk -l
查看硬盘信息, 确认需要使用的硬盘, 我这里为 /dev/sdb使用
sudo fdisk /dev/sdb
为硬盘分区使用
p
指令打印现有分区表,d
指令为删除,n
指令为新建分区完成后, 使用
w
指令保存并退出, 如果想放弃更改则输入q
直接退出.
我将磁盘原有分区全部清理后, 创建了一个独立的分区, 文件格式为 ext4
设备 起点 末尾 扇区 大小 类型 /dev/sdb1 2048 1953525134 1953523087 931.5G Linux 文件系统
-
挂载
OpenEuler 使用 Lvm 管理硬盘, 可能有一些概念需要取理解, 如果感兴趣可以参考文档:
以下为挂载步骤:
从分区中创建物理卷:
pvcreate /dev/sdb1
将物理卷添加到卷组中, 我这里直接添加到系统现有的的 openeuler 卷组:
vgextend openeuler /dev/sdb1
使用卷组中的可用的空间创建一个逻辑卷:
lvcreate -l 100%FREE -n storage openeuler
创建一个目录用来挂载逻辑卷, 我这里生成的为 /mnt/data :
sudo mkdir -p /mnt/data
-
确定逻辑卷的 UUID :
sudo blkid /dev/openeuler/storage
, 我的输出的内容为:/dev/openeuler/storage: UUID="be32f9dd-867c-418a-a94b-fb4bb3e04d67" BLOCK_SIZE="4096" TYPE="ext4"
将其中的UUID值复制
-
将逻辑卷添加为自动挂载, 记得替换命令中的 UUID 为上一步得到的值:
echo "UUID=be32f9dd-867c-418a-a94b-fb4bb3e04d67 /mnt/data ext4 defaults 0 0" | sudo tee -a /etc/fstab > /dev/null
使用
mount -a
测试是否能够正常挂载, 如果测试不通过, 请务必解决挂载问题, 否则可能导致系统无法启动 , 如果没有任何输出说明一切正常至此完成存储空间扩充
-
-
部署并配置Gitlab
-
准备几个目录用来给 docker 持久化存储:
配置:
mkdir -p $HOME/docker/gitlab/config
日志
mkdir -p $HOME/docker/gitlab/logs
数据
sudo mkdir -p /mnt/data/gitlab
, 此处我选择的是第二步配置的扩展空间, 你可以选择你自己的位置
-
部署 Gitlab :
docker run -d \ -p 80:80 \ --name gitlab \ --restart always \ -v $HOME/docker/gitlab/config:/etc/gitlab \ -v $HOME/docker/gitlab/logs:/var/log/gitlab \ -v /mnt/data/gitlab:/var/opt/gitlab \ gitlab/gitlab-ce
下载镜像可能需要花费一些时间.
-
完成后查看刚才运行起来的镜像容器信息:
docker ps
应该能看到类似如下的容器信息:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 87ac98c2a2ec gitlab/gitlab-ce "/assets/wrapper" 19 hours ago Up 19 hours (healthy) 22/tcp, 443/tcp, 0.0.0.0:80->80/tcp gitlab
复制一下第一列的 CONTAINER ID , 使用以下命令进入该容器:
docker exec -it 87ac98c2a2ec /bin/bash
-
配置 Gitlab 管理员密码
在 docker容器 中, 使用
gitlab-rails console -e production
进入 rails 控制台进入后界面类似:
root@87ac98c2a2ec:/# gitlab-rails console -e production -------------------------------------------------------------------------------- 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 20.73s ] Loading production environment (Rails 6.1.6.1) irb(main):001:0>
首先查找 root用户 的 用户id :
User.all
irb(main):001:0> User.all => #<ActiveRecord::Relation [#<User id:1 @root>]>
此处 root用户 的用户id为 1, 直接切换为root用户 :
user=User.where(id:1).first
irb(main):002:0> user=User.where(id:1).first => #<User id:1 @root>
更改 root用户 密码 :
user.password='xxx'
, 将xxx更改为你的密码irb(main):003:0> user.password='xxx' => "xxx"
确认一次密码 :
user.password_confirmation='xxx'
, 同样将xxx更改为你的密码irb(main):004:0> user.password_confirmation='xxx' => "xxx"
保存修改 :
user.save!
irb(main):005:0> user.save! ... => true
退出控制台 :
exit
-
配置 Gitlab 中的 external_url , 避免生成的 git clone 连接无法正常使用
因为我搭建的 Gitlab 只是用与公司局域网使用, 所以将 external_url 设置为局域网的ip地址.
tips: 在 宿主机 中可以使用
ip addr show
查看设备的以太网ip地址, 此处我获取到的 ip地址 为 : 192.168.1.168 , 可以尝试在路由器中将设备的 ip 设置为静态分配, 避免 DHCP 将ip 分配给别的设备.在 docker容器 中使用
vi /etc/gitlab/gitlab.rb
更改配置:vi命令模式 中, 输入
/external_url
回车后, 按n
搜索搜索到后, 按 Esc键 退出搜索, 按
i
进入 vi插入模式 , 修改# external_url 'xxxx'
为
external_url '192.168.1.168'
记得去掉前面的 # 注释符
修改完成后, 按 Esc键 退出 vi插入模式 , 输入
:wq
保存并退出此时仅修改了配置文件, 还未使配置生效, 需要运行
gitlab-ctl reconfigure
使配置生效.
-
好啦, 此时已经全部配置完成, 现在你愉快地使用 Gitlab 啦.