GitLab 部署和配置指南

GitLab 部署和配置指南

1. GitLab 容器配置概述

在部署 GitLab 时,可能涉及以下几部分内容:

  • 内置 Nginx 的配置和调整。
  • HTTPS 证书的申请、使用和续期。
  • 通过 FRP 映射内网服务到外部服务器。
  • 阿里云服务器的 Nginx 配置和反向代理。

本文将完整涵盖这些配置,帮助您成功部署和维护 GitLab 服务。


2. FRP 配置

2.1 FRP 客户端配置文件(群晖/内网)

使用以下示例配置文件,通过 FRP 将 GitLab 的 HTTP 和 HTTPS 服务暴露到外部。

HTTP 配置
[[proxies]]
name = "GitLab-HTTP"
type = "tcp"
local_ip = "127.0.0.1"
local_port = 6680  # 群晖上 GitLab 的 HTTP 端口
remote_port = 8080 # 阿里云服务器上的 HTTP 映射端口
HTTPS 配置
[[proxies]]
name = "GitLab-HTTPS"
type = "tcp"
local_ip = "127.0.0.1"
local_port = 6443  # 群晖上 GitLab 的 HTTPS 端口
remote_port = 8443 # 阿里云服务器上的 HTTPS 映射端口

3. 阿里云 Nginx 配置

阿里云服务器需要配置 Nginx,代理到 FRP 服务端暴露的端口。

3.1 HTTP 配置

