在低配置服务器上安装使用GitLab

2019-06-26 18:26 +0800

2019-06-26 18:57 +0800

GitLab, YES

之前用了很久的Gitea,但是还是很不爽:

  • GitLab有全套CI/CD和DevSecOps,Gitea啥也没有(虽然我不用,但很爽)
  • GitLab有全套日程安排、项目计划,Gitea啥也没有
  • GitLab对issue追踪处理的支持非常丰富,完全吊打其他类似服务(GitHub也是弟弟)
  • GitLab界面好看的要死,Gitea实在不爱
  • GitLab文档超全,Gitea就算文档语言多也是个弟弟

所以无论怎么样都很想用GitLab,但是钱包很扁没钱买大内存的服务器,只好自己手调安装GitLab凑合着用。

配置环境

低配套路云轻量应用服务器一台:

  • 不知道是什么大概是Xeon的单核心CPU;
  • 少得可怜的1.8GiB内存;
  • 40GB又小又坑爹的存储空间;
  • 5M小水管(这点还算良心)。

增加虚拟内存

首先创建swap分区,我在2G内存的服务器上分了4G的swap:

dd if=/dev/zero of=/swap bs=512 count=8388608
chown root:root /swap
chmod 600 /swap
mkswap /swap

然后配置系统文件,让每次开机自动挂载交换分区:

# append to /etc/fstab
/swap swap swap default 0 0

最后修改系统设置,增加主动使用虚拟内存的比率,然后重启:

# modify /etc/sysctl.conf
vm.swappiness = 60 # default

(阿里云坑爹默认配置swappiness = 0,各种卡死)

安装GitLab

采用Omnibus安装方法:

  1. 添加GitLab社区版软件源(国内服务器可用TUNA
  2. 安装GitLab yum install gitlab-ce,大概占用1.7GiB存储空间
  3. 抢在GitLab启动前修改配置,然后gitlab-ctl reconfigure更新配置文件
# modify /etc/gitlab/gitlab.rb
unicorn['worker_processes'] = 2
sidekiq['concurrency'] = 9
prometheus_monitoring['enable'] = false

第一次启动GitLab需要编译一些东西,所以有概率服务器会卡爆,让他在后台运行一会如果没有好转就关机重启再试试好了。

配置反向代理

重新修改GitLab配置文件,通过TCP协议监听(自行选择端口号)并关闭自带的Nginx:

# modify /etc/gitlab/gitlab.rb
gitlab_workhorse['listen_network'] = "tcp"
gitlab_workhorse['listen_addr'] = "127.0.0.1:PORT"
nginx['enable'] = "false"

然后修改Caddy的配置:

https://gitlab.example.com {
    log git.access.log 
    errors git.errors.log {
        404 /opt/gitlab/embedded/service/gitlab-rails/public/404.html
        422 /opt/gitlab/embedded/service/gitlab-rails/public/422.html
        500 /opt/gitlab/embedded/service/gitlab-rails/public/500.html
        502 /opt/gitlab/embedded/service/gitlab-rails/public/502.html
    }

    proxy / http://127.0.0.1:8181 {
        fail_timeout 300s
        transparent
        header_upstream X-Forwarded-Ssl on
    }
}

效果

积累了大半年的马赛克墙全没了(连地铁站都比你努力.jpg)

GitLab Profile

即便是额外开了5个docker镜像+网页服务器,系统占用也在可以接受的范围内

htop output

%IOWAIT比例平均不超过 1%,虚拟内存对处理器带来的影响并不是很大。

sar output

References