记一次基于 Ubuntu 18.04 系统下的 gitlab 搭建

准备工作

  • 事先装好 vim 是明智的选择
  • 很多包都依赖ruby,先安装好少踩坑:sudo apt-get install ruby
    并且改变 gems 和 bundler 默认源
    1
    2
    gem sources --add https://mirrors.tuna.tsinghua.edu.cn/rubygems/ --remove https://rubygems.org/
    bundle config mirror.https://rubygems.org https://mirrors.tuna.tsinghua.edu.cn/rubygems
  • 利用清华大学镜像更新 /etc/apt/sources.list,避免初相“无法定位软件包”的问题

安装 gitlab

步骤

安装依赖包

1
2
3
4
sudo apt-get install curl openssh-server ca-certificates

# 如需使用 postfix 就安装,我使用的是 smtp 服务,故没有装
# sudo apt-get install postfix

注:执行完成后,出现邮件配置,按需选择

安装 gitlab-ce

官方的建议是使用脚本直接执行安装

1
2
3
sudo curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
# 加上 = 及后面的版本号是为了安装指定版本
sudo apt-get install gitlab-ce=10.1.1-ce.0
若官方版不行,利用[清华大学镜像](https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/)来进行主程序的安装
  • 首先信任 GitLab 的 GPG 公钥

    1
    curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null
  • 使用root用户修改配置文件

    1
    vi /etc/apt/sources.list.d/gitlab-ce.list

    添加内容: deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu xenial main

  • 安装 gitlab-ce

    1
    2
    3
    4
    sudo apt-get update

    # 下面的 ip 为本机 ip 或指向本机 ip 的域名,可以带端口
    sudo EXTERNAL_URL="https://10.10.28.100" apt-get install gitlab-ce

修改相关配置

1
sudo vim /etc/gitlab/gitlab.rb

其他的基本上不需要修改,主要是配置邮件(阿里云企业邮箱为例,yourdomain 表示你的企业邮箱域名, yourname 表示你的邮箱名)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 邮箱设置

gitlab_rails['gitlab_email_enabled'] = true # 是否开启系统邮箱,默认开启
gitlab_rails['gitlab_email_from'] = 'yourname@yourdomain.com' # 系统邮箱发件人
gitlab_rails['gitlab_email_display_name'] = 'Gitlab' # 显示的发件人名称,默认GitLab
gitlab_rails['gitlab_email_reply_to'] = 'yourname@yourdomain.com' # 收件邮箱
gitlab_rails['gitlab_email_subject_suffix'] = 'gitlab' # 邮件标题后缀


gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.yourdomain.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "yourname@yourdomain.com"
gitlab_rails['smtp_password'] = "your password" # 就是邮箱密码
gitlab_rails['smtp_domain'] = "smtp.yourdomain.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true


gitlab_rails['smtp_openssl_verify_mode'] = 'none'

启动sshd和postfix服务

1
2
3
4
sudo service sshd start

# 使用 smtp 服务发邮件就可跳过这一步
# sudo service postfix start

添加防火墙规则

这里使用的是80端口,可以是其他端口

1
sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

重新配置并启动各项服务

1
sudo gitlab-ctl reconfigure

检查GitLab是否安装好并且已经正确运行

1
sudo gitlab-ctl status

如果得到类似下面的结果,则说明GitLab运行正常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
run: alertmanager: (pid 18343) 15s; run: log: (pid 18080) 28s
run: gitaly: (pid 18152) 18s; run: log: (pid 17353) 95s
run: gitlab-monitor: (pid 18212) 17s; run: log: (pid 17953) 42s
run: gitlab-workhorse: (pid 18185) 17s; run: log: (pid 17717) 60s
run: logrotate: (pid 17831) 53s; run: log: (pid 17876) 52s
run: nginx: (pid 17720) 59s; run: log: (pid 17780) 56s
run: node-exporter: (pid 18200) 17s; run: log: (pid 17916) 48s
run: postgres-exporter: (pid 18362) 15s; run: log: (pid 18118) 24s
run: postgresql: (pid 17359) 90s; run: log: (pid 17521) 87s
run: prometheus: (pid 18313) 16s; run: log: (pid 18030) 34s
run: redis: (pid 17148) 97s; run: log: (pid 17184) 96s
run: redis-exporter: (pid 18300) 16s; run: log: (pid 17985) 38s
run: sidekiq: (pid 17651) 67s; run: log: (pid 17682) 64s
run: unicorn: (pid 17599) 69s; run: log: (pid 17648) 68s

浏览web页面并设置密码

访问https://10.10.28.100/ (ip为你设置的那个)

  • 帐号: root
  • 密码:5iveL!fe

测试邮件发送功能

1
2
3
4
sudo gitlab-rails console

# 进入控制台,然后发送邮件
Notify.test_email('xxxx@xxx.com', '邮件标题', '邮件正文').deliver_now

一般来说,若出现类似如下结果,则说明配置成功,可以去查看有没有收到邮件

若是报错: EOFError: end of file reached,基本上是因为配置端口和是否使用 ssl 配置不匹配导致的:

  • 使用25端口, 就不要配置 ssl 相关项目
  • 使用465,应该将以下设置好
    1
    2
    3
    4
    gitlab_rails['smtp_enable_starttls_auto'] = true
    gitlab_rails['smtp_tls'] = true

    gitlab_rails['smtp_openssl_verify_mode'] = 'none'

