在centos上部署gitea服务器
为了方便源代码管理,我向公司申请了个centos7虚拟机,在上面部署gitea,然后通过vpn,平时出差在外,也能访问,保证源代码的管理。
安装内容:
Gitea依赖于git运行,所以安装Gitea的话,服务器要先有git。Centos 7自带了一个git,但版本太老,需要先升级git,然后再安装Gitea。升级git的办法,是下载git源码编译、安装。由于Gitea的默认端口是3000,并不适合直接对外暴露 的问题,一般对外是80/443,如果绑定域名访问、HTTPS 加密和更强大的静态资源处理能力,这些Gitea更加无法应对,因此还要安装nginx。
以下是详细介绍。这是根据操作历史(history)整理的,可能有疏漏,先记录。有文档总比没有强。
1. 系统环境准备
1.1 更换 Yum 源 (阿里云)
为了加快下载速度,替换默认的 CentOS 源为阿里云镜像源。
sudo rm /etc/yum.repos.d/CentOS-Base.repo
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum clean all
sudo yum makecache
sudo yum update -y
1.2 安装基础依赖
安装 EPEL 源, CentOS 系统中极其重要的一个软件源扩展包,利于安装nginx。
sudo yum install -y epel-release
2. 安装 Nginx
sudo yum install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
3. 升级git
centos7自带的git太旧,也许由于centos7早已停止维护的缘故,即使下载安装git,得到的也是很旧的版本,根本满足不了gitea的运行要求。因此需要下载git源码进行编译、安装。否则安装了gitea也无法运行:

3.1下载源码
版本号可根据需要调整
curl -LO https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.39.5.tar.xz
tar -xf git-2.39.5.tar.xz
cd git-2.39.5
3.2编译安装
make configure
./configure --prefix=/usr/local
make all doc info
sudo make install install-doc install-html install-info
3.3替换系统 Git
备份旧版本
sudo mv /usr/bin/git /usr/bin/git.bak
创建软链接指向新版本
sudo ln -s /usr/local/bin/git /usr/bin/git
验证版本
git --version
输出应为:git version 2.39.5
4. 部署 Gitea
4.1安装前准备
1)创建专用 git 用户
sudo useradd --system \ --shell /bin/bash \ --comment 'Git User' \ --create-home \ --user-group git
sudo passwd git
sudo usermod -s /usr/bin/git-shell git
2)创建 Gitea 数据目录
sudo mkdir -p /var/lib/gitea/{custom,data,log}
sudo chown -R git:git /var/lib/gitea
sudo chmod -R 750 /var/lib/gitea
3)创建配置目录
sudo mkdir /etc/gitea
sudo chown root:git /etc/gitea
sudo chmod 770 /etc/gitea
4) 防火墙配置
开放端口
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-port=3000/tcp # 如果直接访问Gitea
sudo firewall-cmd --reload
4.2 下载
cd /tmp
下载 Gitea (示例版本 1.21.6)
wget https://dl.gitea.io/gitea/1.21.6/gitea-1.21.6-linux-amd64
移动至系统路径并赋予执行权限
sudo mv gitea-1.21.6-linux-amd64 /usr/local/bin/gitea
sudo chmod +x /usr/local/bin/gitea
验证安装
/usr/local/bin/gitea --version
4.3 启动Gitea
创建服务文件 /etc/systemd/system/gitea.service (需使用 sudo vi 编辑)。
配置完成后重载并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable gitea
sudo systemctl start gitea
sudo systemctl status gitea
4.4 配置
gitea是有图形化的安装界面的。但我拿到的服务器,只能通过ssh远程访问,管理员也只开放了22和80,443 三个端口。由于gitea的默认对外端口是3000,如果去找管理员开通3000端口,比较耗时。这时可以将本地的端口(比如3001)映射到服务器的22端口,即监听本地3001端口,凡任何发送到本地 3001 端口的数据,都会通过 SSH 通道,自动转发到服务器。这样在本地浏览器访问http://localhost:3001,就能够访问服务器上的gitea配置界面。
在本地的命令行窗口运行:
ssh -L 3001:localhost:3000 coder@服务器IP
然后在本地浏览器上输入:http://localhost:3001。
上述映射不是永久的,把命令行窗口关闭以后,映射即消失。
4.5 初始化与权限修复
Gitea 首次运行后会生成配置文件,需确保 git 用户有权限访问。
检查配置目录
ls /etc/gitea/
修正权限 (关键步骤,防止启动失败)

sudo chown -R git:git /etc/gitea
sudo chmod -R 750 /etc/gitea
如果 app.ini 缺失或需要重置,可手动生成默认配置
sudo -u git /usr/local/bin/gitea dump-config > /etc/gitea/app.ini
重启服务使配置生效
sudo systemctl restart gitea
5. 配置 Nginx 反向代理
为了通过 80 端口访问 Gitea,配置 Nginx 反向代理。HTTPS未配置。
5.1 配置 Nginx
server {
listen 80;
server_name your_domain_or_ip; # 替换为实际域名或IP
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
注:若需 HTTPS,需在配置中监听 443 端口并引用上述生成的证书文件。
5.2 解决 SELinux 权限问题
如果 Nginx 无法连接后端 3000 端口,需开启 SELinux 允许网络连接:
sudo setsebool -P httpd_can_network_connect 1
5.3 验证并重载 Nginx
语法检查
sudo nginx -t
重载配置
sudo systemctl reload nginx
测试访问
curl http://127.0.0.1
6. 确保 Git 用户 Shell 正确
git 用户必须有合法的 Shell 才能登录执行命令。
查看 git 用户 shell
grep "^git:" /etc/passwd
如果不是 /bin/bash 或 /bin/sh,修改它
sudo usermod -s /bin/bash git
如果git用户的shell不行,在客户端无法使用ssh方式来读取或提交资料。会报类似如下的错。
E:\花果山\2026\document>ssh -T git@服务器IP
fatal: unrecognized command '/usr/local/bin/gitea --config=/etc/gitea/app.ini serv key-4'
7. git的http与ssh方式
我们在读取或提交代码的时候,可以通过两种方式,http或ssh方式。有什么不一样吗?
http,http://162.17.80.72/hdw/sz2026-document.git
ssh,git@162.17.80.72:hdw/sz2026-document.git
简而言之,
http首次访问,客户端需要输入账号密码;传输资料有大小限制,超过1G的最好不考虑;
SSH方式,需要用户先在服务器登记自己的SSH公钥,首次访问无须输入账号密码,系统凭公钥自动匹配到账户;传输资料没有大小限制。所以,应该首选SSH。
浙公网安备 33010602011771号