在 CentOS 系统中部署 GitWeb 仓库可视化服务
GitWeb 是 Git 官方提供的一个基于 Perl 的 CGI 脚本,用于在 Web 浏览器中提供 Git 仓库的只读可视化界面。本文将详细介绍在 CentOS 系统中通过包管理器和源码编译两种方式部署 GitWeb,并结合 Apache HTTP 服务器进行配置。
环境准备
在开始之前,请确保服务器已安装 Git 基础环境,并且 Apache (httpd) 服务已正确安装并运行。本文以 CentOS 7 为例进行演示。
方式一:通过 YUM 包管理器部署
CentOS 的官方软件源中直接提供了 gitweb 软件包,这是最快捷的部署方式。
1. 安装与基础配置
使用 YUM 安装 GitWeb,并编辑其主配置文件以指定仓库根目录:
# 安装 gitweb
sudo yum install -y gitweb
# 编辑配置文件
sudo vi /etc/gitweb.conf
在 /etc/gitweb.conf 中,修改或添加以下核心参数:
# 指定 Git 仓库的存放根目录
$projectroot = "/data/git-repositories";
# 临时文件目录
$git_temp = "/var/tmp";
# 指定 git-http-backend 的路径以支持 HTTP 智能协议
$git_http_backend = "/usr/libexec/git-core/git-http-backend";
2. 配置 Apache 虚拟主机
为了让 Web 服务器能够正确解析 CGI 脚本,需要在 Apache 中配置虚拟主机。创建一个新的配置文件:
sudo vi /etc/httpd/conf.d/gitweb.conf
写入以下配置内容(这里采用 Apache 2.4 的访问控制语法,并监听 8080 端口):
Listen 8080
<VirtualHost *:8080>
ServerName git.example.com
DocumentRoot /usr/share/gitweb
<Directory /usr/share/gitweb>
Options +ExecCGI +FollowSymLinks
AllowOverride All
# Apache 2.4 访问控制语法
Require all granted
# 识别 CGI 脚本
AddHandler cgi-script .cgi
DirectoryIndex gitweb.cgi
</Directory>
</VirtualHost>
保存后重启 Apache 服务使配置生效:
sudo systemctl restart httpd
方式二:通过源码编译部署
如果需要自定义 GitWeb 的行为或使用最新版本的特性,可以通过编译 Git 源码来生成 GitWeb 脚本。
1. 获取源码并编译
克隆 Git 官方仓库,并进入目录执行编译命令。在编译时可以通过环境变量指定仓库根目录:
# 获取源码
git clone https://github.com/git/git.git /opt/git-source
cd /opt/git-source
# 编译 gitweb,指定项目根目录和安装前缀
make GITWEB_PROJECTROOT="/data/git-repositories" prefix=/usr/local gitweb
# 将编译生成的 gitweb 目录复制到 Web 根目录
sudo cp -R gitweb /var/www/html/gitweb
2. 配置 Apache 虚拟主机
由于源码编译的文件输出到了自定义目录,Apache 的虚拟主机配置也需要相应调整。编辑 /etc/httpd/conf.d/gitweb-source.conf:
Listen 9090
<VirtualHost *:9090>
ServerName git-source.example.com
DocumentRoot /var/www/html/gitweb
<Directory /var/www/html/gitweb>
Options +ExecCGI +FollowSymLinks
AllowOverride All
Require all granted
AddHandler cgi-script .cgi
DirectoryIndex gitweb.cgi
# 配置静态资源别名(优化加载速度)
Alias /static /var/www/html/gitweb/static
</Directory>
</VirtualHost>
同样,重启 HTTPD 服务以应用更改:
sudo systemctl restart httpd
权限与 SELinux 注意事项
在 CentOS 环境下,如果启用了 SELinux,Apache 可能无法读取仓库目录或执行 CGI 脚本。需要调整安全上下文:
# 允许 Apache 执行 CGI
sudo setsebool -P httpd_execmem 1
# 为仓库目录设置正确的 SELinux 上下文
sudo semanage fcontext -a -t httpd_sys_content_t "/data/git-repositories(/.*)?"
sudo restorecon -Rv /data/git-repositories
此外,确保运行 Apache 的用户(通常为 apache)对仓库目录具有读取权限:
sudo chown -R apache:apache /data/git-repositories
sudo chmod -R 755 /data/git-repositories