GitLab 13.10.2本地环境搭建以及502错误终极对策

2024-01-04 05:59

本文主要是介绍GitLab 13.10.2本地环境搭建以及502错误终极对策,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

GitLab 13.10.2本地环境搭建以及502错误终极对策

  • 背景
  • GitLab 13.10.2本地环境搭建
  • 502错误的终极对策
    • 第1种情况:失败
    • 第2种情况:失败
    • 第3种情况:失败
    • 第4种情况:成功
    • 第5种情况:成功
    • 第6种情况:成功
    • 总结

背景

GitLab本地环境的搭建基本上都没有问题,网上也有很多教程。因为服务器安装了Jenkins服务,所以默认的8080端口被占用了。在此基础上要想安装GitLab就必须要更改GitLab的端口号了。

需要说明的是本文使用的是官网最新的社区版本,最新版中已经将web服务器从unicorn切换成了puma,切换的原因是官网旨在为了减少GitLab的内存需求,官方已经从Unicorn过渡到Puma。Puma支持多线程,可以将GitLab的内存占用减少约30%。当然Unicorn目前还是保留着的,只不过默认开启的是Puma。两者可以自由切换。在文末我会对于502错误重点讲一下这两种服务在端口设置上的区别。

GitLab 13.10.2本地环境搭建

1.切换至yum.repos.d下

cd /etc/yum.repos.d

2.创建gitlab-ce.repo,设置国内镜像(但有时官网速度比国内要快)

