Docker下Gitlab配置Let’s Encrypt证书

news2024/11/23 11:48:10

Docker下Gitlab配置Let’s Encrypt证书

  • 1 参考文档
  • 2 常见问题
    • 2.1 前置条件
    • 2.2 不支持ip
    • 2.3 重复签发
    • 2.4 外网无法访问
  • ※3 内网穿透配置(可选)
  • 4 Gitlab 创建并配置Let’s Encrypt证书
    • 4.1 开放Let’s Encrypt签发所需端口
    • 4.2 新增存储HTTPS证书文件夹
    • 4.3 启动Gitlab容器
    • 4.4 设置域名、端口
    • 4.5 配置邮箱
    • 4.6 让配置生效
    • 4.7 访问

1 参考文档

参考1:极狐GitLab SSL证书管理
参考2:Configure SSL for the GitLab Linux package

参考1是参考2是官方文档的中文简略配置。

2 常见问题

2.1 前置条件

  1. 配置的域名,在公网上可以解析到安装GitLab实例的服务器的IP地址上,且Let's Encrypt服务端可以访问到这个IP地址进行验证;
  2. 只能通过标准的80443端口进行访问,非标准端口不支持;

2.2 不支持ip

Let’s Encrypt 不支持IP形式的地址,只能是域名。否则在更新配置后会报错。

Running handlers:
[2023-05-15T04:50:40+00:00] ERROR: Running exception handlers
There was an error running gitlab-ctl reconfigure:

letsencrypt_certificate[192.168.3.220] (letsencrypt::http_authorization line 6) had an error: Acme::Client::Error::RejectedIdentifier: acme_certificate[staging] (letsencrypt::http_authorization line 43) had an error: Acme::Client::Error::RejectedIdentifier: Error creating new order :: Cannot issue for "192.168.3.220": The ACME server can not issue a certificate for an IP address

2.3 重复签发

Let’s Encrypt第一次对新域名签发正常,重复对同一域名签发可能报错。

Running handlers:
[2023-05-15T06:08:02+00:00] ERROR: Running exception handlers
There was an error running gitlab-ctl reconfigure:

letsencrypt_certificate[真实域名] (letsencrypt::http_authorization line 6) had an error: RuntimeError: acme_certificate[staging] (letsencrypt::http_authorization line 43) had an erro RuntimeError: ruby_block[create certificate for 真实域名] (letsencrypt::http_authorization line 110) had an error: RuntimeError: [真实域名] Validation failed, unable to requt certificate, Errors: [{url: https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/6491015484/2gCP-Q, status: invalid, error: {"type"=>"urn:ietf:params:acme:error:connection", "detail""域名解析的公网ip: Fetching http://真实域名/.well-known/acme-challenge/10-MktL8xuOo53dqQY3aV1j8Q_9qtUsY19fE-kF9uBU: Connection refused", "status"=>400}} ]

2.4 外网无法访问

因为Gitlab启动较慢,所以可以排查一下是否是Gitlab尚未启动导致的。

※3 内网穿透配置(可选)

frp:

#本地服务
[gitlab]
type = tcp
local_ip = 192.168.3.220
local_port = 443
remote_port = 443
custom_domains = gitlab.domain.com

4 Gitlab 创建并配置Let’s Encrypt证书

因为是用Docker部署的Gitlab来配置Let’s Encrypt证书。这里不需要手动申请Let’s Encrypt证书,只需要在Gitlab的配置正确,Let’s Encrypt证书会自动签发。

在 Docker搭建配置Gitlab基础上做部分修改即可,这里仅对差别部分做修改记录。

4.1 开放Let’s Encrypt签发所需端口

先开放gitlab使用的linux端口。

  1. 开放服务器端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
  1. 重启防火墙
firewall-cmd --reload
  1. 查询有哪些端口是开启的
firewall-cmd --list-port

4.2 新增存储HTTPS证书文件夹

创建cert文件夹用来存储HTTPS证书。
在这里插入图片描述

4.3 启动Gitlab容器

docker run -itd  \
 -p 443:443 \
 -p 80:80 \
 -p 9922:22 \
 -v /opt/soft/docker/gitlab/cert:/etc/gitlab/ssl \
 -v /opt/soft/docker/gitlab/etc:/etc/gitlab  \
 -v /opt/soft/docker/gitlab/log:/var/log/gitlab \
 -v /opt/soft/docker/gitlab/opt:/var/opt/gitlab \
 --restart always \
 --privileged=true \
 --name gitlab \
 gitlab/gitlab-ce

