www.colben.cn/content/post/git-http.md
2021-11-14 14:32:08 +08:00

115 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "搭建 Git http 服务"
date: 2019-10-30T17:35:56+08:00
lastmod: 2019-10-30T17:35:56+08:00
tags: ["git", "nginx", "http", "fcgiwrap", "spawn-fcgi"]
categories: ["dev/ops"]
---
# 环境
- Centos/Redhat 6
- 安装好 git
# 安装 fcgiwrap
- 参考 https://github.com/gnosek/fcgiwrap
![](/img/150546_2jE9_2298475.png)
# 安装 spawn-fcgi
- 参考 https://github.com/lighttpd/spawn-fcgi
![](/img/150655_jGEp_2298475.png)
# 编辑 spawn-fcgi/sbin/fcgiwrap 开机启动脚本:
```bash
#! /bin/sh
DESC="fcgiwrap daemon"
DEAMON=/opt/spawn-fcgi/bin/spawn-fcgi
PIDFILE=/tmp/spawn-fcgi.pid
# fcgiwrap socket
FCGI_SOCKET=/tmp/fcgiwrap.socket
# fcgiwrap 可执行文件
FCGI_PROGRAM=/opt/fcgiwrap/sbin/fcgiwrap
# fcgiwrap 执行的用户和用户组
FCGI_USER=nobody
FCGI_GROUP=nobody
FCGI_EXTRA_OPTIONS="-M 0770"
OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P $PIDFILE -- $FCGI_PROGRAM"
do_start() {
$DEAMON $OPTIONS || echo -n "$DESC already running"
}
do_stop() {
kill -INT `cat $PIDFILE` || echo -n "$DESC not running"
}
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
do_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
do_stop
echo "."
;;
restart)
echo -n "Restarting $DESC: $NAME"
do_stop
do_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
exit 3
;;
esac
exit 0
```
# 启动 fcgiwrap
```bash
chmod 0755 /opt/spawn-fcgi/sbin/fcgiwrap
/opt/spawn-fcgi/sbin/fcgiwrap start
```
# 安装 nginx
- 参考 http://nginx.org/en/download.html启动 nginx
# 在 nginx 前端目录 html 下创建 git 仓库目录 nginx/html/git/
```bash
mkdir /opt/nginx/html/git/
chown nobody.nobody /opt/nginx/html/git/ -R
```
# 配置 nginx 的 git 服务
```nginx
# 在 server section 中添加 git
location ~ /git(/.*) {
gzip off;
fastcgi_pass unix:/tmp/fcgiwrap.socket;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/libexec/git-core/git-http-backend;
fastcgi_param GIT_HTTP_EXPORT_ALL "";
fastcgi_param GIT_PROJECT_ROOT /opt/nginx/html/git;
fastcgi_param PATH_INFO $1;
fastcgi_param REMOTE_USER $remote_user;
client_max_body_size 500m;
}
```
# 重新加载配置文件
```bash
/opt/nginx/sbin/nginx -s reload
```
# 测试在仓库目录下新建一个空repo
```bash
cd /opt/nginx/html/git/
git init --bare test-repo
chown nobody.nobody test-repo -R
cd test-repo
git config http.reveivepack true
```
# 完成
- 在另一台服务器中可以顺利的进行 clone、push 及 pull 等操作。