06.搭建一个自己的私有仓库-Gitea

06.搭建一个自己的私有仓库-Gitea | DLLCNX的博客

如果你是一位程序员或者IT相关领域的从业者,那么肯定知道git,而且也或多或少接触了不少开源仓库以及公司的私有仓库,但是我们有没有想过自己也搭建一个私有仓库呢。

这么多开源仓库,为什么还要搭建私有仓库呢?

首先,我们肯定了解因为众所周知的原因github的网络连接时好时坏,还有github或多或少因为美帝的政治正确以及扫描私有仓库代码来训练模型传闻等等让人有一些不爽。

并且这些开源仓库,重点是开源啊,万一你不想开源,或者本身就是公司的保密项目,虽然支持私有设置,但是这种开源仓库还是被坚决杜绝的。所以,对于公司来说,一般都会有自己的代码仓库。

那么除了开源仓库以及公司私库,如果我们自己也有一些项目既不想开源,又不能存公司仓库,这时我们除了把代码放本地磁盘备份,其实还就可以自己搭一个git仓库了。

一、介绍

其实开源的仓库私有服务很多,比如一般公司采用的gitlab,还有轻量级的gogs。而我今天要推荐的是另一款,从gogs的分支来的项目gitea。那么针对这三个仓库有什么区别呢?

Gitlab

GitLab有自己的官方开源仓库以及提供私有部署的开源并免费的GitLab CE版本。其官方的开源仓库不仅仅是GitHub的一个替代品,它更像是一个完整的DevOps平台。GitLab几乎是软件开发机构必备的基础设施,因为它提供了代码和项目管理工具问题报告、持续交付和监控。Gitlab基于Ruby on Rails构建,功能强大,很多公司都是用的它。gitlab有很强大的功能以及丰富的生态,对于公司仓库来说,它绝对是首选,但是对于个人来说,它对服务器的性能要求也大得多,官方推荐最低配置是4核4G,并且gitlab新版本的界面我个人是一直感觉很别扭,也许等习惯就好了。

  • 功能强大
  • CI/CD
  • 界面复杂
  • 性能要求较高

Gogs&Gitea

Gogs是使用G语言开发的100% 开源并可无条件免费使用的项目。所有的源代码均通过 MIT 授权协议 托管在 GitHub 上.任何 Go 语言 支持的平台都可以运行 Gogs,包括 Windows、Mac、Linux 以及 ARM。一个廉价的树莓派的配置足以满足 Gogs 的最低系统硬件要求。有些用户甚至还将 Gogs 运行在 NAS 设备上。

Gitea的从Gogs Fork而来,Gitea的首要目标是创建一个极易安装,运行非常快速,安装和使用体验良好的自建 Git 服务。我们采用Go作为后端语言,这使我们只要生成一个可执行程序即可。并且他还支持跨平台,支持 Linux, macOS 和 Windows 以及各种架构,除了x86,amd64,还包括 ARM 和 PowerPC。

gitea既然来源于gogs,那么它们具体有什么相同点和区别呢?

相同点:

1.轻量级:Gitea和Gogs都是轻量级的Git服务,安装、配置和使用都非常简单。

2.易于部署:Gitea和Gogs可以在各种平台上部署,包括Docker、Kubernetes、Linux、Windows和macOS等。

3.高效性:Gitea和Gogs都性能出色,能够处理大规模的代码库和大量的并发访问。

4.开源免费:Gitea和Gogs都是开源的,可以免费使用。

5.功能强大:Gitea和Gogs支持多种协议,如Git、SSH、HTTP等,并具备与Github类似的功能,如Pull Request、问题跟踪、维基等

不同点:
1.Gogs的优劣势

优势

1.简便易用:Gogs安装、配置和使用都相当方便。

2.体积小巧:Gogs没有太多复杂的功能和高端的特性,体积小巧,运行速度快。

3.免费开源:Gogs是开源免费的Git服务。

4.界面简洁:Gogs的Web界面不错,非常简洁,易于使用。

劣势

1.维护困难:Gogs开发维护力量个人或小团队,或许在长期的发展过程中会出现维护困难问题。

2.社区活力不足:Gogs保持了可持续发展可能性,但相对活跃度比较低。

2.Gitea的优劣势

优势

1.使用方便:Gitea的安装和配置非常简单,网页化界面也更加友好,代码模块化设计,基于数据处理引擎等新科技,内存和 CPU 利用率都得到极大的提升。

