Arm 架构 Ubuntu 使用 Docker 安装 Gitlab 并使用
官方 gitlab 文档
我的系统是 arm 架构的 ubuntu
官网没有提供 arm 架构的 docker 的 gitlab 的安装方式,直接安装的也是后来加的,文档也是随笔带过,,,我用到了,记录一下
默认已经安装了 docker
在 docker hub 里有人编译了 arm 架构的 gitlab 的 docker 镜像,并且有很多人在使用,最近也在更新,就是这个yrzr/gitlab-ce-arm64v8
如果不是 arm 架构的话可以直接参考上面的官方文档,安装使用官方的方法,后面配置和备份基本一致
安装
拉取镜像并启动容器
docker run \--detach \--restart always \--name gitlab-ce \--privileged \--memory 4096M \--publish 22:22 \--publish 80:80 \--publish 443:443 \--hostname gitlab.example.com \--env GITLAB_OMNIBUS_CONFIG=" \nginx['redirect_http_to_https'] = true; "\--volume /srv/gitlab-ce/conf:/etc/gitlab:z \--volume /srv/gitlab-ce/logs:/var/log/gitlab:z \--volume /srv/gitlab-ce/data:/var/opt/gitlab:z \yrzr/gitlab-ce-arm64v8:latest
有可能分行的话不好改,下面直接弄成一行了,方便修改
docker run --detach --restart always --name gitlab-ce --privileged --memory 4096M --publish 22:22 --publish 80:80 --publish 443:443 --hostname gitlab.example.com --env GITLAB_OMNIBUS_CONFIG="nginx['redirect_http_to_https'] = true; " --volume /srv/gitlab-ce/conf:/etc/gitlab:z --volume /srv/gitlab-ce/logs:/var/log/gitlab:z --volume /srv/gitlab-ce/data:/var/opt/gitlab:z yrzr/gitlab-ce-arm64v8:latest
上面命令根据自己需求更改,比如 22、80、443 端口映射,还有访问域名和下面的配置文件日志文件映射位置
我这里解析一下域名,解析为 gitlab.siyongwei.com,如果服务器上什么都没有专门安装 gitlab,倒是可以直接安装,我这里因为在服务器上已经安装了宝塔面板,又放了挺多网站,所以 80 端口、443 端口和 22 端口都已经被占用,如果说直接把 80 端口映射成其他端口,在访问域名的时候后面还需要加上端口,不美观也不方便,所以还想着安装之后直接使用域名就可以直接访问,因此我这里仅映射 80 端口,然后通过反向代理使域名可以直接访问
docker run \--detach \--restart always \--name gitlab-ce \--privileged \--memory 4096M \--publish 8089:80 \--hostname gitlab.siyongwei.com \--env GITLAB_OMNIBUS_CONFIG=" \nginx['redirect_http_to_https'] = true; "\--volume /srv/gitlab-ce/conf:/etc/gitlab:z \--volume /srv/gitlab-ce/logs:/var/log/gitlab:z \--volume /srv/gitlab-ce/data:/var/opt/gitlab:z \yrzr/gitlab-ce-arm64v8:latest
这下面是我改过的,方便我自己复制用的。。。
docker run --detach --restart always --name gitlab-ce --privileged --memory 4096M --publish 8089:80 --hostname gitlab.siyongwei.com --env GITLAB_OMNIBUS_CONFIG="nginx['redirect_http_to_https'] = true; " --volume /srv/gitlab-ce/conf:/etc/gitlab:z --volume /srv/gitlab-ce/logs:/var/log/gitlab:z --volume /srv/gitlab-ce/data:/var/opt/gitlab:z yrzr/gitlab-ce-arm64v8:latest

可以看到已经启动了

然后添加一个站点,配置反向代理,我这里直接使用的宝塔面板可视化配置,不使用宝塔面板的话可以直接更改 nginx 的配置文件配置反向代理

我这里顺便加了 ssl 证书,证书也很方便,我这里使用的之前 acme.sh 申请的自动续期的通配符证书,可以看[post cid=“178” cover=“” size=“small”/]
然后就直接可以访问到了,如果打开网站是 502 不用怕,因为这个初始化启动需要挺长时间,等几分钟就可以了

登录
这里用户名时 root,密码可以输入下面命令查看,这条命令在官网也是有的
sudo docker exec -it gitlab-ce grep 'Password:' /etc/gitlab/initial_root_password

