Gitlab 安装,使用已安装Nginx

本来以为安装会很顺利,网上相关文档的也很多,但是很多问题很难找到答案,还是记录一下。第一次安装建议在新服务器上安装,以免对其他服务器影响。当然如果使用docker镜像安装,会比较好。一般也不会有什么问题。

1.安装gitlab

这里系统是 CentOS 7 ,官方参考安装介绍路径 https://about.gitlab.com/installation/#centos-7

简单几步即可完成。

  1. 打开http和ssh入口

    sudo yum install -y curl policycoreutils-python openssh-server
    sudo systemctl enable sshd
    sudo systemctl start sshd
    sudo firewall-cmd --permanent --add-service=http
    sudo systemctl reload firewalld
  2. 安装postfix 邮件服务支持

    sudo yum install postfix
    sudo systemctl enable postfix
    sudo systemctl start postfix
  3. 下载 gitlab并安装

# 下载仓库镜像安装脚本
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
# 安装gitlab 下面地址换成自己github地址
sudo EXTERNAL_URL="http://gitlab.example.com" yum install -y gitlab-ee
  1. 根据实际情况修改配置文件,然后启动服务。

    参考官方的配置介绍:https://docs.gitlab.com/omnibus/README.html#configuring

    一般来说主要是修改 external_url 以及邮件相关。

    注意:配置 external_url 时, 如果服务器不能访问80端口记得后面跟上自己的端口

    邮件配置如腾讯企业邮箱参考:

    
    # vi /etc/gitlab/gitlab.rb
    
    gitlab_rails['gitlab_email_from'] = "service@example.com"
    gitlab_rails['smtp_enable'] = true
    gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
    gitlab_rails['smtp_port'] = 465
    gitlab_rails['smtp_user_name'] = "service@example.com"
    gitlab_rails['smtp_password'] = "you-password"
    gitlab_rails['smtp_authentication'] = "login"
    gitlab_rails['smtp_enable_starttls_auto'] = true
    gitlab_rails['smtp_tls'] = true

    注意这里腾讯企业邮端口,官网上配的587是不行的。必须465

    修改后,使你的配置生效

    gitlab-ctl reconfigure
    gitlab-ctl restart

    启动服务后注意开放防火墙端口(访问端口和邮件端口),如果是云服务器还要修改安全访问策略

    这时候就可以根据自己的路径进行访问了。

2.使用自己的Nginx

官网参考文档: https://docs.gitlab.com/omnibus/settings/nginx.html#using-an-existing-passenger-nginx-installation

  1. 修改配置文件,禁用内嵌 nginxunicorn

    external_url 'http://git.example.com'
    nginx['enable'] = false
    unicorn['enable'] = false
    gitlab_rails['internal_api_url'] = 'http://git.example.com'
    web_server['external_users'] = ['nginx']
  2. 安装nginx并增加gitlab的配置文件

    /etc/nginx/conf.d/ 目录下创建gitlab的nginx配置文件,并导入官网给的配置内容(https://docs.gitlab.com/omnibus/settings/nginx.html#vhost-server-block

    然后把nginx监听的端口和域名改成自己的。

    这时候启动nginx会出错,因为缺少passenger ,所以remove nginx。

  3. 安装 passenger + Nginx

    从给的配置文件看就知道需要这东西,它就是ruby运行的web容器。

    官网安装引导路径:https://www.phusionpassenger.com/library/install/nginx/install/oss/el7/

    
    # install EPEL
    
    sudo yum install -y epel-release yum-utils
    sudo yum-config-manager --enable epel
    sudo yum clean all && sudo yum update -y
    
    
    # repair potential system issues
    
    sudo yum install -y ntp
    sudo chkconfig ntpd on
    sudo ntpdate pool.ntp.org
    sudo service ntpd start
    
    
    # install Passenger packages
    
    sudo yum install -y pygpgme curl
    
    sudo curl --fail -sSLo /etc/yum.repos.d/passenger.repo https://oss-binaries.phusionpassenger.com/yum/definitions/el-passenger.repo
    
    sudo yum install -y nginx passenger || sudo yum-config-manager --enable cr && sudo yum install -y nginx passenger

    接下来修改 /etc/nginx/conf.d/passenger.conf

    只需要配置 passenger_rootpassenger_ruby 的配置在gitlab推荐的配置已经有了(上面第2点)。

    passenger_root 的配置必须有,不然直接报错403,我在这一步卡了很久。

    通过 gitlab-ctl tail 命令查看gitlab 查看日志,发现错误大致如下:

    ...
    directory index of "/opt/gitlab/embedded/service/gitlab-rails/public/" is forbidden ...

    使用 pas senger-config --root 命令会打印 locations.ini 的路径,贴上去即可。

    配置好了之后就可以启动 nginx,gitlab-ctl 然后浏览自己的gitlab了。

3.设置开发环境查看运行日志

我在上一步启动后依然报错:

We're sorry, but something went wrong.

此时查看gitlab的日志,没有任务错误信息,然后发现是passenger容器报错,然后查看nginx的错误日志,发现以下错误:

...
Cannot checkout session because a spawning error occurred.
...

看到这个错误依然不知所措,网上查也没什么结果,最后没办法根据错提示,连接到官网:

https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_app_env

按照这上面提到的,在nginx中把环境设置为开发环境,可以优雅打印详细错误日志。

nginx 的gitlab配置文件中加上

passenger_app_env development;

这样运行错误的时候页面会直接把错误信息详细打印出来。

此时我发现是因为启动时安装包 passenger-devel-5.2.2 安装失败,于是手动安装一下。

还有一个错误 gitlab could not find a javascript runtime 手动安装一下nodejs 即可。

yum install -y nodejs

然后运行出现最后的错误,找不到 development 环境的数据库,我把nginx上面环境配置去掉,服务器启动成功。

4.总结

装这样一个很多人都使用的gitlab服务都出现这么多问题,说到底就是像gitlab这样的项目,相关技术栈都是不熟悉的领域,比如passenger是第一次接触。如果是ruby开发者应该会很省事。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