2.功能齐全:Gitea的功能非常齐全,多人协同开发、权限管理、问题和回答、动态和评论项目、人员管理等,几乎涵盖了所有的必要功能。

3.安全性好:Gitea已经发现的几个漏洞在较短时间内就得到了彻底解决,并且Gitea拥有一个活跃的社区,能够及时修复漏洞。

劣势

1.版本较新:Gitea是较新的一款Git服务,尚未广泛使用。

2.移植性不足:Gitea移植性不如Gogs,目前只支持x86、ARM和mips CPU架构。

二、搭建Gitea

本文基于 docker-compose 来搭建Gitea,如果不清楚docker-compose,可以自己了解了解docker的基础知识和docker-compose的基础知识。

首先我们需要了解,gitea服务除了需要gitea本身的镜像外,还需要一个数据库来存储用户,权限等等关系,如果我们不设置,可以使用默认的SQLite3 来初始化一个。我这边一步到位,使用了pg数据库。

  1. 准备

首先我们需要创建一个gitea仓库数据的映射地址。比如我们创建了一个/docker/gitea目录。并且在里面提前创建好dataconfig以及postgres文件夹。

docker
		--gitea
				--data
				--config
				--postgres
  1. 编写脚本

我们在/docker/gitea里面创建一个docker-compose.yml文件,开始编写初始化脚本。

version: "2"

services:
  server:
    image: gitea/gitea:1.21.4-rootless
    environment:
      - GITEA__database__DB_TYPE=postgres    #要使用的数据库
      - GITEA__database__HOST=db:5432        #数据库端口
      - GITEA__database__NAME=gitea          #为gitea分配的仓库名称,如果我们要在以前的仓库里面,自己创建修改,如果数据库镜像也新建,就直接写好这个配置文件即可,会自动创建
      - GITEA__database__USER=gitea          #数据库用户名
      - GITEA__database__PASSWD=gitea        #数据库用户密码
    restart: always
    volumes:
      - /docker/gitea/data:/var/lib/gitea     # 将gitea数据与刚才新建的本地文件夹data进行映射
      - /docker/gitea/config:/etc/gitea				# 将gitea配置与刚才新建的本地文件夹data进行映射
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"   # web界面访问端口,左边可以改为自己服务想要的端口,右边不动
      - "2222:2222"   # ssh端口,左边可以改为自己服务想要的端口,右边不动
    depends_on:
      - db

  db:      # 如果我们为gitea新建数据库镜像,需要配置数据库镜像脚本,如果使用原有数据库,请删除db所有配置,并注意填写上面数据库配置
    image: postgres:14
    restart: always
    environment:
      - POSTGRES_USER=gitea       # 用户名
      - POSTGRES_PASSWORD=gitea   # 密码
      - POSTGRES_DB=gitea         # 仓库名称
    volumes:
      - /docker/gitea/postgres:/var/lib/postgresql/data   # 将数据库数据与刚才新建的本地文件夹postgres进行映射

针对gitea的标签,但是最新官方文档提示如下:

对于稳定版本,您可以使用 :latest-rootless:1-rootless,或指定特定的版本,如: 1.21.4-rootless。如果您想使用最新的开发版本,则可以使用 :dev-rootless 标签。如果您想运行发布分支的最新提交,可以使用 :1.x-dev-rootless 标签,其中 x是 Gitea 的次要版本号(例如:1.16-dev-rootless)。

请注意

**官方建议:**应由在配置文件中指定的UID/GID的用户/组所有。默认情况下,Docker中的Gitea将使用uid:1000 gid:1000。如果需要,您可以使用以下命令设置这些文件夹的所有权:

sudo chown 1000:1000 /docker/gitea/config/ /docker/gitea/data/

如果没有对data和config文件夹设置正确的权限,容器有可能无法启动。

**但是:**如果发现设置了以上命令,导致下一步启动服务无法正常启动,例如gitea-server-1,则不要对/docker/gitea/config/ /docker/gitea/data/设置权限。我再macos下设置权限后导致无法启动,默认创建完直接启动反而没问题。灵活应变,反正就是权限一般没正确匹配导致没权限。

image-20240120152412359

  1. 启动

执行以下命令在后台启动 Gitea。

  docker-compose up -d

我们可以使用 docker-compose ps 命令可以查看 Gitea 是否正确启动。可以使用 docker-compose logs 命令查看日志。

