Gitea 服务器搭建:如何在公司服务器搭建 Gitea 环境实现代码仓库私有化托管

Gitea 服务器搭建:如何在公司服务器搭建 Gitea 环境实现代码仓库私有化托管

Gitea 服务器搭建:如何在公司服务器搭建 Gitea 环境实现代码仓库私有化托管

在当今软件开发高速迭代的时代,企业对「私有化代码仓库托管」的需求愈发迫切。通过在公司服务器部署 Gitea,不仅可以实现“Git 私有化托管”与“代码安全隔离”,还能够结合 CI/CD 流水线快速交付,彻底摆脱公有云成本与权限风控的双重烦恼。本教程将手把手教您在 Ubuntu 20.04 环境下,完成从服务器准备、依赖安装到域名配置、SSL 加密、自动化运维的一整套 “Gitea 服务器搭建” 方案,确保您能够快速上手 “Gitea 安装教程” 并实现“企业级 Git 自托管”最佳实践。
本文详细介绍在公司服务器上从零开始部署 Gitea 服务的全流程。全程使用 Ubuntu 20.04 LTS 作为示例操作系统,其他 Linux 发行版亦可参照操作。

作者✍️
猫头虎微信号:Libin9iOak
公众号:猫头虎技术团队
万粉变现经纪人:ZEEKLOGWF

Gitea 服务器搭建:如何在公司服务器搭建 Gitea 环境实现代码仓库私有化托管

目录

  1. 前置准备
  2. 安装依赖
  3. 创建 Gitea 系统用户与目录
  4. 下载与安装 Gitea 二进制
  5. 配置数据库
  6. 配置 Gitea 应用
  7. 设置 systemd 服务
  8. 防火墙与域名、SSL 配置
  9. 首次启动与初始化
  10. 安全加固与备份
  11. 常见问题与排查

前置准备

  • 一台干净的 Ubuntu 20.04 LTS 服务器,至少 2 GB 内存、20 GB 磁盘空间。
  • 拥有 sudo 权限的用户。
  • 已绑定并解析好域名(如 git.example.com)指向本机 IP。
  • 公司网络允许对 HTTP(80)和 HTTPS(443)端口访问。1

安装依赖

    • 推荐使用 MariaDB(也可选择 MySQL、PostgreSQL)。

安装 certbot(用于后续 SSL):

sudoaptinstall-y certbot 

安装数据库:

sudoaptinstall-y mariadb-server sudo systemctl enable--now mariadb 

更新系统包列表并安装基础工具:

sudoapt update sudoaptinstall-ygitcurlwgetvim ufw 

创建 Gitea 系统用户与目录

为了安全隔离,建议单独为 Gitea 创建系统用户:

sudo adduser \--system\--shell /bin/bash \--gecos'Gitea git user'\--group\ --disabled-password \--home /home/git \git

创建存放 Git 仓库及配置的目录,并赋予权限:

sudomkdir-p /var/lib/gitea/{custom,data,log}sudochown-R git:git /var/lib/gitea sudochmod-R750 /var/lib/gitea sudomkdir /etc/gitea sudochown root:git /etc/gitea sudochmod770 /etc/gitea 

下载与安装 Gitea 二进制

验证:

gitea --version

若能正确输出版本号,则安装成功。

安装至系统可执行路径:

sudomv gitea /usr/local/bin/gitea sudochmod +x /usr/local/bin/gitea 

拉取最新版 Gitea(参考 官方下载页面):

wget-O gitea https://dl.gitea.io/gitea/1.20.2/gitea-1.20.2-linux-amd64 

切换至临时目录:

cd /tmp 

配置数据库

  1. 记录下数据库名称、用户名与密码,后续 Gitea 安装时需要使用。

创建数据库与专用用户:

CREATEDATABASE gitea CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci;CREATEUSER'gitea'@'localhost' IDENTIFIED BY'你的安全密码';GRANTALLPRIVILEGESON gitea.*TO'gitea'@'localhost'; FLUSH PRIVILEGES;EXIT;

登录 MariaDB:

sudo mysql 

配置 Gitea 应用

/etc/gitea/app.ini 中添加基础配置:

[database] DB_TYPE = mysql HOST = 127.0.0.1:3306 NAME = gitea USER = gitea PASSWD = 你的安全密码 SSL_MODE = disable [server] DOMAIN = git.example.com HTTP_PORT = 3000 ROOT_URL = https://git.example.com/ DISABLE_SSH = false SSH_PORT = 22 LFS_START_SERVER = true LFS_CONTENT_PATH = /var/lib/gitea/data/lfs [security] INSTALL_LOCK = true SECRET_KEY = 一个随机长密钥,使用 `openssl rand -hex 16` 生成 [log] MODE = file LEVEL = Info ROOT_PATH = /var/lib/gitea/log 

确保文件属主为 root:git 并且权限为 660

sudochown root:git /etc/gitea/app.ini sudochmod660 /etc/gitea/app.ini 

设置 systemd 服务

创建 /etc/systemd/system/gitea.service

[Unit] Description=Gitea (Git with a cup of tea) After=syslog.target After=network.target After=mariadb.service [Service] User=git Group=git WorkingDirectory=/var/lib/gitea/ ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini Restart=always Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea [Install] WantedBy=multi-user.target 

使能并启动服务:

sudo systemctl daemon-reload sudo systemctl enable--now gitea sudo systemctl status gitea 

防火墙与域名、SSL 配置

在 Nginx 或 Apache 中反向代理 Gitea,并配置 SSL。例如,Nginx 配置片段:

