在免费云服务器上搭建 Gitea 私有 Git 仓库实践 一、背景团队协作开发中代码托管是基础环节。除了 GitHub、Gitee 等公共平台有时需要在私有服务器上部署一个轻量级的 Git 仓库管理服务用于存放内部项目或学习练手。本文记录在阿贝云免费云服务器上搭建 Gitea 的完整过程包括数据库配置、Nginx 反向代理和 SSH 推送通道。二、环境准备Gitea 对系统资源要求不高适合在免费云服务器上运行。本次使用的环境服务器阿贝云免费云服务器操作系统Ubuntu 22.04 LTS通过后台重装系统功能安装数据库SQLite轻量场景足够无需额外安装 MySQL反代Nginx先更新系统并安装依赖apt update apt install git nginx -y三、下载并安装 Gitea创建 Gitea 运行用户和目录adduser --system --group --disabled-password gitmkdir -p /var/lib/gitea/{custom,data,log}chown -R git:git /var/lib/gitea chmod -R 750 /var/lib/gitea下载 Gitea 二进制文件wget -O /usr/local/bin/gitea https://dl.gitea.com/gitea/1.21/gitea-1.21-linux-amd64chmod x /usr/local/bin/gitea四、配置 Systemd 服务创建 systemd 服务文件让 Gitea 开机自启并以后台服务方式运行vim /etc/systemd/system/gitea.service写入以下内容[Unit]启动服务并设置开机自启systemctl daemon-reload systemctl enable --now gitea此时 Gitea 默认监听 3000 端口可通过 http://服务器IP:3000 访问安装向导。五、配置 Nginx 反向代理为了通过 80 端口统一访问配置 Nginx 反向代理到 Gitea 的 3000 端口vim /etc/nginx/sites-available/giteaserver {ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/nginx -t systemctl reload nginx注意绑定域名访问需要在阿贝云后台先提交域名白名单审核通过后域名解析才能正常指向服务器。六、配置 SSH 协议推送代码Gitea 默认使用 22 端口处理 SSH 推送但服务器自身的 SSH 也占用 22 端口。需要将 Gitea 的 SSH 端口改为 2222在 Gitea 安装向导或配置文件 /etc/gitea/app.ini 中设置[server]修改后重启 Gitea 服务systemctl restart gitea本地 clone 仓库时指定端口git clone ssh://git服务器IP:2222/user/repo.git七、使用感受整套Gitea 私有仓库搭建下来对阿贝云免费云服务器的几点实际体验重装系统灵活开始用了默认系统后来发现 Git 版本太老直接在后台一键重装成 Ubuntu 22.04几分钟搞定不用纠结镜像源问题。VNC 排障实用配置 SSH 端口时一度把 sshd_config 改错导致无法远程登录通过后台 VNC 连接进去恢复了配置避免了重新装系统的麻烦。快照保驾护航Gitea 配好后打了一个快照后面改 Nginx 配置搞坏了环境直接用快照恢复到正常状态仓库数据也没丢。流量统计可观测Git 推送和拉取会产生流量后台的流量统计图表可以直观看到每天的数据变化判断是否有异常大流量拉取。CPU 占用可控Gitea 本身比较轻量平时空闲时 CPU 占用很低后台的 CPU 使用统计图表也印证了这一点只有在 git push 压缩仓库时才会有短暂峰值。免费虚拟主机不适合此场景顺便对比了一下阿贝云的免费虚拟主机虚拟主机无法安装自定义程序、没有 SSH 权限所以 Gitea 这类需要自建服务的项目只能用云服务器。整体来看Gitea 在免费云服务器上运行稳定适合个人或小团队做私有代码托管。阿贝云后台的重装系统、VNC 连接、快照管理和流量/CPU 统计这几个功能在搭建和运维过程中都用到了覆盖了常见排障场景。需要注意免费产品资源有限仓库体积大或并发推送多时建议评估性能。参考资料[1] 阿贝云官网https://www.abeiyun.com

相关新闻

最新新闻

VSCode Python开发环境配置全攻略:从虚拟环境到依赖管理

VSCode Python开发环境配置全攻略:从虚拟环境到依赖管理

1. 从零到一:为什么你的VSCode Python环境总是“差点意思”? 每次看到新手在VSCode里折腾Python环境,装完解释器、配完路径,结果运行代码时还是弹出各种“Command not found”或者“No module named xxx”,我就想起自…

2026/8/16 3:28:43
前端本地存储容量限制解析:5MB存满后的处理策略与替代方案

前端本地存储容量限制解析:5MB存满后的处理策略与替代方案

1. 存储机制的本质与限制探源 聊到前端本地存储, localStorage 和 sessionStorage 是绕不开的两个老朋友。很多开发者,包括我自己在早期,都把它们当作一个“无限”的、简单的键值对“口袋”来用,存个用户偏好、表单草稿或者登…

2026/8/16 3:28:43
Arduino三模智能小车:红外传感器融合与状态机决策实践

Arduino三模智能小车:红外传感器融合与状态机决策实践

如果你正在为Arduino期末项目发愁,想做一个既有技术含量、又能让老师眼前一亮的作品,那么“红外三模智能切换小车”绝对是一个值得深入研究的选题。它听起来复杂,但核心思路非常清晰:用一块Arduino板,结合红外遥控、红…

2026/8/16 3:28:43
时空可组合性编程:构建模块化实时系统的核心范式

时空可组合性编程:构建模块化实时系统的核心范式

在实际软件开发中,我们常常面临一个困境:如何将不同时间、不同空间维度的计算逻辑有效地组合起来,构建出复杂且健壮的系统。例如,一个实时数据处理管道,需要组合来自不同数据源(空间维度)的流&a…

2026/8/16 3:28:43
SQLite全文搜索FTS5实战:从倒排索引到中文分词应用

SQLite全文搜索FTS5实战:从倒排索引到中文分词应用

1. 项目概述:为什么需要SQLite全文搜索?如果你用过SQLite,大概率只把它当作一个轻量级的、文件式的数据存储工具,用它来存点配置、缓存或者应用内的结构化数据。标准的SELECT ... WHERE column LIKE %keyword%查询,对付…

2026/8/16 3:28:43
C++内存序深度解析:从硬件原理到多线程编程实战

C++内存序深度解析:从硬件原理到多线程编程实战

1. 内存序到底是什么?为什么C程序员必须懂它?如果你写过C多线程程序,并且用过std::atomic,那你大概率见过memory_order_relaxed、memory_order_acquire这些枚举值。第一次看到它们时,你是不是和我当初一样,…

2026/8/16 3:23:43