要关闭设置,请执行 docker-compose down 命令。这将停止和终止容器,但我们持久化的数据依旧会存在,即dataconfig以及postgres,这些在docker其实被称为

image-20240120154449864

  1. 安装

等我们拉取完镜像,并且通过docker-compose ps确保镜像已经正常启动。就可以搭建服务的ip+配置的端口来访问安装了。如果没有正常启动,请查看日志,看看端口是不是冲突了或者哪里配置是不是出了问题。

image-20240120160337974

我们可以看到,数据库的配置已经默认配好了,如果我们没在脚本里面填写,这边其实也可以自己填入。

上面配置里面,一般我们只需要配置站点名称服务器域名基础URL。其它具体可以查查官方文档,看看是否自己需要修改。

  • 站点名称:这个没啥说的,git站名称
  • 服务器域名:因为我们本机使用localhost等等没问题,但是我们对内网其它设备或者用户肯定需要使用ip,甚至如果暴漏外网可能使用外网ip或者域名映射进内网。那么这一块就是要填我们要让外部设备访问的ip或者域名。
  • 基础URL:同理,git仓库让别人使用,肯定有项目克隆等等地址,这个就是展示的克隆等对外展示的路径。

如果我们需要使用邮件通知,用户信息验证消息发送等等需要配置可选设置-电子邮件设置,填入自己的邮件服务相关配置即可。

如果要提前设置管理员,配置可选设置-管理员帐号设置,否则第一个注册的默认是管理员。

确认完,等待加载初始化:

image-20240120155924358

初始化完成,就可以打开网页了:
image-20240120160505176

三、使用

普通用户

我们登录进来后,其实使用起来依旧是仓库的那些操作,创建仓库,版本分支,代码合并,创建组织(就是创建一个项目组)等等,发布包,以及镜像模式同步其它仓库(github,gitlab等等,定时同步)。

image-20240120160715083

我们创建一个仓库试试:

image-20240120160810984

image-20240120160903617

接下来我们就可以连接这个仓库地址,然后进行代码提交和管理了,和github以及gitlab大同小异。

管理员

image-20240120161123060

这里,我们可以做整个系统的管理,包括用户管理,仓库管理,监控等等。如果我们一些配置无法通过管理中心修改,需要去更改配置文件。就是我们一开始创建的config文件夹,它下面会自动创建一个app.ini文件。以下只是本次默认的一些配置,我们可以查看官方文档针对自己再进行更适合自己的优化与配置。之前我们没配置或者配置错的所有配置其实都可以在这个配置文件里面更改,改完记得重启容器让其生效即可。

APP_NAME = hahaha
RUN_USER = git
RUN_MODE = prod
WORK_PATH = /var/lib/gitea

[repository]
ROOT = /var/lib/gitea/git/repositories

[repository.local]
LOCAL_COPY_PATH = /tmp/gitea/local-repo

[repository.upload]
TEMP_PATH = /tmp/gitea/uploads

[server]
APP_DATA_PATH = /var/lib/gitea
SSH_DOMAIN = 172.20.10.4
HTTP_PORT = 3000
ROOT_URL = http://172.20.10.4:3000/
DISABLE_SSH = false
; In rootless gitea container only internal ssh server is supported
START_SSH_SERVER = true
SSH_PORT = 2222
SSH_LISTEN_PORT = 2222
BUILTIN_SSH_SERVER_USER = git
LFS_START_SERVER = true
DOMAIN = 172.20.10.4
LFS_JWT_SECRET = VH943M-F7UaIIXUgIz7SzA3Cv_j3bpp2rW3-z8E1JGA
OFFLINE_MODE = false

[database]
PATH = /var/lib/gitea/data/gitea.db
DB_TYPE = postgres
HOST = db:5432
NAME = gitea
USER = gitea
PASSWD = gitea
SCHEMA = 
SSL_MODE = disable
LOG_SQL = false

[session]
PROVIDER_CONFIG = /var/lib/gitea/data/sessions
PROVIDER = file

[picture]
AVATAR_UPLOAD_PATH = /var/lib/gitea/data/avatars
REPOSITORY_AVATAR_UPLOAD_PATH = /var/lib/gitea/data/repo-avatars

[attachment]
PATH = /var/lib/gitea/data/attachments

[log]
ROOT_PATH = /var/lib/gitea/data/log
MODE = console
LEVEL = info