密码文件将在 24 小时后的第一次重新配置运行中自动删除

至此,登陆成功
修改语言,默认安装完成是英文,可以修改成中文或其他语言,右上角头像—Edit profile—Preferences—Localization—Language—Save changes,即可,修改完成后要刷新一下
其他资料就不说了
配置邮件传输
修改 gitlab.rb 配置文件,按上面映射,文件位置在/srv/gitlab-ce/conf/gitlab.rb
vim /srv/gitlab-ce/conf/gitlab.rb
正常模式下键入/smtp搜索配置邮件位置

配置可参考官方配置文档 邮件传输协议
我这里用 QQ 的 smtp 服务,下面是配置示例,要把下面的gitlab_email_from注释也取消

配置依次是是否开启邮件服务、邮件服务地址、端口、发送名(填写邮件地址)、邮件授权码(获取方法网上很好找,随便都能搜到,这里不多赘述)、邮件发送域名,后面不懂,最后一个是发送者(填写邮件地址)
配置完成后保存
使用下面命令进入 gitlab-ce 的 docker 容器
docker exec -it gitlab-ce /bin/bash
使用下面命令重新加载 gitlab 的配置文件
gitlab-ctl reconfigure
测试邮件传输是否可用
GitLab 给提供了测试邮件是否可用的方法,使用 Rails 控制台验证 GitLab 是否可以正确发送电子邮件
执行下面命令进入控制台
gitlab-rails console
然后在控制台提示符下输入以下命令,使 GitLab 发送测试电子邮件
Notify.test_email('收件邮箱','Message Subject','Message Body').deliver_now

可以看到邮件发送成功
然后就可以修改用户的电子邮件了,因为电子邮件需要做验证

验证后在用户资料修改一下添加的邮箱,就可以把默认的admin@example.com删掉了,因为默认的是示例,不可以正常使用

备份与还原
参考官网备份还原
备份
这里我添加了一个测试用的存储库

备份命令
docker exec -t <容器名> gitlab-backup create


备份完成有句提示,说 gitlab.rb 和 gitlab-secrets.json 要手动备份,按上面文件映射,这两个文件就在/srv/gitlab-ce/conf/文件夹内
还有其他增量备份、特定存储库备份等乱七八糟的类别的备份方式,具体可以看上面官方文档
还原
这里我存了一下刚才备份的两个文件和执行备份命令生成的压缩包

然后我把容器、镜像、还有前面的映射出来的 srv 下的 gitlab-ce 目录都删掉,重新拉取一下镜像,启动容器,登录一下可以看到都变成初始状态了

停止连接数据库的进程命令
docker exec -it <容器名> gitlab-ctl stop puma
docker exec -it <容器名> gitlab-ctl stop sidekiq
停止后检查一下状态
docker exec -it <容器名> gitlab-ctl status

恢复备份命令
docker exec -it <容器名> gitlab-backup restore BACKUP=<备份文件的时间戳(也就是备份文件文件名去掉_gitlab_backup.tar)>

然后让输入两次 yes 进行确认,恢复后会提示 gitlab.rb 和 gitlab-secrets.json 需要手动恢复

然后把这两个文件移动到/srv/gitlab-ce/conf/文件夹内,覆盖掉原来的文件

然后重启一下容器
docker restart <容器名>

检查 gitlab
docker exec -it <容器名> gitlab-rake gitlab:check SANITIZE=true

查看 gitlab,可以看到存储库和用户资料都已经恢复了


自动化备份
使用 corn 自动化备份可以参考官方文档配置 cron 以进行每日备份
我这里因为之前有用到宝塔面板计划任务备份网站和数据库,所以直接使用宝塔面板的计划任务实施自动化备份
首先每天 0 点 05 执行备份 gitlab 命令

