群晖使用Docker安装并配置GitLab服务器
wptr33 2024-12-05 17:03 9 浏览
群晖(Synology)内置的GitLab版本已经很老了,虽然对系统资源的利用较少,但是不利于使用。因此,要在群晖上安装GitLab服务器,最好还是通过内置的Docker进行安装,这样可以安装较新的GitLab版本,也可以通过Docker对GitLab进行更新。
需要注意的是,由于GitLab对系统要求较高,官方不建议在低于4g配置的机器上进行安装,在低配置的机器上安装可能会导致运行卡顿或者频繁出现502错误。
本文虽然是在群晖下进行安装,但由于是通过Docker进行安装的,在其他linux版本如Ubuntu下应该也适用(未测试)。
本文安装需要基于Docker,在群晖下可以直接选择Docker套件安装Docker,在其他发行版下可以参考相关安装说明进行安装。
1.通过Docker安装GitLab
在Docker中搜索官方的gitlab-ce镜像,双击下载镜像。等同于在其他发行版下拉取镜像。
镜像拉取完之后,在映像中双击gitlab镜像来创建容器,点击“高级选项”进行配置。
在系统的Docker文件夹下创建以下三个文件夹,并在“卷”选项卡选择以下配置:
Local locationContainer locationUsage
/docker/gitlab/data /var/opt/gitlab 存储数据
/docker/gitlab/logs /var/log/gitlab 存储日志文文件
/docker/gitlab/config /etc/gitlab 存储配置文件
在“端口”选项卡选择以下配置:
本地 端口容器 端口类型
30022 30022 tcp
30443 30443 tcp
30000 80 tcp
上述端口仅为本次配置的端口,实际搭建时可以根据需要对端口进行修改,本次安装中30022端口和30443端口分别用于ssh访问和https访问,在其他说明文档中,容器端口可能配置为默认的22和443,但是在实践中都出现了无法访问的问题,因此本文将本地端口和容器端口设置为同样端口,并在后续进行配置。
设置完成后,需要在群晖的防火墙里开放上述端口。如果是使用Ubuntu或者其他linux系统,同样需要打开防火墙类似端口。
安装完成后,可以通过 http://<你的域名>:30000 端口访问GitLab,首次登录时需要设置root用户的密码,设置完之后可通过root账户登录并设置参数。
在群晖中,如果设备没有公开IP,可能还需要通过花生壳内网穿透等服务,才能访问GitLab服务器。
2. 设置https访问
首先需要为域名申请SSL证书,可以通过Let's Encrypt 或者阿里云等网站获取免费或者收费的证书,证书分为cert或pem文件以及key文件两个(后缀可能不一样,但都是证书文件和密钥文件两个)并将证书上传至 /etc/gitlab/ssl/? 文件夹中。在群晖的FileStation里面找到文件 ?/docker/gitlab/config/gitlab.rb? 进行修改,也可以通过进入Docker的终端里,找到 ?/etc/gitlab/gitlab.rb? 文件进行修改,实际修改的是同一个文件。
在gitlab的容器的终端机选项下,选择新建一个bash终端,并通过编辑器进行修改,如 ?nano /etc/gitlab/gitlab.rb? ,也可以通过ssh方式登录群晖,修改/docker/gitlab/config/gitlab.rb文件。设置以下参数。有关nginx配置的官方说明.
配置完成后可以通过 ?https://<你的域名>:30443? 方式访问网站。
#line 33
external_url 'https://<你的域名>:30443'
#line 1267
nginx['enable'] = true
nginx['redirect_http_to_https']=true
#line 1281
nginx['ssl_certificate'] = "/etc/gitlab/ssl/cert.pem"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl//private.key"
3.配置邮箱认证
在GitLab中,系统可能需要通过邮件系统来完成用户注册邮箱确认以及事件提醒等功能,因此有必要配置一个邮箱来进行系统邮件发送。这同样需要编辑上述gitlab.rb配置文件,找到以下邮箱配置内容进行配置和修改,以163邮箱为例。
#line 81-107
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'example@163.com'
gitlab_rails['gitlab_email_display_name'] = 'GitLab-ce'
gitlab_rails['gitlab_email_reply_to'] = 'example@163.com'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "example@163.com"
gitlab_rails['smtp_password'] = "example"
gitlab_rails['smtp_domain'] = "163.com"
gitlab_rails['smtp_authentication'] = "plain"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['smtp_openssl_verify_mode'] = 'none'
4. GitLab SSH 方式访问
首先需要在上述gitlab.rb配置文件中修改以下配置:
#line 602
gitlab_rails['gitlab_shell_ssh_port'] = 30022
在容器使用默认22端口时,ssh方式无法访问,提示 ?SSH ssh_exchange_identification: Connection closed by remote host? 。因此,通过进入Docker bash并修改 ?/etc/ssh/sshd_config? 文件,修改 ?Port 30022? ,之后运行 ?service ssh restart? 重启ssh服务后,可以正常通过ssh方式进行代码访问。
其他文档中关于上述ssh错误的解决方案如下,可供参考:
1、检查 /etc/hosts.deny 和 /etc/hosts.allow 里面是否屏蔽了某些帐户;
2、删除 ~/.ssh/known_hosts 里面的相关服务器条目试一下;
3、在某些发行版上升级 glibc 或 openssl 等软件包以后需要重启一下 sshd;
4、由于 ssh 试探或者 ssh 连结数太多,/etc/ssh/sshd_config 里面的 MaxStartups 默认参数配置不够用;
修改 MaxStartups 30:60:100
5. Docker GitLab备份
备份可分为手动和自动两种,在Docker映像和容器中,可以点击设置,导出,即可进行完整手动备份(容器需要在停止状态下备份)。
5.1 要实现自动备份,需要创建备份脚本。
#!/bin/bash
docker exec -t gitlab-ce gitlab-rake gitlab:backup:create CRON=1
echo "Do"
windows操作需要注意换行,CRLF切换为LF
另存脚本到 ?/volume1/nas19_backup/NAS/sh/gitlab_backup.sh? 目录中
这里需要注意的是 ?/volume1? 是群晖共享文件夹的根目录
5.2 群晖创建计划任务
管理员身份进入DSM > 控制面板 > 计划任务 > 新增 > 计划的任务 > 用户定义的脚本 > 任务设置 > 运行命令
?bash /volume1/nas19_backup/NAS/sh/gitlab_backup.sh
备份后的文件所在目录为
Local location Container location
/docker/gitlab/data/backups /var/opt/gitlab/backups
5.3 还原备份
- 重新部署gitlab,并且新的gitlab版本必须与旧的gitlab一致
- 复制备份到gitlab的backup目录
- 恢复gitlab
cp 1550764828_2019_02_21_11.7.5_gitlab_backup.tar /opt/gitlab/data/backups/
chmod +r /opt/gitlab/data/backups/ 1550764828_2019_02_21_11.7.5_gitlab_backup.tar
docker exec -it gitlab-ce gitlab-rake gitlab:backup:restore
相关推荐
- 用Java实现RAG的3大核心模块与7个必知细节
-
一、真实场景驱动:某制造企业的知识管理之痛某汽车零部件企业有超过20万份技术文档(PDF/HTML/Word),工程师每天平均花费2小时查找资料。我们为其构建的Java版RAG系统,将查询耗时缩短至1...
- 在 C# .NET 中从 PDF 中提取表数据
-
概述:...
- 【分享】教你如何使用 Java 读取 Excel、docx、pdf 和 txt 文件
-
在Java开发中,我们经常需要读取不同类型的文件,包括Excel表格文件、"doc"和"docx"文档文件、PDF文件以及纯文本文件。其中最常用的是A...
- Spring AI 模块架构与功能解析
-
SpringAI是Spring生态系统中的一个新兴模块,专注于简化人工智能和机器学习技术在Spring应用程序中的集成。本文将详细介绍SpringAI的核心组件、功能模块及其之间的关...
- 告别付费!一站式服务,PDF多功能工具!
-
大家好,我是Java陈序员。今天,给大家介绍一个PDF多功能在线操作工具,完全免费开源!...
- 本地PDF操作神器:永久告别盗版和破解,再也不用担心安全问题
-
前言PDF(便携式文档格式)目前已经成为了文档交换和存储的标准。然而,找到一个功能全面、安全可靠、且完全本地化的PDF处理工具并不容易。...
- Python rembg 库去除图片背景
-
rembg是一个强大的Python库,用于自动去除图片背景。它基于深度学习模型(如U^2-Net),能够高效地将前景物体从背景中分离,生成透明背景的PNG图像。本教程将带你从安装到实际应用...
- 31个必备的python字符串方法,建议收藏
-
字符串是Python中基本的数据类型,几乎在每个Python程序中都会使用到它。...
- python学习day1——输出格式化
-
print一般在控制台中我们用print进行输出,默认情况下,使用格式为:print(*objects,sep='',end='\n')第一个参数是我们要在控制台...
- 一张图认识Python(附基本语法总结)
-
一张图认识Python(附基本语法总结)一张图带你了解Python,更快入门,一张图认识Python(附基本语法总结)Python基础语法总结:1.Python标识符在Python里,标识符有字...
- 学习编程第188天 python编程 字典格式化
-
今天学习的是刘金玉老师零基础Python教程第84期,主要内容是python字典格式化。...
- Python基础数据类型转换
-
Python中的基础数据类型转换可以分为隐式转换和显示转换。隐式转换是python解释器自动转换,显示转换是通过内置函数实现。无论哪种方式进行的转换,均为转换为对应类型的数据,而非改变原数据的类型。...
- python之json基本操作
-
1.概述JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,它具有简洁、清晰的层次结构,易于阅读和编写,还可以有效的提升网络传输效率。Python标准库的...
- Python之迭代器及其用法
-
前面章节中,已经对列表(list)、元组(tuple)、字典(dict)、集合(set)这些序列式容器做了详细的介绍。值得一提的是,这些序列式容器有一个共同的特性,它们都支持使用for循环遍历存储...
- 从初始化一个现代 python项目学习到的东西
-
uv我准备用uv初始化一个python项目环境我用的是苹果笔记本MacBookPro,具体的操作系统及硬件参数如下:...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
git 执行pull错误如何撤销 git pull fail
-
面试官:git pull是哪两个指令的组合?
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git pull 之后本地代码被覆盖 解决方案
-
git命令之pull git.pull
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)