开始在本地部署自己的 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网站,就像是来到了自己的后花园,棒极了。

相关推荐
Juicedata33 分钟前
JuiceFS v1.3-Beta2:集成 Apache Ranger,实现更精细化的权限控制
运维·人工智能·ai
IT成长日记42 分钟前
05【Linux经典命令】Linux 用户管理全面指南:从基础到高级操作
linux·运维·服务器·用户管理·命令
小鱼小鱼.oO4 小时前
阿里云服务器安装nginx并配置前端资源路径(前后端部署到一台服务器并成功访问)
服务器·nginx·阿里云
资讯第一线5 小时前
Windows系统工具:WinToolsPlus 之 SQL Server Suspect/质疑/置疑/可疑/单用户等 修复
运维
惊起白鸽4505 小时前
LVS负载均衡
运维·负载均衡·lvs
伤不起bb7 小时前
NoSQL 之 Redis 配置与优化
linux·运维·数据库·redis·nosql
广东数字化转型7 小时前
nginx怎么使用nginx-rtmp-module模块实现直播间功能
linux·运维·nginx
love530love7 小时前
【笔记】在 MSYS2(MINGW64)中正确安装 Rust
运维·开发语言·人工智能·windows·笔记·python·rust
啵啵学习7 小时前
Linux 里 su 和 sudo 命令这两个有什么不一样?
linux·运维·服务器·单片机·ubuntu·centos·嵌入式
网硕互联的小客服8 小时前
如何利用Elastic Stack(ELK)进行安全日志分析
linux·服务器·网络·安全