然后可以添加下面的 shell 脚本把配置文件和备份的 tar 压缩文件复制/移动到 gitlab 网站文件夹内,然后就方便备份到外部网盘中了
dir1="/www/wwwroot/gitlab/backup-conf/"$(date "+%Y_%m_%d")
if [ ! -d "$dir1" ];then
mkdir $dir1
echo "${dar1}创建文件夹成功"
cp /srv/gitlab-ce/conf/gitlab-secrets.json $dir1
echo "已备份gitlab-secrets.json"
cp /srv/gitlab-ce/conf/gitlab.rb $dir1
echo "已备份gitlab.rb"
rm -rf $(find /www/wwwroot/gitlab/backup-conf/* -mtime +1);
echo "已删除2天前的文件夹"
else
echo "今日已备份conf配置文件"
fidir2="/www/wwwroot/gitlab/backup-tar/"$(date "+%Y_%m_%d")
if [ ! -d "$dir2" ];then
mkdir $dir2
echo "${dar2}创建文件夹成功"
mv /srv/gitlab-ce/data/backups/*$(date "+%Y_%m_%d")* $dir2
echo "已备份tar压缩文件"
rm -rf $(find /www/wwwroot/gitlab/backup-tar/* -mtime +1);
echo "已删除2天前的文件夹"
else
echo "今日已备份tar压缩文件"
fi
执行脚本的前提要先手动创建
/www/wwwroot/gitlab/backup-conf/和/www/wwwroot/gitlab/backup-tar/文件夹
这个脚本是在 gitlab 网站文件夹的backup-conf文件夹和backup-tar文件夹内创建年_月_日格式的文件夹,创建完成后将/srv/gitlab-ce/conf/gitlab-secrets.json和/srv/gitlab-ce/conf/gitlab.rb配置文件复制到backup-conf里的年_月_日文件夹内,将 docker 命令备份的 tar 压缩文件移动到backup-tar里的年_月_日文件夹内
至此,完成整体的备份
再加上宝塔面板自带的备份网站计划任务就可以备份到其他网盘中了

相关文章:
Arm 架构 Ubuntu 使用 Docker 安装 Gitlab 并使用
官方 gitlab 文档 我的系统是 arm 架构的 ubuntu 官网没有提供 arm 架构的 docker 的 gitlab 的安装方式,直接安装的也是后来加的,文档也是随笔带过,,,我用到了,记录一下 默认已经安装了 docker 在 docker …...
百度地图3D棱柱鼠标事件
百度地图2D API JavaScript API | 百度地图API SDK 百度地图3D API jspopularGL | 百度地图API SDK 3D棱柱效果如下 一. 渲染地图 var map new BMapGL.Map(container, {style: {styleJson: styleJson2} }) map.centerAndZoom(new BMapGL.Point(116.404, 39.925), 9); map…...
PHP调用java class 类实现文件签名
PHP调用java class 类实现文件签名 原始代码改造开始PHP内调用方式起因:对接某平台API接口,发送的文件需要做 SM3 签名,对方平台是java写的,只有java加密示例,照着java的加密算法翻译为PHP版本,在编码转换上始终有些差异。没办法,只能想办法使用他们的java方式。 原始代…...
信号和槽机制
信号和槽机制 信号和槽的使用自定义信号槽信号槽机制是Qt框架中引以为豪机制之一,所谓信号槽实际就是类似于Gof中的观察者模式。当某个事件发生以后,比如点击一下按钮,按钮就会触发一个信号,这个信号按照类似广播的形式进行发送,如果某个对象对这个信号感兴趣就会触发连接…...
计算机视觉领域经典模型汇总(2023.09.08
一、RCNN系列 1、RCNN RCNN是用于目标检测的经典方法,其核心思想是将目标检测任务分解为两个主要步骤:候选区域生成和目标分类。 候选区域生成:RCNN的第一步是生成可能包含目标的候选区域,RCNN使用传统的计算机视觉技术&#x…...
华为云云耀云服务器L实例评测|在 Centos Docker 中使用Nginx部署Vue项目
目录 前言 项目构建 使用CentOS部署 安装Nginx 配置Nginx 项目启动 访问重定向 使用Docker部署 编写docker文件 dockerfile nginx dockercompose 项目启动 前言 本期我们测试在云耀云服务器L实例中分别演示如何在 系统镜像Centos 与 应用镜像 Docker 中使用Nginx…...
高频知识汇总 |【计算机网络】面试题汇总(万字长文通俗易懂)
我之前也已经在写了好几篇高频知识点汇总,简要介绍一下,有需要的同学可以点进去先收藏,之后用到时可以看一看。如果有帮助的话,希望大家给个赞,给个收藏!有疑问的也可以在评论区留言讨论,能帮的…...
6.Flask-APScheduler定时任务框架
1.下载安装 pip install flask-apscheduler2.基本使用 from flask import Flask from flask_apscheduler import APScheduler app Flask(__name__) aps APScheduler() # 配置定时任务 scheduler { id: job1, func: scheduler:task, # 指向一个Python函数或方法…...
电脑入门:路由器访问控制列表基础知识
路由器访问控制列表基础知识 1、什么是访问控制列表? 访问控制列表在Cisco IOS软件中是一个可选机制,可以配置成过滤器来控制数据包,以决定该数据包是继续向前传递到它的目的地还是丢弃。 …...
目标检测笔记(十四): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
文章目录 一、目标检测介绍二、YOLOv8介绍三、源码获取四、环境搭建4.1 环境检测 五、数据集准备六、 模型训练6.1 方式一6.2 方式二6.3 针对其他任务 七、模型验证八、模型测试九、模型转换9.1 转onnx9.1.1 方式一 9.2 转tensorRT9.2.1 trtexec9.2.2 代码转换9.2.3 推理代码 一…...
windows系统edge浏览器退出账户后还能免密登录的解决方式
edge浏览器明明退出登录了,还能不用输密码一键点击就能登录; 这是因为微软的煞笔产品经理用脚后跟想出来的方案。 解决方案: 去设置里的账号管理,注销自己的微软账号登录;如果你发现自己并没有登录,那么看…...
在Spring Boot项目中使用JPA
1.集成Spring Data JPA Spring Boot提供了启动器spring-boot-starter-data-jpa,只需要添加启动器(Starters)就能实现在项目中使用JPA。下面一步一步演示集成Spring Data JPA所需的配置。 步骤01 添加JPA依赖。 首先创建新的Spring Boot项目…...
探讨Socks5代理IP在跨境电商与网络游戏中的网络安全应用
随着全球互联网的迅猛发展,跨境电商和在线游戏成为了跨国公司和游戏开发商的新战场。然而,与此同时,网络安全问题也日益突出。本文将探讨如何利用Socks5代理IP来增强跨境电商和网络游戏的网络安全,保障数据传输的隐私和安全性。 …...
T检验的前提条件|独立性|方差齐性|随机抽样
T检验是一种用于比较两组数据均值是否存在显著差异的统计方法,但在进行T检验之前,有一些前提条件需要满足,以确保结果的准确性和可靠性。这些前提条件包括: 正态性:T检验要求数据在每个组内都服从正态分布。正态性可以…...
【GO语言基础】变量常量
系列文章目录 【Go语言学习】ide安装与配置 【GO语言基础】前言 【GO语言基础】变量常量 【GO语言基础】数据类型 【GO语言基础】运算符 文章目录 系列文章目录常量和枚举变量声明全局变量声明大小写敏感 总结 常量和枚举 使用const关键字声明常量,并为每个常量提…...
C++QT day3
1> 自行封装一个栈的类,包含私有成员属性:栈的数组、记录栈顶的变量 成员函数完成:构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小 2> 自行封装一个循环顺序队列的类,包含…...
AI时代的较量,MixTrust能否略胜一筹?
人工智能的能力正在迅速接近人类,而在许多细分领域,已经超越了人类。虽然短期内这个突破是否会导致人工通用智能(AGI)还不清楚,但我们现在有的模型被训练成在数字交互中完美地模仿高能人类。尽管AGI仍不确定࿰…...
Ubuntu22.04 安装 MongoDB 7.0
稍微查了一些文章发现普遍比较过时。有的是使用旧版本的Ubuntu,或者安装的旧版本的MongoDB。英语可以的朋友可以移步Install MongoDB Community Edition on Ubuntu — MongoDB Manual,按照官方安装文档操作。伸手党或者英语略差的朋友可以按照本文一步步…...
【日志技术——Logback日志框架】
日志技术 1.引出 我们通常展示信息使用的是输出语句,但它有弊端,只能在控制台展示信息,不能灵活的指定日志输出的位置(文件,数据库),想加入或取消日志,需要修改源代码 2.日志技术…...
mysql存储过程和函数
存储过程语法 设置变量: set dogNum 1002; 1、无参的存储过程 delimiter $ CREATE PROCEDURE 存储过程名() begin 存储过程体 end $; 2、有参数的存储过程 delimiter $ CREATE PROCEDURE 存储过程名(in|out|inout 参数名1 参数类型,参数名2 参数类型……...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
