开始在本地部署自己的 Gitea 服务器

0.简介

在软件开发和团队协作中,代码管理是至关重要的环节。笔者一直使用gitblit管理自己的仓库。然鹅,这个软件已经很久没有更新了。经过多方考察,发现Gitea 是一款轻量级的开源代码托管平台,具有易于部署、资源占用少、功能丰富等特点,非常适合个人开发者或小型团队在本地搭建自己的代码仓库。

本文将详细介绍如何在安装了git的Windows 10 操作系统上部署 Gitea 服务器,使用 Gitea 自带的 SSH 服务器,端口设置为 10022,且不开启 avatar 服务。

文章目录

  • 0.简介
  • 1. 准备工作
  • 2. 安装与初始化配置
    • 2.1. 启动 Gitea 并生成配置文件
    • 2. 停止 Gitea 并修改配置文件
      • (1)基本配置
      • (2)查看SSH服务器情况
    • 2.2. 登入
  • 3. 有效地组织仓库
    • 3.1 gitblit和Gitea在仓库路径上的一些区别
    • 3.2 gitblit 和 gitea的主要区别
  • 4. 关于版本控制的好处
  • 5. 最重要的事情

1. 准备工作

  1. 下载 Gitea 安装包:从 Gitea 官方网站(https://gitea.com/)下载适用于 Windows 系统的最新版本可执行文件(.exe 格式)。

  2. 创建安装目录:在 Windows 10 系统中选择一个合适的位置创建目录,例如在 E 盘根目录下创建 “gitea” 目录,路径为 D:\gitea

2. 安装与初始化配置

2.1. 启动 Gitea 并生成配置文件

将下载好的 Gitea 可执行文件(例如 gitea.exe)复制到创建好的 D:\gitea 目录中。打开git bash命令提示符,进入该目录,执行以下命令启动 Gitea:

$cd /e/gitea
$ ./gitea-1.23.8-gogit-windows-4.0-amd64.exe

start gitea
首次启动后,请打开浏览器,进行配置:

set注意:

  1. 为了配置内建SSH选项,暂时把“SSH端口”置空。如果不置空。可能出错。
  2. 选择 Sqlite 作为数据库,个人足够了,且是绿色版,可以直接U盘拷贝走。如果要配置PG或者MySQL,则会麻烦一些,且不能放到 U盘里带走了。
  3. 点击“确定”后,要等待一会(30-300秒),就会跳入注册界面。
  4. 注册一个账号,如admin。

2. 停止 Gitea 并修改配置文件

按下 Ctrl+C 停止 Gitea 服务。接下来需要修改配置文件 app.ini,以满足我们的预设环境要求。配置文件路径为 E:\gitea\custom\conf\app.ini 进行以下修改:

(1)基本配置

参考: https://docs.gitea.com/next/administration/config-cheat-sheet

找到 [server] 部分,修改以下内容:

[server]
SSH_DOMAIN = 192.168.101.100
DOMAIN = 192.168.101.100
HTTP_PORT = 3000
ROOT_URL = http://192.168.101.100:3000/
OFFLINE_MODE = true
# 省略N个配置...#下列选项开启内建SSH服务,必须加入这个选项
START_SSH_SERVER = true#必须修改这个选项为false
DISABLE_SSH = false#网页上展示的SSH端口
SSH_PORT = 10022#实际监听的端口
SSH_LISTEN_PORT = 10022

这里建议采用内建SSH,是因为怕gitea把系统ssh服务的配置给改坏了。一般的像我这样水平不高的个人用户,最好是使用内建ssh。在Linux下更要注意,Gitea如果使用系统SSH,会配置相关用户的.ssh文件夹下的内容。主要与内建SSH相关的配置选项如下:


### DISABLE_SSH: false  
当 SSH 功能不可用时禁用该功能。
### START_SSH_SERVER: false  
启用时,使用内置的 SSH 服务器。
### SSH_SERVER_USE_PROXY_PROTOCOL: false  
期望内置 SSH 服务器的连接携带 PROXY 协议头。
### BUILTIN_SSH_SERVER_USER: {RUN_USER}  
内置 SSH 服务器使用的用户名。
### SSH_USER: {BUILTIN_SSH_SERVER_USER}  
克隆 URL 中显示的 SSH 用户名。若设置为 `(DOER_USERNAME)`,则使用当前登录用户的用户名。此选项仅适用于已配置 SSH 反向代理且需要为 Git SSH 克隆使用不同用户名的高级用户,大多数用户应保持为空或修改 `BUILTIN_SSH_SERVER_USER`。
### SSH_DOMAIN: {DOMAIN}  
服务器的域名,用于显示克隆 URL。
### SSH_PORT: 22  
克隆 URL 中显示的 SSH 端口。
### SSH_LISTEN_HOST: 0.0.0.0  
内置 SSH 服务器的监听地址。
### SSH_LISTEN_PORT: {SSH_PORT}  
内置 SSH 服务器的端口。

(2)查看SSH服务器情况

再次启动 gitea,会看到如下两行:

2025/06/05 13:16:36 modules/ssh/ssh.go:385:Listen() [I] Adding SSH host key: E:\gitea\data\ssh\gitea.rsa
2025/06/05 13:16:36 modules/ssh/init.go:26:Init() [I] SSH server started on :10022

可以看见自动创建了ssh的key,并启动了服务。用 netstat -na 可以看见 3000端口,10022端口都已经启动。

netstat -naTCP    0.0.0.0:3000           0.0.0.0:0              LISTENINGTCP    0.0.0.0:10022          0.0.0.0:0              LISTENING

注意,如果你的git的版本很老,这一步可能出错,原因是 gitea 调用 ssh-keygen时候,路径名里的"“转义符的问题,让路径里的”"破坏了key的全路径。此时,只要根据data文件夹里多出来的奇怪长文件名“egitea?ata?sh?itea.rsa”,手工恢复到指定文件夹“E:\gitea\data\ssh”里即可。

2.2. 登入

使用创建的账户,登入网页:

gitea
如果能够顺利运行到这里,仓库就建好了。

3. 有效地组织仓库

3.1 gitblit和Gitea在仓库路径上的一些区别

Gitblit在建立仓库的时候,会按照用户输入的多级路径来自动归并仓库。比如:同样以user登入,可以直接建立以顶级域名为根的仓库(和用户名可以没关系),且支持多级配置路径。类似 /opensource/database, /proj2025/simu_test/cargo01 等等,每个路径下面,可以包含N个仓库。这种特性特别有利于个人归拢自己的零碎的小程序。说句实话,如果不是 gitblit 目前更新缓慢,且java发展太快,和gitblit依赖的版本之间的代差越来越大,我是绝对不会迁移的。

Gitea虽然很现代,但是不支持这种配置。默认的仓库的前缀是和用户名高度关联的。这就很要命额。因为作为个人的git仓库,用户就我一个人,或者小企业也就几个人,这种情况下,如果收集的小东西太多,就很混乱了。目前的解决方法:

  1. 按照功能建立组织。组织名称就是“数据库工具”、“网络工具”、“SDR”、“OpenStreetMap” 等名字,组织成员就一个人,就是笔者。
  2. 把各个项目建立在组织名下,这样,前缀就有了一层划分,如 SDR/spectrum。
  3. 第二级别划分,建议采用 class.name的范式,比如 viewer.gqrx,alg.ransac等等。

经过这样的处理,确保每个大类别里只有10-20个仓库,就比较清晰了。

3.2 gitblit 和 gitea的主要区别

作为个人用户本地使用,Gitea 和 Gitblit 相比:

社区活跃度 Gitea胜出。活跃的社区意味着更频繁的更新、补丁以及更多社区驱动的插件和扩展,能更好地满足用户需求和及时修复问题。

绿色安装与部署,Gitea胜出,作为基于 Go 语言开发的单一二进制文件,个人使用sqlite时,依赖更少,不需要java虚拟机。安装和部署过程更简单直接。由于没有虚拟机, Gitea 对系统资源要求低,能在树莓派2+TF卡这种低配置设备上运行。而 Gitblit对Java有版本的要求,资源消耗稍微多一些。

用户界面,Gitblit 胜出。虽然Gitea 提供了更现代、更友好的 web 界面,但我觉得个人使用而言,由于无需pull request和工单这种高级操作,也不需要web hooks,翻到gitblit 导航更直观、一个屏幕显示的信息量更全面。 相比之下 Gitea 的界面字很大,很现代,但是用户体验不如 Gitblit 好。

功能特性, Gitea更适合现代化开发。Gitea 的敏捷开发支持进步较快, Actions 支持 CI/CD 功能且兼容 GitHub Actions,用户可采用熟悉的 YAML 格式编写 workflows 并重用大量已有 Actions 插件,在 CI/CD 方面的支持更现代化和便捷。Gitblit 在这方面的功能更新和集成能力相对较弱。

安全定制性,Gitea略有优势:Gitea 用户权限管理更细致,可以设置组织、团队,控制列表等功能,相比之下 Gitblit 在安全方面配置比较单一。这一点对单用户来说意义不大。

4. 关于版本控制的好处

个人开发者虽然不总是和别人打交道,但自己使用 Git 也是必要的,主要有以下几点好处:

一、代码版本管理更有序
Git 能为每一次代码修改生成唯一版本号,形成清晰的开发时间线。例如,当你在迭代某个功能时,可能会尝试多种实现方案,通过 git commit 记录每版代码的核心改动(如“优化算法逻辑”“修复内存泄漏”),后续可通过 git log 快速回溯任意阶段的代码状态。若新功能引入 bug,无需手动恢复文件,直接用 git checkout 切换到稳定版本即可,避免因误操作导致代码丢失或混乱,尤其适合长期维护的个人项目。 同时,像我这样30多年的老园丁,回顾20多年前的时光还是很激动的(我有 Visual Source Safe和SVN历史库)。

二、本地协作与实验更自由
即使不与他人协作,Git 也能在本地构建“虚拟团队”环境。你可以创建多个分支(如 feature/new-login hotfix/bug-123),在独立分支上安全地测试新想法或修复紧急问题。例如,开发主程序时想尝试集成新框架,可新建分支隔离实验代码,失败后直接删除分支,不影响主分支的稳定性。这种“隔离式开发”能大幅降低试错成本,让你更敢于探索新技术,提升开发效率。 我见过很多“ZIP”大神,每天打包一次代码,这种方式不是不可以,但是很容易糊涂。相对而言,版本控制能解决大部分的问题。

三、数据备份与跨设备同步更便捷
Git 的版本库本质是代码的完整备份。将本地仓库同步到远程(如 GitHub、Gitee 等个人仓库可以在U盘里或者云服务器),既能防止本地硬盘故障导致数据丢失,又能实现跨设备开发。比如,你在办公室用台式机编写代码,下班途中用笔记本电脑通过 Git 拉取最新进度继续开发,无需手动拷贝文件。此外,一些云服务商提供自动备份功能,进一步增强了数据安全性,让个人开发者无需担心因设备故障中断工作。

四、培养专业开发习惯
使用 Git 是遵循行业标准的体现,能帮助个人开发者养成规范化的工作流程。从编写有意义的提交信息(如“feat: 添加用户注册功能”“docs: 更新 README 文档”)到合理管理分支,这些习惯会渗透到日常开发中,提升代码质量和项目可维护性。当未来参与团队协作时,你已熟练掌握 Git 操作,能快速适应企业级开发流程,避免因工具使用问题拖慢进度。

5. 最重要的事情

要给每个组织、每个项目选取一个言简意赅的名字,以及一个好看直观的PNG图标。这样,每天打开自己的Git网站,就像是来到了自己的后花园,棒极了。

gitea

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

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

相关文章

Xsens-AAA工作室品质,为动画师准备

每一帧都讲述着一个故事,当动作真实呈现时,故事便鲜活起来。我们打造并改进了 Xsens Animate,助力专业人士突破数字动画的界限。 通过升级后的 Xsens Animate,您可以获得女性和男性解剖模型以及更精确的运动引擎,从一…

嵌入(Embedding)技术的实现原理与应用场景解析

嵌入(Embedding)技术的实现原理与应用场景解析 引言:从One-Hot到语义空间 在自然语言处理的演进历程中,嵌入技术(Embedding)的诞生标志着一个重要转折点——它让离散的符号表示突破了维度诅咒&#xff0c…

金仓数据库征文-金仓KES数据同步优化实践:逻辑解码与增量同步

目录 一.同步场景与方案选型 二.什么是KES 三.同步环境配置 1.前置条件验证 2.逻辑解码配置 四.同步实施与问题排查 1.结构映射规则 2.增量数据捕获 3.数据一致性校验 五.性能调优实践 1.同步线程优化 2.批量提交优化 3.资源监控指标 六.典型场景解决方案 1.双向…

开源语义分割工具箱mmsegmentation基于Lovedata数据集训练模型

开源语义分割工具箱mmsegmentation安装环境 文章目录 1、下载数据集2、整理数据集3、下载预训练模型4、测试5、训练模型参考官方数据处理步骤 https://github.com/open-mmlab/mmsegmentation/blob/main/docs/zh_cn/user_guides/2_dataset_prepare.md#loveda 数据集类别标签:…

Python概率统计可视化——概率分布、假设检验与分子运动模型

Python概率统计可视化——概率分布、假设检验与分子运动模型 前言 概率统计作为描述不确定性和随机现象的数学工具,广泛应用于物理学、生物学、经济学等领域。然而,抽象的概率分布和统计推断过程往往难以直观理解。可视化技术通过将概率密度、假设检验逻…

NLP学习路线图(二十二): 循环神经网络(RNN)

在自然语言处理(NLP)的广阔天地中,序列数据是绝对的核心——无论是流淌的文本、连续的语音还是跳跃的时间序列,都蕴含着前后紧密关联的信息。传统神经网络如同面对一幅打散的拼图,无法理解词语间的顺序关系&#xff0c…

禅道5月更新速览 | 新增交付物配置功能,支持建立跨执行任务依赖关系,研发效能平台上线

禅道体验又升级啦!禅道5月新功能合集来啦,研发效能平台与大家见面啦! 我们将继续坚持,月月有大招,迭代不停歇,快来更新禅道,体验全新的项目管理工具吧~ ​

【PDF PicKiller】PDF批量删除固定位置图片工具,默认解密,可去一般图、背景图、水印图!

PDF批量删除固定位置图片工具 PDF PicKiller <center>PDF PicKiller [Download](https://github.com/Peaceful-World-X/PDF-PicKiller)&#x1f929; 工具介绍&#x1f973; 主要功能&#x1f92a; 软件使用&#x1f92a; 参数解释&#x1f92a; 关键代码&#x1f929; 项…

kubeadm安装k8s

1、环境准备 1.1、升级系统内核 参考另一篇文章&#xff1a;https://blog.csdn.net/u012533920/article/details/148457715?spm1011.2415.3001.5331 1.2、设置Hostname cat <<EOF > /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhos…

Vue基础(14)_列表过滤、列表排序

Array.prototype.filter()【ES5】 filter() 方法创建给定数组一部分的浅拷贝&#xff0c;其包含通过所提供函数实现的测试的所有元素。 语法&#xff1a; filter(callbackFn) filter(callbackFn, thisArg) 参数&#xff1a; callbackFn(回调函数)&#xff1a;为数组中的每个元…

ComfyUI 中如何使用 Depth ControlNet SD1.5

目录 SD1.5 Depth ControlNet 简介 Depth ControlNet 主要特点 SD1.5 Depth ControlNet工作流准备工作 1. 安装必要插件 方式一:使用 ComfyUI Manager(推荐) 方式二:通过 git 安装必要插件 方式三:手动安装(不推荐) 2.1 下载工作流所需模型 2.2 模型存放位置 SD…

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…

mysql的分页场景下,页数越大查询速度越慢的解决方法

一 问题描述 select * from table limit 0,10扫描满足条件的10行&#xff0c;返回10行&#xff0c; 但当limit 99989,10的时候数据读取就很慢,limit 99989,10的意思扫描满足条件的99999行&#xff0c;扔掉前面的99989行&#xff0c;返回最后的10行&#xff0c;这样速度就会很慢…

MDP的 Commands模块

文章目录 Isaac Lab Commands 模块详细指南&#x1f4cb; 模块概述&#x1f3d7;️ 模块架构&#x1f3aa; 命令类型详解1. &#x1f6ab; 空命令 (NullCommand)2. &#x1f3c3; 速度命令 (VelocityCommand)&#x1f3b2; 均匀分布速度命令 (UniformVelocityCommand)&#x1f…

全流程开源!高德3D贴图生成系统,白模一键生成真实感纹理贴图

导读 MVPainter 随着3D生成从几何建模迈向真实感还原&#xff0c;贴图质量正逐渐成为决定3D资产视觉表现的核心因素。我们团队自研的MVPainter系统&#xff0c;作为业内首个全流程开源的3D贴图生成方案&#xff0c;仅需一张参考图与任意白模&#xff0c;即可自动生成对齐精确…

Levenberg-Marquardt算法详解和C++代码示例

Levenberg-Marquardt&#xff08;LM&#xff09;算法是非线性最小二乘问题中常用的一种优化算法&#xff0c;它融合了高斯-牛顿法和梯度下降法的优点&#xff0c;在数值计算与SLAM、图像配准、机器学习等领域中应用广泛。 一、Levenberg-Marquardt算法基本原理 1.1 问题定义 …

理解网络协议

1.查看网络配置 : ipconfig 2. ip地址 : ipv4(4字节, 32bit), ipv6, 用来标识主机的网络地址 3.端口号(0~65535) : 用来标识主机上的某个进程, 1 ~ 1024 知名端口号, 如果是服务端的话需要提供一个特定的端口号, 客户端的话是随机分配一个端口号 4.协议 : 简单来说就是接收数据…

如何计算光伏工程造价预算表?

在光伏工程的推进过程中&#xff0c;造价预算表的编制是至关重要的环节&#xff0c;传统的光伏工程造价预算编制方法&#xff0c;往往依赖人工收集数据、套用定额&#xff0c;再进行繁琐的计算与汇总&#xff0c;不仅效率低下&#xff0c;而且容易出现人为误差&#xff0c;导致…

新闻速递|Altair 与佐治亚理工学院签署合作备忘录,携手推动航空航天领域创新

近日&#xff0c;全球计算智能领域领先企业 Altair 与佐治亚理工学院正式签署合作备忘录&#xff0c;旨在深化航空航天领域的技术创新合作。 根据协议&#xff0c;佐治亚理工学院的航空航天系统设计实验室 (ASDL) 将获得 Altair 的技术支持&#xff0c;运用仿真与数据分析 (DA)…

PLSQLDeveloper配置OracleInstantClient连接Oracle数据库

PL/SQLDeveloper配置Oracle Instant Client连接Oracle数据库 文章目录 PL/SQLDeveloper配置Oracle Instant Client连接Oracle数据库 1. Oracle Instant Client下载与配置1. Oracle Instant Client下载2. Oracle Instant Client解压配置1. 解压2. 配置 2. PL/SQL Developer下载、…