server { listen 80; server_name git.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name git.example.com; ssl_certificate /etc/letsencrypt/live/git.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/git.example.com/privkey.pem; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; } } 

使用 certbot 获取并自动续期免费 SSL:

sudo certbot certonly --standalone-d git.example.com 

开启 UFW 并允许常用端口:

sudo ufw allow OpenSSH sudo ufw allow 3000/tcp sudo ufw enable

首次启动与初始化

  1. 在浏览器中访问 https://git.example.com
  2. 在安装向导中填写:
    • Database Settings:与前面创建的数据库信息一致。
    • Application General Settings:站点标题、管理员账号(如 admin )、邮箱、密码。
    • Server and SSH Settings:确保 SSH 模块开启,SSH 端口为 22。
  3. 点击“Install Gitea”完成初始化。

安全加固与备份

  1. 更换默认端口:将 SSH 服务端口改为非 22 端口,修改 /etc/ssh/sshd_config 并重启。
  2. 定期备份
    • 考虑使用 cron 自动化。

仓库文件:

tar czvf /backup/gitea-repos-$(date +%F).tar.gz /var/lib/gitea/data 

数据库:

mysqldump -u gitea -p gitea > /backup/gitea-db-$(date +%F).sql 

开启 Fail2Ban:安装并配置防爆破:

sudoaptinstall-y fail2ban 

常见问题与排查

  • Gitea 无法启动?
    • 查看日志:sudo journalctl -u gitea -f
    • 检查 app.ini 配置文件格式与权限。
  • SSH 克隆报错 Permission denied
    • 确认服务器 SSH 配置允许 git 用户登录。
    • 检查 git 用户家目录 .ssh/authorized_keys 是否存在并正确。
  • SSL 证书续期失败?
    • 手动执行:sudo certbot renew --dry-run,根据报错信息排查。

  1. 作者✍️ 猫头虎微信号:Libin9iOak; 公众号:猫头虎技术团队; 万粉变现经纪人:ZEEKLOGWF ↩︎

Read more

Java前缀和算法题目练习

Java前缀和算法题目练习

前缀和 * 前缀和 * 二维前缀和 * 寻找数组的中心下标 * 除自身以外数组的乘积 * 和为k的子数组 * 和可被K整除的子数组 * 连续数组 * 矩阵区域和 前缀和 题目解析:在一个数组中查询起对应区间的和,会查询多次 算法思想:暴力解法:每次查询都进行一次遍历,时间复杂度O(n*m) 前缀和解法:新定义一个数组,每一个下标存放的值是要查询数组的前下标对应值的和,这样我们在访问起某一个区间的时候,直接利用这个数组就非常快速 importjava.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息publicclassMain{publicstaticvoidmain(String[] args){Scanner in =newScanner(System.in);int n = in.nextInt();int m = in.nextInt();int[

By Ne0inhk
Flutter 组件 ews 的适配 鸿蒙Harmony 实战 - 驾驭企业级 Exchange Web Services 协议、实现鸿蒙端政企办公同步与高安通讯隔离方案

Flutter 组件 ews 的适配 鸿蒙Harmony 实战 - 驾驭企业级 Exchange Web Services 协议、实现鸿蒙端政企办公同步与高安通讯隔离方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 ews 的适配 鸿蒙Harmony 实战 - 驾驭企业级 Exchange Web Services 协议、实现鸿蒙端政企办公同步与高安通讯隔离方案 前言 在鸿蒙(OpenHarmony)生态进军政企办公领域的过程中,与现有企业信息化基础设施的深度集成是一道必答题。即便是在全连接、分布式的今天,微软的 Exchange 服务器依然是全球无数大厂与政务系统处理邮件、日历同步的核心底座。 对于习惯了简单 http.get 的移动开发者来说,Exchange Web Services(EWS)协议由于其复杂的 SOAP 封装、繁琐的 XML 数据结构以及极其严苛的身份认证机制,往往是一块难啃的“骨头”。 ews 库为 Dart 提供了成熟的、类型安全的

By Ne0inhk
【看海的算法日记✨优选篇✨】第三回:二分之妙,寻径中道

【看海的算法日记✨优选篇✨】第三回:二分之妙,寻径中道

🎬 个人主页:谁在夜里看海. 📖 个人专栏:《C++系列》《Linux系列》《算法系列》 ⛰️ 一念既出,万山无阻 目录 📖一、算法思想 细节问题 📚左右临界 📚中点选择  📚循环条件 📖二、具体运用  1.⼆分查找 算法思路 算法流程 代码 2.查找元素的第⼀个和最后⼀个位置 算法思路 算法流程 代码 3.x的平⽅根 算法思路 代码 4.⼭峰数组的峰顶 算法思路 算法流程 代码 5.点名 算法思路 代码 📖三、总结 📖一、算法思想 二分算法是一种经典的高效查询方法,它的核心思想是通过不断将查找范围缩小为一半,

By Ne0inhk
【强化学习】双延迟深度确定性策略梯度算法(TD3)详解

【强化学习】双延迟深度确定性策略梯度算法(TD3)详解

📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在👉强化学习专栏:        【强化学习】- 【单智能体强化学习】(11)---《双延迟深度确定性策略梯度算法(TD3)详解》 双延迟深度确定性策略梯度算法(TD3)详解 目录 一、TD3算法的背景 二、TD3的背景 1.TD3的理论背景 2.DDPG的局限性 三、TD3算法的核心思想 1.双Critic网络(Twin Critics) 2.延迟更新(Delayed Policy Updates) 3.目标策略平滑(Target Policy Smoothing) 四、TD3算法详细讲解 1.

By Ne0inhk