设置开机启动

1
2
3
4
5
# 开机启动
sudo systemctl enable gitlab-runsvdir.service

# 禁止开机启动
sudo systemctl disable gitlab-runsvdir.service
汉化(仅供参考)

汉化法一

注意版本号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
git clone https://gitlab.com/xhang/gitlab.git
cd gitlab/
git fetch

gitlab-ctl stop

git diff origin/10-2-stable origin/10-2-stable-zh > /tmp/10.2.diff
cd /opt/gitlab/embedded/service/gitlab-rails
git apply /tmp/10.2.diff
patch -d/opt/gitlab/embedded/service/gitlab-rails -p1 < 10.2.diff

gitlab-ctl reconfigure

gitlab-ctl start

汉化法二

进入gitlab-rails目录

1
cd /opt/gitlab/embedded/service/
  1. 下载社区提供的汉化包,在 https://gitlab.com/xhang/gitlab/ 中找到相应的汉化分支。
    1
    sudo wget -cO gitlab-10.1_zh.tar.gz https://gitlab.com/xhang/gitlab/repository/archive.tar.gz?ref=10-1-stable-zh
  2. 解压包
    1
    sudo tar -zxvf gitlab-10.1_zh.tar.gz
  3. 停止 GitLab 服务
    1
    sudo gitlab-ctl stop
  4. 备份 gitlab-rails 目录,该目录下主要是web应用部分,也是当前项目仓库的起始版本,也是汉化包要覆盖的目录。
    1
    sudo tar -zcvf /opt/gitlab/embedded/service/gitlab-rails-bak.tar.gz gitlab-rails
  5. 将解压后的汉化补丁覆盖原来的
    1
    sudo cp -rf gitlab-10-1-stable-zh/* gitlab-rails/
  6. 启动服务
    1
    sudo gitlab-ctl start
  7. 重新执行配置命令
    1
    sudo gitlab-ctl reconfigure

常用 gitlab 命令

  • 重新配置:gitlab-ctl reconfigure
  • 启动:gitlab-ctl start
  • 重新启动:gitlab-ctl restart
  • 停止:gitlab-ctl stop
  • 查看状态:gitlab-ctl status
  • 实时日志查看:gitlab-ctl tail
  • 检查报错:gitlab-rake gitlab:check

完全卸载删除 gitlab

  1. 停止 gitlab

    1
    gitlab-ctl stop
  2. 卸载 gitlab(注意这里写的是 gitlab-ce)

    1
    2
    3
    4
    5
    # Debian/Ubuntu
    sudo dpkg -r gitlab-ce

    # Redhat/Centos
    rpm -e gitlab-ce
  3. 查看 gitlab 进程

    1
    ps aux | grep gitlab
  4. 杀掉第一个进程(就是带有好多………….的进程,18777 是进程 id)

    1
    kill -9 18777

    杀掉后,在 ps aux | grep gitlab 确认一遍,还有没有 gitlab 的进程,如有,重复第 4 步

  5. 删除所有包含 gitlab 文件

    1
    find / -name gitlab | xargs rm -rf

常用 Linux 命令

压缩解压缩

  • 压缩:tar -zcvf archive_name.tar.gz directory_to_compress
  • 解压缩到当前目录:tar -zxvf archive_name.tar.gz
  • 解压缩到指定目录:tar -zxvf archive_name.tar.gz -C /tmp/extract_here/

查找内容中带有关键字的文件

  • 在根目录中找:find / -type f -name "*" | xargs grep "keyword"
  • 在当前目录中找:find . -type f -name "*" | xargs grep "keyword"

查看包的版本

  • 查询你的机器安装了哪些版本: dpkg -l '包名'
  • 查询远程库存在哪些版本: apt-cache madison "包名"
  • 安装指定某个版本: sudo apt-get install 包名=版本号

apt-get update相关

  • 忽略指定包:apt-mark hold xxx
  • 取消忽略指定包:apt-mark unhold xxx

tips

linux 使用命令 find / -name *** 查找文件的时候会遇到以下报错

find: '/run/user/1000/gvfs': Permission denied

明明用的是 root 用户,为什么权限不足呢?

官方说这是一个 bug——bug#615848. 原因是 FUSE 文件系统和权限不配的问题,全局搜索时碰到它就会退出报错。

其实这个目录是空的,查不查都没关系。所以,以下解决方式比较简直暴

1
2
3
umount /run/user/1000/gvfs

rm -rf /run/user/1000/gvfs

: 在卸载 gitlab 然后再次安装执行sudo gitlab-ctl reconfigure的时候往往会出现:ruby_block[supervise_redis_sleep] action run,会一直卡无法往下进行!

解决方案:

  1. 按住 CTRL+C 强制结束

  2. 运行:sudo systemctl restart gitlab-runsvdir

  3. 再次执行:sudo gitlab-ctl reconfigure

解决方案来源:https://gitlab.com/gitlab-org/omnibus-gitlab/issues/160#note_24078285

或者直接另起一个命令行执行sudo systemctl restart gitlab-runsvdir

参考资料