Leon’s Blog

Dreams don't work unless you do.

GitLab部署(Mac+Docker)

使用 Docker 搭建 GitLab

GitLab作为目前最主流的分布式代码托管工具,不仅免费还支持私有化部署,同时又具备高度可定制化工作流特性,因此被业界大部分公司企业所采用。

本文章主要记录基于Mac+Docker方案的Gitlab部署过程,如果你是个人,可以用来搭建自己的gitlab服务器作为私人代码仓库,如果你就职于小型或初创公司,在资源有限的情况下也可以尝试部署成团队代码仓库作为过渡。

第一步: 下载、安装Docker

下载

打开 docker官网 选择Mac系统安装,可以看到有 IntelApple silicon 两个版本,根据自身条件选择相应的版本。

安装要求(Intel):本文主要基于 Intel 介绍

  • 至少占用 4 GB RAM
  • 不得安装 4.3.30 版本之前的 VirtualBox,因为它与 Docker Desktop 不兼容。

安装要求(Apple silicon):

  • 建议先安装 Rosetta 2 ,命令行:softwareupdate –install-rosetta

image-20230625235126525

安装

双击下载好的 Docker.dmg ,像安装其它第三方应用一样把它移动到 应用程序 目录.

第二步: 注册/登陆Docker & 下载社区版镜像

注册/登陆Docker

打开 docker 应用后,在下载镜像前需要先进行登陆,这里可能会遇到web页登陆成功,但是客户端始终在loading的情况。这是因为客户端登陆需要先进行 终端翻墙 ,具体如何翻请自行百度(注意:第三方VPN并意味着终端也会走VPN)。

下载社区版镜像

在客户端顶部的搜索栏搜索 gitlab-ce ,下载收藏数最多的这个。

image-20230626001625400

第三步: 编写镜像配置 & 运行镜像

在本地存放 Gitlab根目录 创建 docker-compose.yml 配置文件,详细配置如下: 配置文件,配置参数如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#相关命令介绍,非顺序执行,仅注释记录。
#1.更新docker-compose文件后,使用此命令重载配置,gitlab-ctl reconfigure这个命令无法重载docker-compose的配置
#docker-compose up --force-recreate -d
#2.测试邮箱能否正常发送
#2-1进入该镜像的bash命令:docker exec -it gitlab-ce /bin/bash
#2-2进入gitlab-rails的console模式:gitlab-rails console
#2-3发送邮件命令:Notify.test_email('xxxx@163.com', '主题', '邮件内容').deliver_now
#3.配置重载命令:gitlab-ctl reconfigure
#4.重启服务命令:gitlab-ctl restart
version: '1.0'
services:
gitlab:
image: 'gitlab/gitlab-ce:latest'
container_name: 'gitlab-ce'
restart: always
hostname: '192.168.31.55' #主机名称,这里替换成你本地ip
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.31.55' #外部访问ip(需要跟hostname保持一致,不可添加端口号,否则docker镜像无法创建容器),默认端口80,这里填写主机ip地址,以便拉取代码,否则其它电脑无法拉取代码。在配置有外网访问的域名情况下,`hostname` 和 `external_url` ip更换为域名即可。
gitlab_rails['time_zone'] = 'Asia/Shanghai' #时区
#======配置发件邮箱=======
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 25 #smtp_tls = false用25端口,true用465端口,否则邮件无法发出
gitlab_rails['smtp_user_name'] = "xxxx@qq.com" #发件邮箱
gitlab_rails['smtp_password'] = "yaxlafinrprybhgf" #邮箱令牌密钥(不是邮箱密码)
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
# gitlab_rails['smtp_pool'] = false
gitlab_rails['gitlab_email_from'] = 'xxxx@qq.com' #发件箱
ports:
- '880:80' #本地端口:容器端口
- '843:443' #本地端口:容器端口
- '822:22' #本地端口:容器端口
volumes: #挂在本地路径是为了防止容器被删除后,数据也跟着丢失了。
- '~/Desktop/docker/gitlab/gitlab-compose/config:/etc/gitlab' #挂载本地配置路径:容器配置路径
- '~/Desktop/docker/gitlab/gitlab-compose/logs:/var/log/gitlab' #挂载本地日志路径:容器日志路径
- '~/Desktop/docker/gitlab/gitlab-compose/data:/var/opt/gitlab' #挂载本地数据路径:容器数据路径

运行镜像:

1
gitlab-ctl restart

打开浏览器,主机通过 localhost:880 访问,其它局域网设备通过 192.168.31.55:880 访问:

image-20230626011401537

管理员初始账号名为:root

密码可通过在挂载在本地的 ...../gitlab-compose/config/initial_root_password 文件中获取到:

image-20230626011657033

登陆gitlab,创建代码仓库时会发现克隆代码的HTTP链接是 http:192.168.31.55/xxxxx/xxxx ,由于缺少端口号,因此无法拉取代码。因此我们还要去修改 SSHHTTP 的端口号:

1
2
3
4
5
6
7
8
9
#1.首先进入到docker客户端->gitlab容器->iterm模式,然后执行以下命令:
vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
#2.找到此配置,修改端口为880
gitlab:
host: 192.168.31.55
port: 880
https: false
#3.退出保存,重启gitlab
gitlab-ctl restart

待重启完成后再次刷新页面就是带有 ip+端口 的地址了~

经验总结

仅作为局域网访问的话,hostnameexternal_url 都要填写Mac的内网ip地址,不能填 127.0.0.1localhost ,否则在拉取代码时,截图中的地址将变成 127.0.0.1localhost ,意味着其它局域网电脑想拉取代码将无法获取。

如果要更新 docker-compose.yml 文件,通过 gitlab-ctl reconfiguregitlab-ctl restart 是不生效的,需要通过docker命令来进行重新部署容器:

1
docker-compose up --force-recreate -d

这个命令的作用就是 删除gitlab容器 + 重新部署 , 因此将重要配置信息挂载到本地是十分必要的~