115 lines
2.5 KiB
Markdown
115 lines
2.5 KiB
Markdown
---
|
||
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
|
||

|
||
|
||
# 安装 spawn-fcgi
|
||
- 参考 https://github.com/lighttpd/spawn-fcgi
|
||

|
||
|
||
# 编辑 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 等操作。
|
||
|