server {listen 80;server_name gitlab.example.com;location / {proxy_pass http://127.0.0.1:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_connect_timeout 60s;proxy_read_timeout 60s;proxy_send_timeout 60s;}
}

3.2 HTTPS 配置

server {listen 443 ssl;server_name gitlab.example.com;ssl_certificate /etc/letsencrypt/live/gitlab.example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/gitlab.example.com/privkey.pem;include /etc/letsencrypt/options-ssl-nginx.conf;ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;location / {proxy_pass https://127.0.0.1:8443;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_connect_timeout 60s;proxy_read_timeout 60s;proxy_send_timeout 60s;}
}

4. GitLab 容器内 HTTPS 配置

4.1 编辑 gitlab.rb 文件

gitlab.rb 是 GitLab 配置的核心文件,位于容器内的 /etc/gitlab/gitlab.rb

# 设置外部 URL 为 HTTPS
external_url 'https://gitlab.example.com'# 启用内置 Nginx
nginx['enable'] = true# 客户端上传文件大小限制
nginx['client_max_body_size'] = '250m'# 强制 HTTP 重定向到 HTTPS
nginx['redirect_http_to_https'] = true
nginx['redirect_http_to_https_port'] = 443# SSL 证书和私钥路径
nginx['ssl_certificate'] = "/etc/letsencrypt/live/gitlab.example.com/fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/gitlab.example.com/privkey.pem"# 启用的 TLS 协议和加密算法
nginx['ssl_protocols'] = "TLSv1.2 TLSv1.3"
nginx['ssl_ciphers'] = "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384"
nginx['ssl_prefer_server_ciphers'] = "on"

4.2 应用配置并重启服务

在容器中运行以下命令:

gitlab-ctl reconfigure
gitlab-ctl restart

5. 证书申请和自动续期

5.1 使用 Certbot 申请证书

停止占用端口的服务

如果 GitLab 的内置 Nginx 服务占用了 80 端口,Certbot 无法运行。需要停止 Nginx:

gitlab-ctl stop nginx
使用 Certbot 申请证书

运行以下命令生成证书:

certbot certonly --standalone -d gitlab.example.com

提示: 如果生成失败,请查看日志 /var/log/letsencrypt/letsencrypt.log

确认证书文件路径
ls /etc/letsencrypt/live/gitlab.example.com/

应包含以下文件:

  • fullchain.pem
  • privkey.pem
重新启动 Nginx 服务
gitlab-ctl start nginx

5.2 自动续期配置

检查现有证书
certbot certificates

输出示例:

Certificate Name: gitlab.example.com
Domains: gitlab.example.com
Expiry Date: 2024-01-15 23:59:59+00:00 (VALID: 59 days)
测试续期任务
certbot renew --dry-run

成功输出示例:

Congratulations, all renewals succeeded!
配置自动续期任务

在容器内设置定时任务:

apt install cron -y
crontab -e

添加以下内容:

0 2 * * * certbot renew --deploy-hook "gitlab-ctl restart nginx"

启动 Cron 服务:

cron

验证任务是否正常运行:

cat /var/log/cron.log

6. 常见问题排查

问题 1:证书续期失败

  • 现象: Certbot 报错。

  • 解决方案:

    1. 检查端口占用:
    netstat -tuln | grep :80
    
    1. 手动续期:
    certbot renew
    

问题 2:通过 HTTP 拉取代码

  • 现象: 配置 HTTPS 后仍使用 HTTP 拉取代码。

  • 解决方案:
    修改 gitlab.rb

    external_url 'https://gitlab.example.com'
    

    然后运行:

    gitlab-ctl reconfigure
    

7. 总结与注意事项

  1. 阿里云 Nginx 配置的区别:

    • HTTP 使用:proxy_pass http://127.0.0.1:8080;
    • HTTPS 使用:proxy_pass https://127.0.0.1:8443;
    • 请确保配置一致且符合实际需求,避免混淆。
  2. FRP 的 HTTP 和 HTTPS 配置需区分:

    • HTTP 和 HTTPS 使用不同的远程端口。
    • 确保 FRP 客户端和服务器配置一致,并分别映射。
  3. 申请证书前的前提条件:

    • 域名必须先能通过 HTTP 访问成功,否则无法申请证书。
    • 如果 HTTP 无法访问或 FRP 配置有误,Certbot 将报错且申请失败。
  4. 为何配置 HTTPS 的 external_url:

    • 如果 external_url 未配置为 https://,即使 HTTPS 配置成功,GitLab 界面生成的 URL 仍然是 HTTP。
    • 这会导致代码克隆或推送使用 HTTP,而不是安全的 HTTPS。
  5. 通过 HTTP 判断 FRP 服务状态:

    • 成功通过 HTTP 访问,意味着 FRP 服务端和客户端均已正常运行。
    • 进一步通过 HTTPS 测试远程访问功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/475379.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习虚幻C++开发日志——委托(持续更新中)

委托 官方文档:Delegates and Lamba Functions in Unreal Engine | 虚幻引擎 5.5 文档 | Epic Developer Community | Epic Developer Community 简单地说,委托就像是一个“函数指针”,但它更加安全和灵活。它允许程序在运行时动态地调用不…

Git入门图文教程 -- 深入浅出 ( 保姆级 )

01、认识一下Git!—简介 Git是当前最先进、最主流的分布式版本控制系统,免费、开源!核心能力就是版本控制。再具体一点,就是面向代码文件的版本控制,代码的任何修改历史都会被记录管理起来,意味着可以恢复…

多传感器融合slam过程解析【大白话版】

SLAM(同步定位与地图构建)是自动驾驶、机器人导航和三维建模的关键技术之一。多传感器融合(激光雷达、IMU、相机)进一步提升了SLAM的鲁棒性和适应性,使其能够在复杂环境中实时构建高精度地图。本文将围绕激光雷达IMU相…

蓝桥杯每日真题 - 第18天

题目:(出差) 题目描述(13届 C&C B组E题) 解题思路: 问题分析 问题实质是一个带权图的最短路径问题,但路径的权重包含两个部分: 从当前城市到下一个城市的路程时间。 当前城市的…

每日论文23-24ESSERC 6.4-16.1Ghz混合并联-串联谐振器

《A 6.4-to-16.1GHz Hybrid Parallel-Series Resonator Mode-Switching Oscillator with 206.6dBc/Hz FoMT at 1MHz Offset in 40nm CMOS》 24ESSERC 首先这篇文章有个地方我其实没太明白,它在title和行文的时候都写的是“ hybrid parallel-series resonator mode-…

<QNAP 453D QTS-5.x> 日志记录:在 Docker 中运行的 Flask 应用安装 自签名 SSL 证书 解决 Chrome 等浏览器证书安全

原因:Chrome 不信任 ssc 证书 使启用了 HTTPS,即使有使用 自签名证书 (self-signed certificate 非由可信的证书颁发机构 【CA,Certificate Authority】签发的)。浏览器 Chrome 默认不信任自签名证书,也会报 NET::ERR_…

【再谈设计模式】适配器模式 ~接口兼容的桥梁

一、引言 在软件开发的复杂世界里,不同的组件、类或者系统往往有着各自独立的设计和接口定义。当需要将这些原本不兼容的部分整合在一起协同工作时,就像尝试将方形的榫头插入圆形的卯眼一样困难。适配器设计模式就如同一位神奇的工匠,能够巧妙…

无人机的激光雷达避障系统阐述!

一、材料 激光二极管基底材料:激光二极管是激光雷达的核心组件之一,其基底材料通常采用硅或砷化镓。硅材料成本低、易于加工,但发光效率相对较低;而砷化镓材料发光效率高,但成本较高。 光学镜片材料:激光…

一篇快速上手 Axios,一个基于 Promise 的网络请求库(涉及原理实现)

Axios 1. 介绍1.1 什么是 Axios?1.2 axios 和 ajax 的区别 2. 安装使用3. Axios 基本使用3.1 Axios 发送请求3.2 其他方式发送请求3.3 响应结构3.4 Request Config3.5 默认配置3.6 创建实例对象发送请求 3.7 拦截器3.8 取消请求 4. 模拟 Axios4.1 axios 对象创建过程…

Three.js 相机控制器Controls

在 3D 场景中,摄像机的控制尤为重要,因为它决定了用户如何观察和与场景互动。Three.js 提供了多种相机控制器,最常用的有 OrbitControls、TrackballControls、FlyControls 和 FirstPersonControls。OrbitControls 适合用于查看和检查 3D 模型…

【新人系列】Python 入门(十一):控制结构

✍ 个人博客:https://blog.csdn.net/Newin2020?typeblog 📝 专栏地址:https://blog.csdn.net/newin2020/category_12801353.html 📣 专栏定位:为 0 基础刚入门 Python 的小伙伴提供详细的讲解,也欢迎大佬们…

SELinux

一、简介 SELinux : 安全强化的Linux;在开启后,会对进程本身部署安全上下文;会对文件部署安全上下文;对法务使用端口进行限制;对程序本身的不安全功能做限制 二、工作原理 1、工作方式 通过MAC的方式来控制管理进程&#xff0…

C++小白实习日记——Day 5 gitee怎么删文件,测试文件怎么写循环

昨晚一直内耗,一个程序写了三天写不出来,主要是耗时太多了,老板一直不满意。想在VScode上跑一下,昨晚一直报错。今天来公司重新搞了一下, 主要工作有: 1,读取当前时间用tscns 2,输…

Apache Paimon】-- 6 -- 清理过期数据

目录 1、简要介绍 2、操作方式和步骤 2.1、调整快照文件过期时间 2.2、设置分区过期时间 2.2.1、举例1 2.2.2、举例2 2.3、清理废弃文件 3、参考 1、简要介绍 清理 paimon (表)过期数据可以释放存储空间,优化资源利用并提升系统运行效…

阿里云IIS虚拟主机部署ssl证书

宝塔配置SSL证书用起来是很方便的,只需要在站点里就可以配置好,但是云虚拟主机在管理的时候是没有这个权限的,只提供了简单的域名管理等信息。 此处记录下阿里云(原万网)的IIS虚拟主机如何配置部署SSL证书。 进入虚拟…

BOM的详细讲解

BOM概述 BOM简介 BOM(browser Object)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是window。 BOM由一系列的对象构成,并且每个对象都提供了很多方法与属性 BOM缺乏标准&#xff…

湘潭大学软件工程算法设计与分析考试复习笔记(四)

回顾 湘潭大学软件工程算法设计与分析考试复习笔记(一)湘潭大学软件工程算法设计与分析考试复习笔记(二)湘潭大学软件工程算法设计与分析考试复习笔记(三) 前言 现在是晚上十一点,我平时是十…

STM32单片机ADC数模转换器

由于最近忘记了,自用。 转换模式 单次转换,非扫描模式 在非扫描模式下,列表中就只有序列1的位置有效,此时可以在序列1的位置指定我们想要转换的通道,然后ADC就会对这个通道进行模数转换。等待一段时间,转…

android 使用MediaPlayer实现音乐播放--获取音乐数据

前面已经添加了权限&#xff0c;有权限后可以去数据库读取音乐文件&#xff0c;一般可以获取全部音乐、专辑、歌手、流派等。 1. 获取全部音乐数据 class MusicHelper {companion object {SuppressLint("Range")fun getMusic(context: Context): MutableList<Mu…