57、【Ubuntu】【Gitlab】拉出内网 Web 服务:Gitlab 配置审视(一)

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

上篇 blog
【Ubuntu】【Gitlab】拉出内网 Web 服务:http.server 单/多线程分析(八)

分析了如果单个 Python 进程想要用多核运行,很难实现,然后分析了 Python 多进程的场景,最后得出结论:还是得配合 Nginx 反向代理实现,最后还是逃不过 Nginx,下面继续 Nginx 分析

Nginx 配置审视

OK,前面一系列单/多线程分析的 blog 从高性能,高并发的角度,分析了生产环境下 Web 服务还是得用 Nginx,而不是 Python http.server,除此之外,从安全角度,http.server 也不如 Nginx 可靠,就不展开分析了

下面回到之前 blog 【Ubuntu】【Gitlab】拉出内网 Web 服务:Nginx 事件驱动分析(一) 里提到的这句话

最开始 blog 【Ubuntu】【GitLab】局域网用 Ubuntu 搭建 GitLab 里介绍的,需要修改 /etc/gitlab/gitlab.rb 文件,在里面添加一个自定义的 Nginx 配置项

首先,这里的 nginx['custom_nginx_config'] 配置项是 GitLab 提供的一个高级自定义选项 ,这里的 nginx['custom_nginx_config'] = <<-EOF 是 Ruby 语言中的 Here Document 用法,用来定义多行字符串,其中 <<-EOF 表示从下一行开始,直到遇到单独一行的 EOF 为止,中间所有内容都作为字符串赋值给 nginx['custom_nginx_config']

修改完 /etc/gitlab/gitlab.rb 文件后,在终端输入

bash 复制代码
sudo gitlab-ctl reconfigure

让配置生效,最后可在生成文件 /var/opt/gitlab/nginx/conf/nginx.conf 中找到相关内容

可以看到,配置项 custom_nginx_config 里面的内容会被展开插入到 nginx.confhttp {} 块中(通常在末尾),这个自定义的 server 会干预 Nginx 结构,绕过 GitLab 默认的 Workhorse + Puma 架构

标准 GitLab 的架构是:

首先,在这里,Puma 是个高性能的 Ruby 应用服务器,它直接运行 Gitlab 的 Rails 应用代码

  • 从业务层面:Puma 会处理包括用户登录,项目管理,Merge Request,API 等所有后端业务逻辑,相当于 Gitlab 的业务大脑
  • 从技术层面 :Puma 会处理 HTTP 请求(比如 Web 服务器具体路径 /projects/123/api/v4/users 等),并与数据库(PostgreSQL)交互,执行 Ruby 代码,生成 HTML 或 JSON 响应等

作为后端,Puma 虽然能处理很多业务,功能很强大,但也有其局限性,比如

  • 不适合处理大文件上传和下载,会阻塞工作线程
  • 不擅长处理静态资源,比如 JS,CSS,images 等
  • 对长连接(比如 Git over HTTP,CI job logs 流式输出等)支持不够高效

在此背景下,Gitlab 引入了中间层 Gitlab-Workhorse

Gitlab-Workhorse 是用 Go 语言写的一个轻量级反向代理服务,其本身不属于 Web 框架,而是一个专用请求处理器,专门处理 Puma 不擅长但很重要的任务

Gitlab-Workhorse 核心职责包括

  • 静态文件服务:如果用户请求的是静态文件,Gitlab-Workhorse 可以直接返回文件,绕过 Puma,极大提升性能
  • 大文件上传:接收用户上传的 LFS 文件,附件等,先存到临时目录,再通知 Puma 处理元数据,避免 Puma 线程被长时间占用
  • Git HTTP(S) 操作 :处理 git clonegit pushgit fetch 请求等,这些是长连接,流式操作,Puma 处理效率低
  • CI Job Logs 流式输出:实时推送日志到前端,不阻塞 Rails 进程
  • 请求预处理:验证 token,限速,过滤恶意请求等

OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【Ubuntu】【Gitlab】拉出内网 Web 服务:Gitlab 配置审视(二)

相关推荐
张雨zy19 分钟前
Vue 项目管理数据时,Cookie、Pinia 和 LocalStorage 三种常见的工具的选择
前端·javascript·vue.js
五月君_25 分钟前
Nuxt UI v4.3 发布:原生 AI 富文本编辑器来了,Vue 生态又添一员猛将!
前端·javascript·vue.js·人工智能·ui
dblens 数据库管理和开发工具32 分钟前
Git 指令大全(全干货版)
运维·git·ubuntu
!执行36 分钟前
遇到 Git 提示大文件无法上传确实让人头疼
前端·github
阿豪只会阿巴1 小时前
【多喝热水系列】从零开始的ROS2之旅——Day3
linux·笔记·ubuntu·ros2
坚持学习前端日记1 小时前
个人网站从零到盈利的成长策略
前端·程序人生
CamilleZJ1 小时前
eslint+prettier
前端·eslint·工程化·prettier
web小白成长日记2 小时前
深入理解 React 中的 Props:组件通信的桥梁
前端·javascript·react.js
tjswk20082 小时前
在ios上动态插入元素的列表使用:last-child样式可能不能及时生效
前端
小小荧2 小时前
CSS 写 SQL 查询?后端慌了!
前端·sql