# 环境配置
两台 linux 服务器(Ubuntu 系统),一台搭建 Gitlab 服务端,另一台配置 Gitlab runner
# Gitlab 下载安装
采用 Docker 的形式进行安装,官方文档 https://docs.gitlab.com/ee/install/docker.html
# Ubuntu 安装 Docker
1 | curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun |
# 下载配置 Gitlab 镜像
-
设置环境变量
1
export GITLAB_HOME=/srv/gitlab
-
下载安装 Docker
1
2
3
4
5
6
7
8
9
10sudo docker run --detach \
--hostname gitlab.example.com \
--publish 8443:443 --publish 8080:80 --publish 8022:22 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab \
--shm-size 256m \
gitlab/gitlab-ee:latest-
hostname
主机名,随便设置 -
publish
Docker 和宿主机之间的端口映射,8080:80
表示宿主机的 8080 端口映射到容器的 80 端口,此时访问宿主机的 8080 端口即可访问 nginx 的默认页面 -
name
容器名 -
restart always
Docker 重启时,容器自动重启 -
shm-size
共享内存大小
扩展: Nginx 是什么? 参考文章 https://zhuanlan.zhihu.com/p/34943332
Nginx 是一个轻量级的反向代理服务器。
用户
=> vpn (正向代理) =>服务器
服务器
=> nginx (反向代理) =>用户
启动 Nginx 服务后,就相当于在 80 端口启动了 Socket 服务进行监听,如下图所示
-
# 修改镜像 gitlab
的配置
-
进入容器
1
docker exec -it gitlab /bin/bash
-
修改配置文件
配置文件
/etc/gitlab/gitlab.rb
和/var/opt/gitlab/gitlab-rails/etc/gitlab.yml
其中
gitlab.yml
由gitlab-ctl
管理,通过编辑/etc/gitlab/gitlab.rb
,然后运行gitlab-ctl reconfigure
会自动更新gitlab.yml
。因此,一般不修改gitlab.yml
文件-
修改配置
1
vi /etc/gitlab/gitlab.rb
-
在公网 IP 访问 GitLab
tips: 在
vi
下通过/external_url
快速查找1
external_url "http://your_ip_or_domain:8080"
如果
nginx['listen_port']
没有特殊指定,其会从external_url
拉取 -
设置 shell 端口
1
gitlab_rails['gitlab_shell_ssh_port'] = 8022
-
重新配置 GitLab
1
gitlab-ctl reconfigure
实测结果
这里的密码在
/etc/gitlab/initial_root_password
中,这个文件初次配置后 24h 会自动删除。 -
修改密码 (忘记密码的情况下)
1
2
3
4进入gitlab 容器
docker exec -it gitlab /bin/bash
修改密码,这里可能会等很久,耐心一点
gitlab-rake "gitlab:password:reset[root]”
-
# 配置优化
GitLab 非常吃内存,我刚开始搭建,服务器疯狂卡死,网页 502。建议配置的服务器内存在 4G 以上
# 修改 gitlab.rb
中的配置
参考 https://www.dongchuanmin.com/operate/3240.html
1 | puma['worker_timeout'] = 30 |
官方推荐的优化配置 https://docs.gitlab.cn/omnibus/settings/memory_constrained_envs.html
修改完成之后,重启配置
1 | gitlab-ctl reconfigure |
-
启动 swap 分区
物理内存 + swap(交换空间) = 虚拟内存
swap 分区,即交换空间,可以是磁盘的一个分区,也可以是一个文件。作用就是将一部分内存空间复制到硬盘空间中,释放这部分内存。某种程度而言,扩大了可用的内存空间,但与硬盘的交换必然带来性能的下降。
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查看swap分区是否启动
cat /proc/swaps
创建swap,dd device driver,用于读取文件中内容,并复制到指定位置
dd if=/dev/zero of=/data/swap bs=512 count=8388616
if 输入文件 of 输出文件 /dev/zero 输出恒为0的设备文件 bs bytes count 块数
swap文件大小为 bs * counnt = 4294971392(4G);
通过mkswap命令将上面新建出的文件做成swap分区
mkswap /data/swap
4.查看内核参数vm.swappiness中的数值是否为0,如果为0则根据实际需要调整成60。这个参数为换出运行时内存的相对权重,内存超过 40% 开始使用swap
查看内核参数vm.swappiness 数值,代表换出运行时内存的相对权重
cat /proc/sys/vm/swappiness
设置为60,即当内存超过 100-60 = 40%,开始使用swap
永久修改需编辑/etc/sysctl.conf文件
sysctl -w vm.swappiness=60
启用分区
swapon /data/swap
在/etc/fstab文件中记录文件的名字,使系统重启后,swap依然有效
echo “/data/swap swap swap defaults 0 0” >> /etc/fstab
查看确认
cat /proc/swaps
重启gitlab -
释放 buffer/cache
参考文章 https://zhuanlan.zhihu.com/p/539553217
程序运行一段时间后,linux 会将暂时不用的内存转换为 buffer/cache,通过
free
命令可以查看系统内存使用情况1
free -m -h
输出结果
1
2
3
4total used free shared buff/cache available
Mem: 7.8Gi 3.2Gi 3.5Gi 50Mi 1.1Gi 4.3Gi
Swap: 0B 0B 0B我们可以手动释放 buff/cache
1
2
3
4将在内存中的数据写入磁盘,防止丢失
sync
释放内存
echo 3 > /proc/sys/vm/drop_caches内存的管理方式在
/proc/sys/vm/ drop_chches
文件中,其只包含一个数字,不同代号的含义如下所示1
2
3
40:0 是系统默认值,默认情况下表示不释放内存,由操作系统自动管理
1:释放页缓存
2:释放dentries和inodes
3:释放所有缓存Page Cache 的解释 https://blog.51cto.com/u_11389430/2535098
# GitLab runner 配置
-
官方文档: https://docs.gitlab.com/runner/install/
建议使用
deb
或rpm
文件安装,简单快速 -
另一处详细教学位置 GitLab 中打开一个项目
Settings => CI/CD => Runners => Expand => Specific runners => Show runner installation instructions
-
安装完成后,点击编辑小图标,✅
Run untagged jobs
以运行没有设置 tag 的任务
# Q&A
- 启动之后 502
- 原因一: GitLab 反应慢,等待几分钟
- 原因二: 服务器端口占用,例如 80 端口,用
lsof -i tcp:80
查看是否有其他服务。杀掉对应进程,或在gitlab.rb
中修改端口号 - 原因三: 内存不足,优化配置或换用配置更高的服务器
你将看到大悲苦,并将在悲苦中领悟幸福。这就是我给你的赠言:到悲苦中去寻找幸福。努力干,不断地努力!
——《卡拉马佐夫兄弟》