4.4 设置域名、端口

  1. 进入容器
docker exec -it gitlab /bin/bash
  1. 修改配置文件
vi /etc/gitlab/gitlab.rb

在开头加入以下内容:
注意:external_url 的域名后面不能加端口,否则即使部署成功也无法访问。

#gitlab访问地址,可以写域名。如果端口不写的话默认为80端口
external_url 'https://gitlab.domain.com'
#ssh主机ip
gitlab_rails['gitlab_ssh_host'] = 'gitlab.domain.com'
#ssh连接端口
gitlab_rails['gitlab_shell_ssh_port'] = 9922
#时区
gitlab_rails['time_zone'] = 'Asia/Shanghai'
#开启备份功能
gitlab_rails['manage_backup_path'] = true
#备份文件的权限
gitlab_rails['backup_archive_permissions'] = 0644
#保存备份 60 天
gitlab_rails['backup_keep_time'] = 5184000

# https证书配置
letsencrypt['enable'] = true
#真实邮箱,用于证书过期前通知更新
letsencrypt['contact_emails'] = ['your_email@163.com']
nginx['redirect_http_to_https'] = true

主要修改:

  • external_url,将http改为https
  • 注意external_url配置的是域名,而非IP。
  • 开启letsencrypt相关配置。

4.5 配置邮箱

参见Docker搭建配置Gitlab的4.3 配置邮箱。

4.6 让配置生效

注意:这里只需要执行重启配置即可。不用配置443端口,因为已经自动指向了。

gitlab-ctl reconfigure

4.7 访问

访问地址:https://gitlab.domain.com,注意是域名。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多态与虚函数(补)

