CentOS环境下使用GIT基于Nginx的私服搭建全过程
阅读本文前你必须预先装好CentOS并且已经安装和配置好Nginx了。
安装GIT私服套件
- 安装centos6.5-centos7.0
- 安装nginx
- yum install -y?git gitweb spawn-fcgi?fcgi-devel?fcgi
以上步骤执行完毕后,我们安装了:
- git服务
- Gitweb,因为git是一个光板,只支持 git clone gituser@hostname:/repositories这样的协议,对于eclipse开发者来说键入一堆的git 命令将会是一个恶梦,因此我们必须有一个图形化的界面并且让git支持http协议来支持我们的“远程协作 ”
- spawn-fcgi,这个东西特别有意思,因为nginx默认是不支持cgi的,而gitweb是用cgi写的,因此我们才安装fastcgi,而fastcgi又要通过spawn-fcgi来启动。。。因此。。。必须要装spawn-fcgi。
- fcgi-devel 和 fcgi都属于fastcgi运行时的lib库了
安装fcgiwrap
运行以下命令:
cd fcgiwrap
autoreconf -i
Configure
Make
make install
全部安装完后注意检查以下必要文件是否存在
- /etc/init.d 目录下有一个spawn-fcgi程序
- /usr/bin 目录下有一个spawn-fcgi程序
- /var/www/git目录下是gitweb所有的文件(网页版git)
- /etc/目录下有一个gitweb.conf文件
- /etc/sysconfig/目录下有一个spawn-fcgi文件
开始配置GIT私服-修改/etc/gitweb.conf文件
$projectroot = "/home/git/repositories";
@git_base_url_list= ("git://192.168.0.101", "http://192.168.0.101:81");
$git_temp = "/tmp";
$home_text = "indextext.html";
@stylesheets = ("gitweb.css");
$javascript = "gitweb.js";
@diff_opts = ();
$feature{pathinfo}{default} = [1];
$feature{'highlight'}{'default'} = [1];
- 所有的git的子项目:如“hello.git”全部位于/home/git/repositories目录下
- Git的常用两种协议对外暴露的URL:
- 一个使用的是git协议
- 一个使用的是http协议,并且它的端口号为81
- @feature是gitweb的属性,它告诉gitweb可以如:代码高亮,路径信息等,gitweb中还有许多功能强大的@feature
开始配置GIT私服-修改/etc/sysconfig/spawn-fcgi文件
# You must set some working options before the "spawn-fcgi" service will work.
# If SOCKET points to a file, then this file is cleaned up by the init script.
#
# See spawn-fcgi(1) for all possible options.
#
# Example :
#SOCKET=/var/run/php-fcgi.sock
#OPTIONS="-u apache -g apache -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi"
以上是原来文件的内容
# You must set some working options before the "spawn-fcgi" service will work.
# If SOCKET points to a file, then this file is cleaned up by the init script.
#
# See spawn-fcgi(1) for all possible options.
#
# Example :
#SOCKET=/var/run/php-fcgi.sock
#OPTIONS="-u apache -g apache -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi" FCGI_SOCKET=/var/run/fcgiwrap.socket
FCGI_PROGRAM=/usr/local/sbin/fcgiwrap
FCGI_USER=nginx
FCGI_GROUP=nginx
FCGI_EXTRA_OPTIONS="-M 0700"
OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"
启动spawn-fcgi
chkconfig --levels 2345 spawn-fcgi on
/etc/init.d/spawn-fcgi start
配置GIT服务器-初始化GIT服务
useradd gitpasswd git
su git #切换到git用户
mkdir repositories #会在/home/git目录下建立repositories目录 #开始建立git的root repositories
mkdir /home/git/.ssh
cd /home/git/.sshssh-keygen -t rsa
git gitosis-init < ~/.ssh/id_rsa.pub
以上做的事情就是:
1. 生成的gitosis-admin为Git的用户访问权限管理库,gitosis通过这个git库来管理所有git库的访问权限。
2. 通过执行初始化,该公钥的拥有者就能修改用于配置gitosis的那个特殊Git仓库了
因为git中的密钥就是通过gitosis这个特殊的repo来管理的。有了它我们就可以管理我们的GIT,包括建子项目什么的了。
配置GIT服务器-建子项目
su git
cd repositories
mkdir hello.git
cd hello.git
git --bare init
sudo chmod 777 /home/git/repositories/hello.git –R
让这个目录具有读写执行权限,你也可以把权限放的小一些,如chmod +x类似的,只要让这个目录可以有读、写、执行(git特殊的unpack, pack功能)权限就可以了。
配置GIT服务器-使用其它用户推拉hello.git
useradd ymk
passwd ymk
cd /home/ymk
mkdir git_repo
cd git_repo
mkdir hello.git
cd hello.git
git init
touch readme #新建一个readme文本文件
vi readme #随便在此文件中写点什么然后保存退出即可
git add . 代表把当前目录内所有东西进行远程推送
git commit -a -m “init helloworld“ #代表commit所有之前add过的东东,并且带上commit时的注释
git remote add origin git@192.168.1.101:/home/git/repositories/hello.git #建立远程GIT连接
git push origin master #正式推送
看到一堆推送日志后,并看到OK, SUCCESS字样后即代表push成功了。下面就是要让我们的GIT具有基于http协议进行推送的配置了。
配置GIT服务器-配置GITWEB + NGINX
server {
error_log logs/git.error.log;
access_log logs/git.access.log;
listen 81;
server_name 192.168.0.101;
index gitweb.cgi;
root /home/git;
location ~ \.(cgi|pl).*$ {
gzip off;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_param SCRIPT_FILENAME /home/git/gitweb.cgi;
fastcgi_param SCRIPT_NAME gitweb.cgi;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ ^.*\.git/objects/([0-9a-f]+/[0-9a-f]+|pack/pack-[0-9a-f]+.(pack|idx))$ {
root /home/git;
}
location ~ ^.*\.git/(HEAD|info/refs|objects/info/.*|git-(upload|receive)-pack)$ {
root /home/git;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param SCRIPT_FILENAME /usr/libexec/git-core/git-http-backend;
fastcgi_param GIT_HTTP_EXPORT_ALL true;
fastcgi_param GIT_PROJECT_ROOT /home/git/repositories;
fastcgi_param PATH_INFO $uri;
include fastcgi_params;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
}
try_files $uri @gitweb;
location @gitweb {
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_param SCRIPT_FILENAME /var/www/git/gitweb.cgi;
fastcgi_param PATH_INFO $uri;
fastcgi_param GITWEB_CONFIG /etc/gitweb.conf;
include fastcgi_params;
}
这么一大陀配置,你可以全部复制、粘贴,因为网上所有GIT WEB的配置,全部是错的,这一陀已经在本地GIT私服上运行起来了,少一行多一行都不行。下面就来做一些核心语句块的解释吧,注意红色加粗部分(我就喜欢粗)
server {
error_log logs/git.error.log;
access_log logs/git.access.log;
listen 81;
server_name 192.168.0.101;
index gitweb.cgi;
root /home/git;
我们把我们的gitweb的http服务申明在了81网段, gitweb的主页叫gitweb.cgi。
location ~ \.(cgi|pl).*$ {
gzip off;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_param SCRIPT_FILENAME /home/git/gitweb.cgi;
fastcgi_param SCRIPT_NAME gitweb.cgi;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ ^.*\.git/objects/([0-9a-f]+/[0-9a-f]+|pack/pack-[0-9a-f]+.(pack|idx))$ {
root /home/git;
}
这两段告诉了NG,凡是cgi的去哪里找.cgi文件,一定注意不要漏了include fastcgi_params;这一句,你也可以去/usr/local/nginx下看看,是否有这个文件。
location ~ ^.*\.git/(HEAD|info/refs|objects/info/.*|git-(upload|receive)-pack)$ {
root /home/git;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param SCRIPT_FILENAME /usr/libexec/git-core/git-http-backend;
fastcgi_param GIT_HTTP_EXPORT_ALL true;
fastcgi_param GIT_PROJECT_ROOT /home/git/repositories;
fastcgi_param PATH_INFO $uri;
include fastcgi_params;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
}
try_files $uri @gitweb;
location @gitweb {
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_param SCRIPT_FILENAME /var/www/git/gitweb.cgi;
fastcgi_param PATH_INFO $uri;
fastcgi_param GITWEB_CONFIG /etc/gitweb.conf;
include fastcgi_params;
}
以上两段做了这么两件事 :git通过http传输时会调用git-upload和git-receive或者是git-pack、git-unpack函数,因此它们会使用到一个git的类库,叫git-http-backend,因此只要url中出现git-pack、git-upload、git-receive之类的函数都会转到git-http-backend去处理。
try_files呢?即除了前面三段定义的客户浏览器端行为,其它未在定义中说明的任何请求全部走try_files段,相当于一个default的关键字。比如说: http://192.168.0.101:81/hello.git 就会被转到try_files段去。
因为在前面三段我们都只是申明客户的何种行为将要去哪找相关的类库,而只有一处就是对于git-upload, git-receive或者是git-pack/unpack的请求,我们会让NG交由git服务端的类库去处理,并未明确告诉*.git和其它的相关的请求由谁处理,因此这边来了一个try_files也是一种“简写”-当然,有更好的更精细的办法来做URL申明,可以自己去练习一下。
客户端通过ECLIPSE的JGIT连上GIT的远程服务后会发送一个git-upload指令。
同时服务端会回一个git-receive给到客户端做“接收”请求的准备,但是git服务默认对于这个receive的值为false,因此如果你没有做特殊处理后,在eclipse连上git后会发生一个can not find git-receive这样的错误,解决办法是:
su git
cd /home/git/repositories/hello.git
git config --file config http.receivepack true
这条命令发送后我们来看一下GIT服务器上的/home/git/repositories/hello.git/config这个文件的内容吧
cd /usr/local/nginx
./nginx –c /usr/local/nginx/nginx.conf
在客户端用浏览器打开http://192.168.0.101:81网址你会看到这样的画面
客户端使用eclipse访问远程GIT
这时可以commit了-commit在本地的repo里
commit后才是真正的向远程的push
给gitweb加上用户名密码
CentOS环境下使用GIT基于Nginx的私服搭建全过程的更多相关文章
- CentOS 环境下基于 Nginx uwsgi 搭建 Django 站点
因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,CentOS 环境下基于 Nginx uwsgi 搭建 Django 站点 以下 ...
- CentOS 7 下 JDK1.8+Maven+Nginx+MySql+Git+Redis环境安装
CentOS 7 下 JDK1.8+Maven+Nginx+MySql+Git+Redis环境安装 安装目录准备 新建data目录,用来放下载的软件 mkdir -p /data 切换到该data目录 ...
- centos环境下使用percona-xtrabackup对mysql5.6数据库innodb和myisam进行快速备份及恢复
centos环境下使用percona-xtrabackup对mysql5.6数据库innodb和myisam进行快速备份及恢复 有时候我们会碰到这样的业务场景: 1.将大的数据库恢复到本地进行业务测试 ...
- CentOS 7 下安装 LEMP 服务(nginx、MariaDB/MySQL 和 php)
原文 CentOS 7 下安装 LEMP 服务(nginx.MariaDB/MySQL 和 php) LEMP 组合包是一款日益流行的网站服务组合软件包,在许多生产环境中的核心网站服务上起着强有力的作 ...
- Linux/CentOS环境下如何安装和配置PhantomJS工作环境
PhantomJS 是一个基于WebKit的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, C ...
- Android 源码获取-----在Windows环境下通过Git得到Android源代码
在学习Android的过程中,深入其源代码研究对我们来说是非常重要的,这里将介绍如何通过在Windows环境下使用Git来得到我们的Android源代码. 1.首先确保你电脑上安装了Git,这个通过 ...
- 使用git推送代码到开源中国以及IDEA环境下使用git
使用git推送代码到开源中国以及IDEA环境下使用git 在学习Java的过程中我们会使用到git这个工具来将我们本周所编写的代码上传到开源中国进行代码托管,而在使用git的时候有很多的同学由于不会操 ...
- Centos环境下部署游戏服务器-软件安装
这篇文章主要介绍一下游戏服务器需要安装的软件和需要修改的配置.现介绍下项目,本项目服务器端是c++ + mysql组合,客户端是as写的,需要安装的服务为Mysql,Php,Apache, 以及一个n ...
- CentOS环境下R语言的安装和配置
最近在看数据统计和分析,想到了R语言,于是就着手在自己的CentOS环境下进行安装和配置.步骤如下: 1.前往R官网下载安装包. 2.解压压缩包:tar xvzf R-3.2.2.tar.gz 3.进 ...
随机推荐
- 非黑即白--谷歌OCR光学字符识别
# coding=utf-8 #非黑即白--谷歌OCR光学字符识别 # 颜色的世界里,非黑即白.computer表示深信不疑. # 今天研究一下OCR光学识别庞大领域中的众多分支里的一个开源项目的一个 ...
- bcrypt对密码加密的一些认识(学习笔记)
学习nodejs和mongoDB的时候,接触了用户注册和登录的一些知识. 1.关于增强用户密码的安全性 用户的密码肯定不能保存为明文,避免撞库攻击. 撞库攻击:撞库是一种针对数据库的攻击方式,方法是通 ...
- 有些ES6方法极简,但是性能不够好
So,也许你觉得ES6让你视野大开,但是并不是性能也能跟得上~ 首先,让我们先来一个简单的性能测试: 数组去重 es5写法: function delSame(arr){ var n = []; ; ...
- [机器学习Lesson4]多元线性回归
1. 多元线性回归定义 多元线性回归也被称为多元线性回归. 我们现在介绍方程的符号,我们可以有任意数量的输入变量. 这些多个特征的假设函数的多变量形式如下: hθ(x)=θ0+θ1x1+θ2x2+θ3 ...
- C#生成MD5码
/// <summary> /// 获取文件的MD5码 /// </summary> /// <param name="fileName">传入 ...
- java中的方法引用
引用静态方法:类名称::static 方法名称: 引用某个对象的方法:对象::普通方法: 引用特定类方法:特定类::方法 引用构造方法:类名称::new 范例:引用静态方法 package com.j ...
- [LeetCode] Maximum Average Subarray I 子数组的最大平均值
Given an array consisting of n integers, find the contiguous subarray of given length k that has the ...
- [LeetCode] Reverse String II 翻转字符串之二
Given a string and an integer k, you need to reverse the first k characters for every 2k characters ...
- 使用springcloud zuul构建接口网关
一 微服务网关背景及简介 不同的微服务一般有不同的网络地址,而外部的客户端可能需要调用多个服务的接口才能完成一个业务需求.比如一个电影购票的收集APP,可能回调用电影分类微服务,用户微服务,支付微服 ...
- ios开发-指纹识别
最近我们使用支付宝怎么软件的时候,发现可以使用指纹了,看起来是否的高大上.当时苹果推出了相关接口,让程序写起来很简单哈. 在iPhone5s的时候,苹果推出了指纹解锁.但是在ios8.0的时候苹果才推 ...