[security]
INSTALL_LOCK = true
SECRET_KEY = 
REVERSE_PROXY_LIMIT = 1
REVERSE_PROXY_TRUSTED_PROXIES = *
INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE3MDU3Mzc4NTl9.OOHybqMKxX0q0564L5TPaAXctHuZDUkPNw6vXXfGL3A
PASSWORD_HASH_ALGO = pbkdf2

[service]
DISABLE_REGISTRATION = false
REQUIRE_SIGNIN_VIEW = false
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL = false
ALLOW_ONLY_EXTERNAL_REGISTRATION = false
ENABLE_CAPTCHA = false
DEFAULT_KEEP_EMAIL_PRIVATE = false
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
DEFAULT_ENABLE_TIMETRACKING = true
NO_REPLY_ADDRESS = noreply.localhost

[lfs]
PATH = /var/lib/gitea/git/lfs

[mailer]
ENABLED = false

[openid]
ENABLE_OPENID_SIGNIN = true
ENABLE_OPENID_SIGNUP = true

[cron.update_checker]
ENABLED = false

[repository.pull-request]
DEFAULT_MERGE_STYLE = merge

[repository.signing]
DEFAULT_TRUST_MODEL = committer

[oauth2]
JWT_SECRET = 61KySID-ubFsD7qa5aUNH68yOfdtO4rLzvU0xQCLvEo

四、其它

以下是我自己已经使用好久的仓库页面。我没有采取原生docker-compose搭建,而是采用了界面化工具Portainer进行搭建的,如果对Portainer感兴趣,可以看看我的文章01.容器界面化管理项目-Portainer | DLLCNX的博客,它把我们docker搭建服务中需要命令化操作的操作相当于全部界面化,并且将容器管理也界面化,适合我们搭建很多服务后的管理。

仓库界面
image-20240120201804582

Portainer界面
image-20240120203109664

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Goodbye! Xshell、iTerm2、FinalShell,mobaxterm,新一代开源免费的终端工具真香!

前言 众所周知,在数字化时代,远程连接成为工作和管理中不可或缺的一环。 而在这个领域,SSH(Secure Shell)一直是最常用的协议之一,为远程管理提供了安全的通信渠道。 然而,伴随着技术的发展和…

docker 体验怀旧游戏(魂斗罗等)

docker run --restart always -p 8081:80 --name fc-games -d registry.cn-hangzhou.aliyuncs.com/bystart/fc-games:latest ip:8081访问 jsnes: js制作了一个网页版的NES模拟,可以在网页上玩fc游戏 (gitee.com)

Unity中URP下计算额外灯的方向

文章目录 前言一、为什么额外灯的方向,不像主平行灯一样直接获取?1、主平行灯2、额外灯中,包含 点光源、聚光灯 和 平行灯 二、获得模型顶点指向额外灯的单位向量三、Unity中的实现 前言 在上一篇文章中,我们获取了URP下额外灯的…

探索Gin框架:快速构建高性能的Golang Web应用

前言 Gin框架是一个轻量级的Web框架,基于Go语言开发,旨在提供高性能和简洁的API。它具有快速的路由和中间件支持,使得构建Web应用变得更加简单和高效。无论是构建小型的API服务还是大型的Web应用,Gin框架都能够满足你的需求。 无论…

vivado I/O和时钟规划设计流程步骤

I/O和时钟规划设计流程步骤 下图显示了左侧的项目设计流程步骤。水平箭头表示项目设计流程中可以执行I/O和时钟规划的点。中的步骤I/O和时钟规划设计流程如右图所示。 项目设计流程从一个空的I/O规划项目、RTL设计项目或合成后网表项目。使用这些项目类型中的任何一种&#xf…

【江科大】STM32:USART串口(理论部分)上

串口 全双工:可以进行同步通信 单端信号:信号线传输的就是单端信号。(也就是与地线(GND)的电势差) 缺点:防干扰能力差 原因:当信号从A点传输到B点,理想条件是A&#xff0…

Unity 解决异步分发方案

很多程序,包括游戏、小程序、一些AR、VR的程序,因为客户端体量太大,更新频繁都涉及到远程热更新的问题,解决这类问题的思路基本上是客户端解决主要功能,资源类放置在服务器。 下面记录下: 1.CDN或者云轻量…

探讨Go语言中的HTTP代理模式:看Go如何玩转网络中转站