多态与虚函数(补) 静态联编与动态联编的深层次理解多态底层原理 示例示例一示例二示例三示例四 对象与内存虚析构函数构造函数为什么不能是虚函数? 静态联编与动态联编的深层次理解 我们首先看下面一段代码 class object { private: int va…

C learning_12 操作符前篇(算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符)

目录 算术操作符 移位操作符 移位规则 位操作符 交换两个整形变量的写法 赋值操作符 单目操作符 sizeof和数组的纠缠 和--运算符 多组输入的方案 关系操作符 逻辑操作符 算术操作符 -- 加法操作符():用于将两个值相加。 -- 减法操…

Python爬虫(二):Requests库

所谓爬虫就是模拟客户端发送网络请求,获取网络响应,并按照一定的规则解析获取的数据并保存的程序。要说 Python 的爬虫必然绕不过 Requests 库。 1 简介 对于 Requests 库,官方文档是这么说的: Requests 唯一的一个非转基因的 P…

存储知识点:RAID0、RAID1、RAID5、RAID10特点是什么?所需的硬盘数量分别为多少?

RAID(Redundant Array of Independent Disks)是一种将多个独立的硬盘组合成一个逻辑磁盘的技术,目的是提高性能或容错能力。RAID有不同的级别,常见的有RAID0、RAID1、RAID5、RAID10等。下面我们来介绍这些级别的特点和所需的硬盘数…

套接字编程简介

作者:V7 博客:https://www.jvmstack.cn 一碗鸡汤 少年辛苦终身事,莫向光阴惰寸功。 —— 杜荀鹤 Socket概述 在计算机中产生和接受IO流的数据源是多种多样的,在网络编程中,有一个特殊的数据源就是socket。通俗点soc…

linux的系统日志

目录 一、日志文件的产生 二、日志文件存放在哪儿 (1)文本日志 (2)二进制日志 三、日志存放规则的配置文件 四、日志轮转 五、分析和监控日志 一、日志文件的产生 日志内容:内核、开机引导、守护进程启动运行的…

华为和思科两种常见的网络设备如何进行ospf配置?

概述 ospf(开放最短路径优先)是一种基于链路状态的动态路由协议,它可以在网络中自动发现和维护最优的路由路径。ospf广泛应用于大型和复杂的网络环境,因为它具有以下优点: 支持分层路由,可以将网络划分为…

WebAssembly黑暗的一面

案例1:技术支持诈骗 什么是技术支持诈骗? 技术支持诈骗是一种电话欺诈,其中诈骗者声称可以提供合法的技术支持服务。该骗局可能以陌生电话开始,骗子通常会声称来自合法的第三方的员工,如“微软”或“Windows部门”。他…

YOLOv5实现目标分类计数并显示在图像上

有同学后台私信我,想用YOLOv5实现目标的分类计数,因此本文将在之前目标计数博客的基础上添加一些代码,实现分类计数。阅读本文前请先看那篇博客,链接如下: YOLOv5实现目标计数_Albert_yeager的博客 1. 分类实现 以co…

web 实验一 HTML基本标签实验

实验原理 通过创建HTML5网页,验证form内多种元素标签及其属性的作用及意义。 实验目的 理解并掌握Form表单提交必须声明的内容 理解并掌握Input元素中多种类型属性的使用方法及使用场景 理解并掌握Label元素的使用方法 理解并掌握Datalist元素的使用方法 理解并掌握…

软件测试学习——笔记一

一、软件和软件测试 1、软件和软件分类 (1)软件:程序、数据、文档——用户手册 (2)软件的分类 按层次划分:系统软件、应用软件按组织划分:开源软件(代码公开)、商业软…

RSA 加密算法在C++中的实现 面向初学者(附代码)

概述 博文的一,二部分为基础知识的铺垫。分别从密码学,数论两个方面为理解RSA算法做好了准备。第三部分是对RSA加密过程的具体介绍,主要涉及其密钥对(key-pair)的获取。前三个部分与编程实践无关,可以当作…

C# | 内存池

内存池 文章目录 内存池前言什么是内存池内存池的优点内存池的缺点 实现思路示例代码结束语 前言 在上一篇文章中,我们介绍了对象池的概念和实现方式。对象池通过重复利用对象,避免了频繁地创建和销毁对象,提高了系统的性能和稳定性。 今天我…

你真的了解索引吗

当我们学习存储算法和索引算法时,他们可以深入了解如何在系统中存储和查询数据。因为存储和查询数据是许多系统的核心功能之一,例如数据库、搜索引擎等。理解这些算法可以帮助程序员更好地设计和优化系统架构,提高系统的可扩展性、可用性和性…

玩转Google开源C++单元测试框架Google Test系列(gtest)之二 - 断言

一、前言 这篇文章主要总结gtest中的所有断言相关的宏。 gtest中,断言的宏可以理解为分为两类,一类是ASSERT系列,一类是EXPECT系列。一个直观的解释就是: 1. ASSERT_* 系列的断言,当检查点失败时,退出当前…

大数据之光:Apache Spark 实用指南 大数据实战详解【上进小菜猪大数据】

上进小菜猪,沈工大软件工程专业,爱好敲代码,持续输出干货。 本文将深入探讨Apache Spark作为一种强大的大数据处理框架的基本概念、特点和应用。我们将详细介绍Spark的核心组件,包括Spark Core、Spark SQL、Spark Streaming和Spa…

百子作业 —— 中国邮递员问题

题目 严老师和宋老板去勘测武威市区的道路网,每一条路都需要勘测,且需要两人合作.武威市区可以近似地看成六横六纵组成的道路网,自西向东依次为学府路、民勤路、西关路、中关路、富民路、滨河路;自北向南依次为雷海路、宣武路、祁…

Redis基本数据类型及使用(2)

书接上回,这节讲讲其余的基本数据结构使用 集合,有序集合以及遍历和事务的使用 Set集合,无序不重复的成员 表现形式: key1string1string2key2string1string2 常用的基本操作: sadd key string1 [string2..]添加1…

第二十届宁波大学程序设计竞赛(同步赛)

A-0-1翻转_第二十届宁波大学程序设计竞赛(同步赛) (nowcoder.com) 思路: 我们观察发现,奇数位与偶数位的1每次操作一定时同时增加或者减少的,我们无法做到同时删除奇数位的两个1.。不满足相等则情况无解那么&#xf…

【谷粒商城之订单服务-支付】

本笔记内容为尚硅谷谷粒商城订单服务支付部分 目录 一、支付宝沙箱 沙箱环境 二、公钥、私钥、加密、加签、验签 1、公钥私钥 2、加密和数字签名 3、对称加密和非对称加密 三、内网穿透 四、整合支付 1、导入支付宝SDK依赖 2、封装工具类和PayVo 3、前端访问支付接…