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

0.简介

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

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

文章目录

  • 0.简介
  • [1. 准备工作](#1. 准备工作)
  • [2. 安装与初始化配置](#2. 安装与初始化配置)
  • [3. 有效地组织仓库](#3. 有效地组织仓库)
    • [3.1 gitblit和Gitea在仓库路径上的一些区别](#3.1 gitblit和Gitea在仓库路径上的一些区别)
    • [3.2 gitblit 和 gitea的主要区别](#3.2 gitblit 和 gitea的主要区别)
  • [4. 关于版本控制的好处](#4. 关于版本控制的好处)
  • [5. 最重要的事情](#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

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

注意:

  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相关的配置选项如下:

txt 复制代码
### 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,会看到如下两行:

bash 复制代码
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端口都已经启动。

dos 复制代码
netstat -na
  TCP    0.0.0.0:3000           0.0.0.0:0              LISTENING
  TCP    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. 登入

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

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

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网站,就像是来到了自己的后花园,棒极了。

相关推荐
七夜zippoe6 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥6 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
Fcy6488 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满8 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠8 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
主机哥哥8 小时前
阿里云OpenClaw部署全攻略,五种方案助你快速部署!
服务器·阿里云·负载均衡
Harvey9038 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技9 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀10 小时前
Linux环境变量
linux·运维·服务器
zzzsde10 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器