在互联网的海洋中,HTTP代理服务器像一座灯塔,为我们的网络冲浪提供了指引。而当Go语言遇上HTTP代理,会碰撞出怎样的火花呢?今天,让我们一起探讨Go语言中的HTTP代理模式,看看它如何玩转这个网络中转站&#…

BGV/BFV 的统一自举算法

参考文献: [GV23] Geelen R, Vercauteren F. Bootstrapping for BGV and BFV Revisited[J]. Journal of Cryptology, 2023, 36(2): 12.Bit Extraction and Bootstrapping for BGV/BFV 文章目录 Bootstrapping for BGV and BFVDecryption FunctionBGVBFV Bootstrapp…

项目管理中,项目经理如何预防需求蔓延?

在项目管理中,需求蔓延是一个常见的问题,需求蔓延可能会导致项目进度延误、成本增加和产品质量下降。为了防止这种情况发生,项目经理需要采取一系列措施来预防需求蔓延。 一、明确项目范围和需求 项目经理需要在项目开始阶段明确项目范围和…

【云原生】Docker 网络

目录 Docker 网络实现原理 查看容器的输出和日志信息 Docker 的网络模式: 使用docker run创建Docker容器时,可以用 --net 或 --network 选项指定容器的网络模式 网络模式详解 1.host模式 2.container模式 --name 选项可以…

【开源】基于JAVA+Vue+SpringBoot的婚恋交友网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 会员管理模块2.3 新闻管理模块2.4 相亲大会管理模块2.5 留言管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 会员信息表3.2.2 新闻表3.2.3 相亲大会表3.2.4 留言表 四、系统展示五、核心代码5.…

数据结构之二叉树的遍历

数据结构是程序设计的重要基础,它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从问题出发,分析和研究计算机加工的数据的特性,以便为应用所涉及的数据选择适当的逻辑结构、存储结构及其相应的操作方法…

STM32F407移植OpenHarmony笔记1

参考文档: OpenAtom OpenHarmonywidthdevice-width,initial-scale1.0https://docs.openharmony.cn/pages/v3.2/zh-cn/device-dev/get-code/gettools-acquire.md/ 搭建环境 安装linux系统: Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-91-generic x86_64) 下载源代码&a…

【服务器GPT+MJ+GPTs】创建部署GPT+MJ+GPTs程序网站

目录 🌺【前言】 🌺【准备】 🌺【宝塔搭建GPT+MJ+GPTs】 🌼1. 给服务器添加端口 🌼2. 安装宝塔 🌼3. 安装Docker 🌼4. 安装ChatGPT程序 🌼5. 程序更新 🌼6. 修改端口 | 密码 🌼7. 绑定域名+申请SSL证书 🌺【前言】 相信大家都对openai的产品ch…

【洛谷】P1443 马的遍历(BFS)

由于在 x,y 表示 x 行 y 列还是 y 行 x 列上存在歧义,另外提供一组测试数据: // input: 5 5 2 3// output: 1 2 3 2 1 2 3 0 3 2 1 2 3 2 1 4 1 2 1 4 3 2 3 2 3 可以说&…

Qt基础-窗体添加图标

本文演示Qt窗体如何添加图标 创建项目添加资源文件 打开窗体的设计窗口 选择windowIcon属性,点击下箭头-选择资源,选择资源文件,(格式不受限制) 点击OK即可 运行看效果

【小呆的力学笔记】弹塑性力学的初步认知二:应力应变分析(2)

文章目录 1.4 主应力空间、八面体应力1.5 应变分析1.6 特殊应力、应变定义 1.4 主应力空间、八面体应力 一点的应力状态不论如何变化,其主应力和主方向一致的话,该点的应力状态就是唯一确定的。因此,我们用主应力方向建立一个三维坐标系来描…

【Linux】基础命令及测试工作常用

一、Linux基础命令 【基础】 tab补全 chtrlc停止进程 绝对路径: 以 / 开头,从根目录下开始寻找路径 相对路径: 不以 / 开头,从当前目录下开始寻找 1、系统管理相关命令 ifconfig 显示或设置网络设备的命令,我们可…

[实战]加密传输数据解密

前言 下面将分享一些实际的渗透测试经验,帮助你应对在测试中遇到的数据包内容加密的情况。我们将以实战为主,技巧为辅,进入逆向的大门。 技巧 开局先讲一下技巧,掌握好了技巧,方便逆向的时候可以更加快速的找到关键函数…