vim gitlab-ce.repo[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1

3.刷新yum

yum makecache

4.安装gitlab

yum install gitlab-ce

5.修改配置文件

vim /etc/gitlab/gitlab.rb

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6.刷新配置

gitlab-ctl reconfigure

7.添加允许防火墙开放端口

firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --reload

8.设定完成,即可访问
在这里插入图片描述

502错误的终极对策

需要说明的是,本人在搭建上面的环境是,设置8080以外的端口8888时掉进了坑。

网上说改一下unicorn[‘port’] = 8888就可以了。但对于最新版本的Gitlab来说,是不够的。就像我前文介绍的一样,最新版已经默认启用puma作为默认的Web服务器,unicorn也同时存在,只不过没有开启,如果需要unicorn则需要首先开启它。

其次external_url属性也是一个奇妙的设置,设置IP地址和端口号,即默认设置了nginx转发的端口。不需要网上说的需要设置nginx[‘listen_port’] =8888,你最终需要访问的地址其实就是external_url。

puma[‘port’] = 8888以及unicorn[‘port’] = 8888的设置也有讲究。
1.puma的端口号不能与external_url中设置的端口号一致。
2.unicorn的端口号可以与external_url中设置的端口号一致。

下面是我对两种web服务器端口的设置。

第1种情况:失败

external_url ‘http://172.16.223.63’
#puma[‘port’] = 8888
默认nginx使用的是8080端口,puma注释掉默认也是8080端口,端口已经被jenkins占用。

后台查看log时会发现下面的错误。

gitlab-ctl tail pumaErrno::EADDRINUSE: Address already in use - bind(2) for "127.0.0.1" port 8080

第2种情况:失败

external_url ‘http://172.16.223.63:8888’
#puma[‘port’] = 8888
nginx虽然使用了8888端口,但是默认puma是注释掉的状态,还是引用了8080端口。
所以还是下面的错误。

Errno::EADDRINUSE: Address already in use - bind(2) for "127.0.0.1" port 8080
[root@centos7 puma]# netstat  -anp  |grep 8888
tcp        0      0 0.0.0.0:8888            0.0.0.0:*               LISTEN      42630/nginx: master 
tcp        0      0 172.16.223.63:8888      172.16.223.71:3325      ESTABLISHED 42634/nginx: worker 
tcp        0      0 172.16.223.63:8888      172.16.223.71:3326      ESTABLISHED 42634/nginx: worker 

第3种情况:失败

external_url ‘http://172.16.223.63:8888’
puma[‘port’] = 8888
nginx和puma的端口都设置了8888,但是还是失败。主要原因是puma的没有起来,因为8888被nginx占用了。

Errno::EADDRINUSE: Address already in use - bind(2) for "127.0.0.1" port 8888
[root@centos7 puma]# netstat  -anp  |grep 8888
tcp        0      0 0.0.0.0:8888            0.0.0.0:*               LISTEN      42630/nginx: master 
tcp        0      0 127.0.0.1:35274         127.0.0.1:8888          ESTABLISHED 41578/prometheus    
tcp        0      0 172.16.223.63:8888      172.16.223.71:3149      TIME_WAIT   -                   
tcp        0      0 127.0.0.1:8888          127.0.0.1:35274         ESTABLISHED 42634/nginx: worker 
tcp        0      0 172.16.223.63:8888      172.16.223.71:3150      TIME_WAIT   -     

第4种情况:成功

external_url ‘http://172.16.223.63:8888’
puma[‘port’] = 8887
nginx使用了8888端口,puma使用了8887端口,两者没有冲突,nginx也可以顺利的把8887转向8888。

[root@centos7 puma]# netstat  -anp  |grep 8888
tcp        0      0 0.0.0.0:8888            0.0.0.0:*               LISTEN      42630/nginx: master 
tcp        0      0 172.16.223.63:8888      172.16.223.71:3085      ESTABLISHED 42632/nginx: worker 
tcp        0      0 172.16.223.63:8888      172.16.223.71:3086      ESTABLISHED 42633/nginx: worker 
[root@centos7 puma]# netstat  -anp  |grep 8887
tcp        0      0 127.0.0.1:8887          0.0.0.0:*               LISTEN      48235/puma 5.1.1 (u 
tcp        0      0 127.0.0.1:8887          127.0.0.1:60296         TIME_WAIT   -                   
tcp        0      0 127.0.0.1:8887          127.0.0.1:60298         TIME_WAIT   -   

第5种情况:成功

external_url ‘http://172.16.223.63:8888’
puma[‘enable’] = false
unicorn[‘enable’] = true
unicorn[‘port’] = 8888
nginx使用的8888端口,puma被禁用,unicorn被开启,也使用了8888端口。但是两者没有冲突。
因为unicorn监听的是tcp6,而nginx是tcp。

[root@centos7 puma]# netstat  -anp  |grep 8888
tcp        0      0 0.0.0.0:8888            0.0.0.0:*               LISTEN      42630/nginx: master 
tcp        0      0 127.0.0.1:8888          127.0.0.1:35022         ESTABLISHED 42634/nginx: worker 
tcp        0      0 127.0.0.1:35022         127.0.0.1:8888          ESTABLISHED 41578/prometheus    
tcp        0      0 172.16.223.63:8888      172.16.223.71:2728      ESTABLISHED 42634/nginx: worker 
tcp        0      0 172.16.223.63:8888      172.16.223.71:2729      TIME_WAIT   -                   
tcp6       0      0 ::1:8888                :::*                    LISTEN      44776/unicorn maste 

第6种情况:成功

external_url ‘http://172.16.223.63:8888’
puma[‘enable’] = false
unicorn[‘enable’] = true
unicorn[‘port’] = 8887
这种情况与上面的第4种情况类似,nginx使用了8888端口,unicorn使用了8887端口,两者没有冲突,nginx也可以顺利的把8887转向8888。

[root@centos7 puma]# netstat  -anp  |grep 8888
tcp        0      0 0.0.0.0:8888            0.0.0.0:*               LISTEN      42630/nginx: master 
tcp        0      0 172.16.223.63:8888      172.16.223.71:2913      ESTABLISHED 42632/nginx: worker 
tcp        0      0 172.16.223.63:8888      172.16.223.71:2914      ESTABLISHED 42634/nginx: worker 
tcp6       0      0 ::1:8888                :::*                    LISTEN      46076/unicorn maste 
[root@centos7 puma]# netstat  -anp  |grep 8887
tcp6       0      0 ::1:8887                :::*                    LISTEN      46076/unicorn maste 
tcp6       0      0 ::1:8887                ::1:42060               TIME_WAIT   -                   
tcp6       0      0 ::1:8887                ::1:42048               TIME_WAIT   -                   
tcp6       0      0 ::1:8887                ::1:42066               TIME_WAIT   -                   
tcp6       0      0 ::1:8887                ::1:42052               TIME_WAIT   -                  

总结

1.puma的端口号不能与external_url中设置的端口号一致。
2.unicorn的端口号可以与external_url中设置的端口号一致。
3.默认是开启puma的,如果要使用unicorn,关闭puma,开启unicorn。
4.puma的整体性能要比unicorn好,具体根据服务器硬件配置设定。
5.使用了上面的设定方法,如果还是502错误,需要使用下面的命令查看log,

gitlab-ctl tail puma
gitlab-ctl tail unicorn

log查看成功与否需要开启vim /etc/gitlab/gitlab.rb中的log设置。
如:

unicorn['log_directory'] = "/var/log/gitlab/unicorn"
puma['log_directory'] = "/var/log/gitlab/puma"

6.具体你的web服务器当前开启的是什么web服务器,可以通过gitlab-ctl status来查看,列表中有run: puma即当前使用的是puma,run: unicorn为unicorn。
例如下面的就是run: puma

[root@centos7 puma]# gitlab-ctl status
run: alertmanager: (pid 41393) 4834s; run: log: (pid 12770) 10592s
run: gitaly: (pid 41405) 4833s; run: log: (pid 12741) 10592s
run: gitlab-exporter: (pid 41432) 4832s; run: log: (pid 12758) 10592s
run: gitlab-workhorse: (pid 41435) 4832s; run: log: (pid 12735) 10592s
run: grafana: (pid 42639) 4701s; run: log: (pid 12768) 10592s
run: logrotate: (pid 57159) 1231s; run: log: (pid 12756) 10592s
run: nginx: (pid 42630) 4701s; run: log: (pid 12744) 10592s
run: node-exporter: (pid 41552) 4830s; run: log: (pid 12760) 10592s
run: postgres-exporter: (pid 41558) 4830s; run: log: (pid 12774) 10592s
run: postgresql: (pid 41569) 4830s; run: log: (pid 12727) 10592s
run: prometheus: (pid 41578) 4829s; run: log: (pid 12771) 10592s
run: puma: (pid 53411) 2511s; run: log: (pid 48234) 3554s
run: redis: (pid 41596) 4828s; run: log: (pid 12729) 10592s
run: redis-exporter: (pid 41605) 4828s; run: log: (pid 12761) 10592s
run: sidekiq: (pid 42582) 4714s; run: log: (pid 12737) 10592s

这篇关于GitLab 13.10.2本地环境搭建以及502错误终极对策的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/568359

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

一文教你使用Python实现本地分页

《一文教你使用Python实现本地分页》这篇文章主要为大家详细介绍了Python如何实现本地分页的算法,主要针对二级数据结构,文中的示例代码简洁易懂,有需要的小伙伴可以了解下... 在项目开发的过程中,遇到分页的第一页就展示大量的数据,导致前端列表加载展示的速度慢,所以需要在本地加入分页处理,把所有数据先放

本地搭建DeepSeek-R1、WebUI的完整过程及访问

《本地搭建DeepSeek-R1、WebUI的完整过程及访问》:本文主要介绍本地搭建DeepSeek-R1、WebUI的完整过程及访问的相关资料,DeepSeek-R1是一个开源的人工智能平台,主... 目录背景       搭建准备基础概念搭建过程访问对话测试总结背景       最近几年,人工智能技术

SpringBoot中的404错误:原因、影响及解决策略

《SpringBoot中的404错误:原因、影响及解决策略》本文详细介绍了SpringBoot中404错误的出现原因、影响以及处理策略,404错误常见于URL路径错误、控制器配置问题、静态资源配置错误... 目录Spring Boot中的404错误:原因、影响及处理策略404错误的出现原因1. URL路径错

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

在Mysql环境下对数据进行增删改查的操作方法

《在Mysql环境下对数据进行增删改查的操作方法》本文介绍了在MySQL环境下对数据进行增删改查的基本操作,包括插入数据、修改数据、删除数据、数据查询(基本查询、连接查询、聚合函数查询、子查询)等,并... 目录一、插入数据:二、修改数据:三、删除数据:1、delete from 表名;2、truncate

deepseek本地部署使用步骤详解

《deepseek本地部署使用步骤详解》DeepSeek是一个开源的深度学习模型,支持自然语言处理和推荐系统,本地部署步骤包括克隆仓库、创建虚拟环境、安装依赖、配置模型和数据、启动服务、调试与优化以及... 目录环境要求部署步骤1. 克隆 DeepSeek 仓库2. 创建虚拟环境3. 安装依赖4. 配置模型