在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。

posted on 2026-02-26 18:32  左直拳  阅读(0)  评论(0)    收藏  举报  来源

导航