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