返回首页 - Notes - 2016

在 Ubuntu 上快速配置 GitLab


安装

  1. 添加源(注意,不同版本的 Ubuntu,其代号都不一样,需要自己对照修改,比如下面的 trusty):sudo vim /etc/apt/sources.list.d/gitlab-ce.list
    deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu trusty main
    
  2. 更新包列表:sudo apt-get update
  3. 安装依赖:sudo apt-get install curl openssh-server ca-certificates postfixpostfix 安装过程中选择 Internet Site,如询问邮件地址后缀,一般填 git.your-domain.com 即可)
  4. 安装 GitLab 社区版:sudo apt-get install gitlab-ce
  5. 初始化 GitLabsudo gitlab-ctl reconfigure
  6. 如开启了防火墙,需要打开 80443 端口
    sudo ufw allow http
    sudo ufw allow OpenSSH
    

配置

  1. 修改外网访问地址:sudo vim /etc/gitlab/gitlab.rb
    external_url 'http://git.your-domain.com'
    
  2. 使配置生效:sudo gitlab-ctl reconfigure
  3. 用浏览器访问 http://git.your-domain.com,会要求设置站点 root 用户的初始密码

其它命令


开启HTTPS

我们使用免费的 Let's Encrypt 证书,证书有效期三个月,但可以无限次免费续期,现在它提供了一个自动化的工具叫 Certbot 来快速生成证书

首先登录服务器,安装 Certbot,不同的 Ubuntu 版本,命令有所不同

  1. Ubuntu 16.10sudo apt-get install certbot
  2. Ubuntu 16.04sudo apt-get install letsencrypt
  3. Ubuntu 14.04 and Olderwget -c https://dl.eff.org/certbot-auto && chmod a+x certbot-auto

我本次安装的服务器是 Ubuntu 14.04,下面统一将 Certbot 命令行名字指代为 certbot

必须确保指向 GitLab 的域名有正常解析,因为 Certbot 需要验证这个域名确实是属于你的

  1. 新建一个目录:sudo mkdir -p /var/www/letsencrypt
  2. 编辑 GitLab 配置文件:sudo vim /etc/gitlab/gitlab.rb
    nginx['custom_gitlab_server_config'] = "location ^~ /.well-known { root /var/www/letsencrypt; }"
    
  3. 使配置生效:sudo gitlab-ctl reconfigure
  4. 生成证书,期间需要你输入邮箱以及同意协议:sudo letsencrypt certonly -a webroot -w /var/www/letsencrypt -d git.your-domain.com
  5. 证书生成成功后,保存在 /etc/letsencrypt/live/git.your-domain.com 文件夹下
  6. 编辑 GitLab 配置文件,以使用证书:sudo vim /etc/gitlab/gitlab.rb
    external_url 'https://git.your-domain.com'  # 网址由http改成https
    
    nginx['redirect_http_to_https'] = true
    
    nginx['ssl_certificate']     = "/etc/letsencrypt/live/git.your-domain.com/fullchain.pem"
    nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/git.your-domain.com/privkey.pem"
    
  7. 使配置生效:sudo gitlab-ctl reconfigure
  8. 现在打开站点,应该会自动跳转到 https 的地址,且浏览器地址栏会有绿色标记

证书有效期只有三个月,续期命令为 certbot renew

续期时,需要确保 external_urlhttp://git.your-domain.comnginx['redirect_http_to_https']false


让GitLab和其他站点和平共处

这种方式安装的 GitLab,默认将所有请求都截获了,且占用了 80 端口,导致外部 NGINX 没法正常工作

网上解决方案很多,但我觉得都不好使,下面是我的方法

  1. 先按上述步骤安装好 GitLab,确保能跑起来、HTTPS 证书有到位
  2. 修改 GitLab 配置,将其监听的端口改成非 80 端口:sudo vim /etc/gitlab/gitlab.rb
    nginx['enable'] = true
    
    nginx['listen_port']  = 8081
    nginx['listen_https'] = 8082
    
  3. 使配置生效:sudo gitlab-ctl reconfigure
  4. 现在应该可以通过 http://git.your-domain.com:8081https://git.your-domain.com:8081 访问了
  5. 如果是公司内部使用,到这里就可以了,如果是需要开放给外部客户使用,在系统 NGINX 层面做个反向代理即可,Over

date:2016-11-07、2016-11-08、2016-11-13、2016-11-23、2017-02-21