<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>DevOps技术分享 &#187; Git</title>
	<atom:link href="http://www.showerlee.com/archives/tag/git/feed" rel="self" type="application/rss+xml" />
	<link>http://www.showerlee.com</link>
	<description>与你共同学习运维开发</description>
	<lastBuildDate>Mon, 19 Oct 2020 05:51:41 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.6</generator>
		<item>
		<title>Windows下TortoiseGit over Putty or Openssh提交项目到GitLab</title>
		<link>http://www.showerlee.com/archives/1300</link>
		<comments>http://www.showerlee.com/archives/1300#comments</comments>
		<pubDate>Sat, 30 Aug 2014 05:45:28 +0000</pubDate>
		<dc:creator>showerlee</dc:creator>
				<category><![CDATA[Git]]></category>

		<guid isPermaLink="false">http://www.showerlee.com/?p=1300</guid>
		<description><![CDATA[Gitlab默认的配置推荐使用shell命令行与server端进行交互,作为搞SCM的表示无压力,但是作为开发 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>
	<a href="http://www.showerlee.com/archives/tag/git" title="查看Git中的全部文章" class="tag_link">Git</a>lab默认的配置推荐使用shell命令行与server端进行交互,作为搞SCM的表示无压力,但是作为开发人员还是比较适应windows的GUI图形管理,方便他们将注意力集中到代码编写上,所以今天刚好接着昨天给大家介绍一下使用windows下的git client工具实现将本地代码提交到远程服务器.
</p>
<p>
	
</p>
<p>
	<span>解决方案：</span>
</p>
<p>
	
</p>
<p>
	环境部署
</p>
<p>
	操作系统 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Windows7 x64 Sp1
</p>
<p>
	Tortoise<a href="http://www.showerlee.com/archives/tag/git" title="查看Git中的全部文章" class="tag_link">Git</a> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Tortoise<a href="http://www.showerlee.com/archives/tag/git" title="查看Git中的全部文章" class="tag_link">Git</a>-1.8.11.0-64bit.msi
</p>
<p>
	<a href="http://www.showerlee.com/archives/tag/git" title="查看Git中的全部文章" class="tag_link">Git</a> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.showerlee.com/archives/tag/git" title="查看Git中的全部文章" class="tag_link">Git</a>-1.9.4-preview20140815.exe
</p>
<p>
	Putty &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PuTTY 0.63
</p>
<p>
	OpenSSH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; owned by Git&nbsp;
</p>
<p>
	下载地址: &nbsp;<a href="http://yunpan.cn/QaaLGsd23BsWL" rel="nofollow">http://yunpan.cn/QaaLGsd23BsWL</a> (访问密码 96d7)
</p>
<p>
	<span style="color:#E53333;">注: 此处下载地址中的安装包都为64位版本,32位请另行下载.</span>
</p>
<p>
	
</p>
<p>
	<strong>一.部署前的准备工作</strong>
</p>
<p>
	安装TortoiseGit,Git,Putty,默认下一步安装即可,其中Git为Git client环境安装包,确保windows包含git环境.
</p>
<p>
	
</p>
<p>
	<strong>二.配置PuTTY authentication agent</strong>
</p>
<p>
	在安装TortoiseGit后,可以选择使用OpenSSH客户端还是使用Putty客户端,如果使用的是默认的Putty客户端,由于TortoiseGit GUI连接不支持server端自定义端口配置,若GitLab使用的SSH端口为自定义端口,则需要使用PuTTY的authentication agent去做一个本地的端口转发.
</p>
<p>
	<span style="line-height:1.5;">1.首先使用TortoiseGit自带的Puttygen创建本地的公/私钥对</span>
</p>
<p>
	
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/11.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/11.jpg" alt="1" width="245" height="196" class="alignnone size-full wp-image-1301" /></a>
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/2.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/2.jpg" alt="2" width="483" height="469" class="alignnone size-large wp-image-1302" /></a>
</p>
<p>
	
</p>
<p>
	<span style="line-height:1.5;">2.点击Generate按钮,在窗口空白处按照提示晃动鼠标,生成公/私钥对,并保存到本地</span>
</p>
<p>
	<span style="line-height:1.5;">其中testkey为公钥,testkey.ppk为私钥</span>
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/3.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/3.jpg" alt="3" width="480" height="471" class="alignnone size-large wp-image-1303" /></a>
</p>
<p>
	
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/4.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/4.jpg" alt="4" width="715" height="92" class="alignnone size-large wp-image-1304" /></a>
</p>
<p>
	<span style="line-height:1.5;">3.将窗口生成的Public key粘贴到GitLab站点具体使用账号的SSh Keys内即完成公钥上传.</span>
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/23.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/23.jpg" alt="23" width="900" height="536" class="alignnone size-full wp-image-1338" /></a>
</p>
<p>
	
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/5.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/5-1024x269.jpg" alt="5" width="1024" height="269" class="alignnone size-large wp-image-1305" /></a>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;">4.使用PuTTY连接gitlab服务器,open之前需选择之前本地生成的私钥</span>
</p>
<p>
	这里服务端domain为git.example.com
</p>
<p>
	git为Server端SSH For GitLab账户
</p>
<p>
	SSH端口为自定义的2222
</p>
<p>
	
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/7.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/7.jpg" alt="7" width="456" height="438" class="alignnone size-full wp-image-1307" /></a> <a href="http://www.showerlee.com/wp-content/uploads/2014/08/8.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/8.jpg" alt="8" width="456" height="438" class="alignnone size-large wp-image-1308" /></a>&nbsp;
</p>
<p>
	<span><br />
</span>
</p>
<p>
	<span>5</span><span style="line-height:1.5;">.连接成功会在右下角任务栏出现任务图标</span>
</p>
<p>
	&nbsp; <a href="http://www.showerlee.com/wp-content/uploads/2014/08/9.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/9.jpg" alt="9" width="309" height="71" class="alignnone size-large wp-image-1309" /></a>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;"><strong>三.配置TortoiseGit</strong></span>
</p>
<p>
	
</p>
<p>
	1.从windows开始菜单选择TortoiseGit-Setting工具,在对话框里选择Git项,填写相关info
</p>
<p>
	<span style="color:#E53333;">注: 这里的User Info中Name建议与你的Gitlab的账户名保持一致,且该账户必须有该project的相关git操作权限,如果没有可能会造成GIT相关操作报permisson deny错误.当然如果你Gitlab本身刚搭建好,只有系统初始的admin账户,未添加其他账户,则这个权限问题会被系统忽略.</span>
</p>
<p>
	<span style="color:#E53333;">当然另外一种可能是:</span>
</p>
<p>
	<span style="color:#E53333;">大多数国内文档这里未提及这点可能在于国人的windows系统99.9%都是Ghost版本,初始都为admin最高权限,所以这边权限问题直接忽略,</span><span style="line-height:1.5;color:#E53333;">但如果你的windows系统是家庭版,或者未使用系统最高权限登陆,则会出现上述报错情况,这个问题也是在我一个朋友那边发现的,他的机子是Surface的Win8家庭版,一般都是普通用户登录,So让我倒持了大半天,终于发现了问题所在...</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;">如果有git相关管理经验的朋友,这里可以解释一下.</span>
</p>
<p>
	
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/10.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/10.jpg" alt="10" width="699" height="471" class="alignnone size-full wp-image-1310" /></a>
</p>
<p>
	2.在D盘新建一个目录,例如"D:\Git",并进入目录右键目录空白处选择"Git Create repository here...",弹出对话框点确认,这样即建立了一个本地Git仓库.
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/111.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/111.jpg" alt="11" width="900" height="604" class="alignnone size-large wp-image-1311" /></a> <a href="http://www.showerlee.com/wp-content/uploads/2014/08/12.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/12.jpg" alt="12" width="470" height="186" class="alignnone size-large wp-image-1312" /></a>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;">3.在该仓库目录下创建一个测试项目文本文件,右键目录空白处,选择Git Commit -&gt; "master" ...,在弹出对话框里输入提示注释,选择要加入的版本控制文件,确定即可提交.</span>
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/18.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/18.jpg" alt="18" width="900" height="604" class="alignnone size-full wp-image-1319" /></a><br />
<a href="http://www.showerlee.com/wp-content/uploads/2014/08/13.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/13.jpg" alt="13" width="555" height="535" class="alignnone size-full wp-image-1314" /></a>
</p>
<p>
	
</p>
<p>
	4.现在只是在本地实现使用Git管理项目,在此界面若显示Success则本地提交成功,接下来点击Push..,把我们的改动递交到Git服务器上.<br />
<a href="http://www.showerlee.com/wp-content/uploads/2014/08/14.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/14.jpg" alt="14" width="555" height="535" class="alignnone size-full wp-image-1315" /></a>
</p>
<p>
	5.此时会弹出Push对话框,在Ref - Remote栏里设定当前分支名为master,然后点击Destination - Remote栏的Manage按钮.<br />
<a href="http://www.showerlee.com/wp-content/uploads/2014/08/15.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/15.jpg" alt="15" width="492" height="493" class="alignnone size-full wp-image-1316" /></a>
</p>
<p>
	6.在弹出的设置对话框中按照如图所示,填写服务器Remote名称,URL(git@git.yanwenbo.cn:root/tesproject.git),之前保存的本地私钥testkey.ppk,点击Add New/Save按钮保存这一设置,然后点击确定退出返回之前的对话框.
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/16.jpg"></a><a href="http://www.showerlee.com/wp-content/uploads/2014/08/101.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/101.jpg" alt="10" width="692" height="505" class="alignnone size-large wp-image-1354" /></a>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;">7.最终确认提交</span>
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/17.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/17.jpg" alt="17" width="492" height="493" class="alignnone size-full wp-image-1318" /></a>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;">8.push成功</span>
</p>
<p>
	
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/20.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/20.jpg" alt="20" width="513" height="345" class="alignnone size-full wp-image-1322" /></a>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;">9. Giblab后台查看提交结果.</span>
</p>
<p>
	
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/21.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/21.jpg" alt="21" width="748" height="295" class="alignnone size-full wp-image-1323" /></a> <a href="http://www.showerlee.com/wp-content/uploads/2014/08/22.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/22-1024x290.jpg" alt="22" width="1024" height="290" class="alignnone size-large wp-image-1324" /></a>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;">大功告成...</span>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;">后记...</span>
</p>
<p>
	<span style="line-height:1.5;">之前介绍的是利用</span><span style="line-height:1.5;">TortoiseGit配合putty实现SSH自定义端口的连接GitLab</span>
</p>
<p>
	<span style="line-height:1.5;">但是在给一个朋友配的过程中发现他的SURFACE WIN8系统死活无法PUSH成功,但我的win7同样方法就没问题,索性就用OPENSSH的命令行方法实现.</span>
</p>
<p>
	<span style="line-height:1.5;">具体过程这里较之前的稍作更改</span>
</p>
<p>
	1. 利用git bash创建秘钥,方法和linux命令行创建秘钥命令行格式基本一致
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/110.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/110.jpg" alt="1" width="239" height="69" class="alignnone size-full wp-image-1344" /></a>
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/24.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/24.jpg" alt="2" width="677" height="392" class="alignnone size-large wp-image-1345" /></a>
</p>
<p>
	a.客户端生成秘钥
</p>
<p>
	# cd ~
</p>
<p>
	# ssh-keygen -t rsa
</p>
<p>
	一路回车后生成公钥和秘钥对
</p>
<p>
	<span style="line-height:1.5;"># cat ~/.ssh/id_rsa.pub&nbsp;</span>
</p>
<p>
	<span style="line-height:1.5;">—————————————————————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;">将这里生成的秘钥全部复制并粘贴到gitlab web SSH Keys后台保存即可</span>
</p>
<p>
	<span style="line-height:1.5;">—————————————————————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;">上传后如图:</span>
</p>
<p>
	
</p>
<p>
	<span style="color:#111111;font-family:'Century Gothic', 'Microsoft YaHei', Verdana, Arial, Helvetica, sans-serif;font-size:13px;line-height:1.5;vertical-align:baseline;"></span><a href="http://www.showerlee.com/wp-content/uploads/2014/08/QQ20140829-9@2x.png"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/QQ20140829-9@2x-1024x291.png" alt="QQ20140829-9@2x" width="1024" height="291" class="alignnone size-large wp-image-1288" /></a>
</p>
<p>
	<span style="line-height:1.5;">b.测试SSH连接</span>
</p>
<p>
	<span style="line-height:1.5;"># ssh -p22 <a href="mailto:git@git.example.com">git@git.example.com</a></span>
</p>
<p>
	<span style="line-height:1.5;">若报如下错误:</span>
</p>
<p>
	<span style="line-height:1.5;">——————————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;">PTY allocation request failed on channel 1</span>
</p>
<p>
	<span style="line-height:1.5;">/usr/bin/env: ruby: No such file or directory</span>
</p>
<p>
	<span style="line-height:1.5;">Connection to git.example.com closed.</span>
</p>
<p>
	<span style="line-height:1.5;">——————————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;">说明服务端ruby环境变量未在此目录/usr/bin/ruby</span>
</p>
<p>
	<span style="line-height:1.5;">在服务器端加此软链即可:</span>
</p>
<p>
	<span style="line-height:1.5;"># ln -s /usr/local/ruby/bin/ruby /usr/bin/ruby</span>
</p>
<p>
	<span style="line-height:1.5;">注:若服务器端SSH自定义端口,则需要在客户端~/.ssh/config下添加端口配置</span>
</p>
<p>
	<span style="line-height:1.5;">假定自定义SSH端口为2222</span>
</p>
<p>
	<span style="line-height:1.5;"># echo “Port 2222” &gt;&gt; ~/.ssh/config</span>
</p>
<p>
	<span style="line-height:1.5;">c.重新连接</span>
</p>
<p>
	<span style="line-height:1.5;"># ssh -p22 <a href="mailto:git@git.example.com">git@git.example.com</a></span>
</p>
<p>
	<span style="line-height:1.5;">——————————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;">PTY allocation request failed on channel 1</span>
</p>
<p>
	<span style="line-height:1.5;">Welcome to GitLab, Anonymous!</span>
</p>
<p>
	<span style="line-height:1.5;">Connection to git.example.com closed.</span>
</p>
<p>
	<span style="line-height:1.5;">——————————————————————————————————————</span>
</p>
<p></p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/32.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/32.jpg" alt="3" width="663" height="193" class="alignnone size-full wp-image-1347" /></a>
</p>
<p>
	
</p>
<p>
	2.将TortoiseGit默认的SSH客户端TortoiseGitPlink(Putty)<span>更改</span>为openssh,具体路径与你的实际安装路径为准.
</p>
<p>
	
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/41.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/41.jpg" alt="4" width="231" height="190" class="alignnone size-full wp-image-1348" /></a> <a href="http://www.showerlee.com/wp-content/uploads/2014/08/51.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/51.jpg" alt="5" width="699" height="471" class="alignnone size-large wp-image-1349" /></a> <a href="http://www.showerlee.com/wp-content/uploads/2014/08/61.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/61.jpg" alt="6" width="445" height="102" class="alignnone size-large wp-image-1350" /></a>
</p>
<p>
	3.更改<span>TortoiseGit的秘钥import路径为Git bash命令行生成的秘钥路径</span>
</p>
<p>
	<span>将之前到此处的配置中如下PuttyGen生成的秘钥路径更改成你的openssh生成的秘钥&nbsp;</span>
</p>
<p>
	<span>笔者是windows管理员账户登录</span>
</p>
<p>
	<span>所以路径为 C:\Users\Administrator\.ssh\id_rsa&nbsp;</span>
</p>
<p>
	<span><a href="http://www.showerlee.com/wp-content/uploads/2014/08/101.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/101.jpg" alt="10" width="692" height="505" class="alignnone size-large wp-image-1354" /></a><br />
</span>
</p>
<p></p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/91.jpg"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/91.jpg" alt="9" width="696" height="509" class="alignnone size-full wp-image-1353" /></a>
</p>
<p>
	
</p>
<p>
	4.其他配置保持不变,按照上文操作即可完成openssh认证远程Git over SSH for Gitlab.</p>
<div>声明: 本文采用 <a rel="external" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" title="署名-非商业性使用-相同方式共享 3.0 Unported">CC BY-NC-SA 3.0</a> 协议进行授权</div><div>转载请注明来源：<a rel="external" title="DevOps技术分享" href="http://www.showerlee.com/archives/1300">DevOps技术分享</a></div><div>本文链接地址：<a rel="external" title="Windows下TortoiseGit over Putty or Openssh提交项目到GitLab" href="http://www.showerlee.com/archives/1300">http://www.showerlee.com/archives/1300</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.showerlee.com/archives/1300/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CentOS6.3下GitLab+Nginx(SSL)+MySQL+Ruby安装部署</title>
		<link>http://www.showerlee.com/archives/1285</link>
		<comments>http://www.showerlee.com/archives/1285#comments</comments>
		<pubDate>Fri, 29 Aug 2014 14:12:21 +0000</pubDate>
		<dc:creator>showerlee</dc:creator>
				<category><![CDATA[Git]]></category>

		<guid isPermaLink="false">http://www.showerlee.com/?p=1285</guid>
		<description><![CDATA[Gitlab是一个用Ruby on Rails开发的开源项目管理程序.可以通过WEB界面进行访问公开的或者私人 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>
	<a href="http://www.showerlee.com/archives/tag/git" title="查看Git中的全部文章" class="tag_link">Git</a>lab是一个用Ruby on Rails开发的开源项目管理程序.可以通过WEB界面进行访问公开的或者私人项目. 它和<a href="http://www.showerlee.com/archives/tag/git" title="查看Git中的全部文章" class="tag_link">Git</a>hub有类似的功能，能够浏览源代码，管理缺陷和注释.
</p>
<p>
	本文选择NGINX与MYSQL来配合<a href="http://www.showerlee.com/archives/tag/git" title="查看Git中的全部文章" class="tag_link">Git</a>Lab实现web管理,数据存储等功能,配置过程中难点基本在GitLab的脚本修改,SSH秘钥连接,Nginx SSL证书等这些方面,作者也是耗费非常大的力气,结合很多文档的clue以及很多老外的debug comment,终于最终完成,希望在此给大家一个抛砖引玉的机会,了解到SCM(软件配置管理)其实也不是想象中那么小儿科,很多逻辑也着实需要下功夫investigation.
</p>
<p>
	最后我是一路向北,我为我自己带盐....
</p>
<p>
	
</p>
<p>
	解决方案：
</p>
<p>
	
</p>
<p>
	环境部署
</p>
<p>
	<span style="line-height:1.5;">操作系统 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; centos6.3 x64</span>
</p>
<p>
	<span style="line-height:1.5;">GitLab&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>GitLab</span>&nbsp;<span>6-3-stable</span></span>
</p>
<p>
	<span style="line-height:1.5;">GitLab Shell &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.8.0</span>
</p>
<p>
	<span style="line-height:1.5;">Ruby &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.0.0p353</span><span style="line-height:1.5;"></span>
</p>
<p>
	<span style="line-height:1.5;">NGINX &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;nginx-1.4.0</span>
</p>
<p>
	<span style="line-height:1.5;">MYSQL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;mysql-5.6.10</span>
</p>
<p>
	&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</p>
<p>
	Git server(centos6.3 x64): git.example.com
</p>
<p>
	<span style="line-height:1.5;">Git client(centos6.3 x64): client.example.com</span>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;">server端配置:</span>
</p>
<p>
	
</p>
<p>
	<strong>一.安装前的准备工作</strong>
</p>
<p>
	
</p>
<p>
	1.关闭iptables和SELINUX
</p>
<p>
	
</p>
<p>
	# service iptables stop
</p>
<p>
	<span style="line-height:1.5;"># setenforce 0</span>
</p>
<p>
	<span style="line-height:1.5;"># vi /etc/sysconfig/selinux</span>
</p>
<p>
	<span style="line-height:1.5;">---------------</span>
</p>
<p>
	<span style="line-height:1.5;">SELINUX=disabled</span>
</p>
<p>
	<span style="line-height:1.5;">---------------</span>
</p>
<p>
	
</p>
<p>
	2.同步时间
</p>
<p>
	
</p>
<p>
	# ntpdate cn.pool.ntp.org
</p>
<p>
	
</p>
<p>
	3.安装LNMP
</p>
<p>
	
</p>
<p>
	传送门：<a href="http://www.showerlee.com/archives/73" target="_blank">http://www.showerlee.com/archives/73</a>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;">4.安装GitLab的所需依赖包和工具</span>
</p>
<p>
	<span style="line-height:1.5;"># su -</span>
</p>
<p>
	<span style="line-height:1.5;"># rpm -Uvh <a href="http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-5-4.noarch.rpm" rel="nofollow">http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-5-4.noarch.rpm</a></span>
</p>
<p>
	<span style="line-height:1.5;"># yum -y groupinstall 'Development Tools'</span>
</p>
<p>
	<span style="line-height:1.5;"># yum -y install vim-enhanced readline readline-devel ncurses-devel gdbm-devel glibc-devel tcl-devel openssl-devel curl-devel expat-devel db4-devel byacc sqlite-devel gcc-c++ libyaml libyaml-devel libffi libffi-devel libxml2 libxml2-devel libxslt libxslt-devel libicu libicu-devel system-config-firewall-tui python-devel redis sudo wget crontabs logwatch logrotate perl-Time-HiRes git</span>
</p>
<p>
	
</p>
<p>
	5.配置redis
</p>
<p>
	<span style="line-height:1.5;">配置redis开机启动：</span>
</p>
<p>
	<span style="line-height:1.5;"># chkconfig redis on</span>
</p>
<p>
	<span style="line-height:1.5;"># service redis start</span>
</p>
<p>
	
</p>
<p>
	6.更改gem源(若默认无法连接)
</p>
<p>
	a.显示当前使用的sources
</p>
<p>
	<span style="line-height:1.5;"># gem sources</span>
</p>
<p>
	
</p>
<p>
	b.删除缺省source
</p>
<p>
	<span style="line-height:1.5;"># gem sources -r <a href="http://rubygems.org/" rel="nofollow">http://rubygems.org/</a></span>
</p>
<p>
	
</p>
<p>
	c.添加一个source
</p>
<p>
	<span style="line-height:1.5;"># gem sources -a <a href="https://ruby.taobao.org" rel="nofollow">https://ruby.taobao.org</a></span>
</p>
<p>
	
</p>
<p>
	d.更新source cache
</p>
<p>
	<span style="line-height:1.5;"># gem sources -u</span>
</p>
<p>
	
</p>
<p>
	6.安装Ruby
</p>
<p>
	
</p>
<p>
	a.源码安装Ruby
</p>
<p>
	<span style="line-height:1.5;">传送门: <a href="http://www.showerlee.com/archives/1123" target="_blank">http://www.showerlee.com/archives/1123</a></span>
</p>
<p>
	
</p>
<p>
	b.安装bundle组件：
</p>
<p>
	<span style="line-height:1.5;"># gem install bundler --no-ri --no-rdoc</span>
</p>
<p>
	
</p>
<p>
	<strong>二.安装GITLab shell</strong>
</p>
<p>
	
</p>
<p>
	1.创建用户git
</p>
<p>
	<span style="line-height:1.5;"># su -</span>
</p>
<p>
	<span style="line-height:1.5;"># adduser --system --shell /bin/bash --comment 'GitLab' --create-home --home-dir /home/git/ git</span>
</p>
<p>
	
</p>
<p>
	2、配置GitLab shell
</p>
<p>
	GitLab shell是专门为GitLab开发的提供ssh访问和版本管理的软件。
</p>
<p>
	a.使用git账户登陆
</p>
<p>
	<span style="line-height:1.5;"># su - git</span>
</p>
<p>
	
</p>
<p>
	b.克隆gitlab shell
</p>
<p>
	<span style="line-height:1.5;"># git clone <a href="https://github.com/gitlabhq/gitlab-shell.git" rel="nofollow">https://github.com/gitlabhq/gitlab-shell.git</a></span>
</p>
<p>
	
</p>
<p>
	c.切换成1.8.0版本，并编辑配置
</p>
<p>
	<span style="line-height:1.5;"># cd gitlab-shell</span>
</p>
<p>
	<span style="line-height:1.5;"># git checkout v1.8.0</span>
</p>
<p>
	
</p>
<p>
	d.拷贝配置文件
</p>
<p>
	<span style="line-height:1.5;"># cp config.yml.example config.yml</span>
</p>
<p>
	<span style="line-height:1.5;"># vi config.yml</span>
</p>
<p>
	<span style="line-height:1.5;">—————————————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;"># 将gitlab_url修改成gitlab的访问域名。例如本文档：https://git.example.com/</span>
</p>
<p>
	<span style="line-height:1.5;">gitlab_url: "https://git.example.com"</span>
</p>
<p>
	<span style="line-height:1.5;"># 将self_signed_cert修改成 true</span>
</p>
<p>
	<span style="line-height:1.5;">self_signed_cert: true</span>
</p>
<p>
	<span style="line-height:1.5;"># 添加网站SSL证书&nbsp;</span>
</p>
<p>
	<span style="line-height:1.5;">ca_file: "/usr/local/nginx/ssl/gitlab.crt"</span>
</p>
<p>
	—————————————————————————————————————————
</p>
<p>
	<span style="color:#E53333;">注：如果gitlab是使用http访问，则需将https替换成http，配置文件中的self_signed_cert要修改成false，否则gitlab shell在通过api和gitlab进行通信的时候就会出现错误，导致项目push出错。因为后面配置web服务器的时候是使用ssl，所以这里要按照ssl的方式配置。</span>
</p>
<p>
	<span style="color:#E53333;line-height:1.5;">另外本文档的域名为测试域名，不要忘记在C/S两端均做好域名映射。</span>
</p>
<p>
	
</p>
<p>
	e.安装一些需要的目录和文件
</p>
<p>
	<span style="line-height:1.5;"># ./bin/install</span>
</p>
<p>
	
</p>
<p>
	5、配置MySQL数据库(安装过程详见上文)
</p>
<p>
	a.登录数据库
</p>
<p>
	<span style="line-height:1.5;"># mysql -u root -p</span>
</p>
<p>
	
</p>
<p>
	b. 为gitlab创建使用用户
</p>
<p>
	<span style="line-height:1.5;">&gt; create user gitlab@'localhost' identified by '123456';</span>
</p>
<p>
	
</p>
<p>
	c.创建gitlaba使用的数据库
</p>
<p>
	<span style="line-height:1.5;">&gt; CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;</span>
</p>
<p>
	
</p>
<p>
	d.给予gitlab用户权限
</p>
<p>
	<span style="line-height:1.5;">&gt; GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'localhost';</span>
</p>
<p>
	
</p>
<p>
	<strong>三.安装GitLab</strong>
</p>
<p>
	
</p>
<p>
	1.将GitLab安装在git的家目录下：
</p>
<p>
	<span style="line-height:1.5;"># su - git</span>
</p>
<p>
	
</p>
<p>
	2.克隆GitLab并切换分支到6-3-stable
</p>
<p>
	<span style="line-height:1.5;">a.克隆GitLab</span>
</p>
<p>
	<span style="line-height:1.5;"># git clone <a href="https://github.com/gitlabhq/gitlabhq.git" rel="nofollow">https://github.com/gitlabhq/gitlabhq.git</a> gitlab</span>
</p>
<p>
	
</p>
<p>
	b. 切换到6-3-stable分支
</p>
<p>
	<span style="line-height:1.5;"># cd /home/git/gitlab</span>
</p>
<p>
	<span style="line-height:1.5;"># git checkout 6-3-stable</span>
</p>
<p>
	
</p>
<p>
	c、配置项目
</p>
<p>
	<span style="line-height:1.5;">a.复制配置文件</span>
</p>
<p>
	<span style="line-height:1.5;"># cp config/gitlab.yml.example config/gitlab.yml</span>
</p>
<p>
	
</p>
<p>
	b.修改配置文件中的访问域名
</p>
<p>
	<span style="line-height:1.5;"># sed -i 's|localhost|git.example.com|g' config/gitlab.yml</span>
</p>
<p>
	
</p>
<p>
	d.设定log和tmp目录所有者和权限
</p>
<p>
	<span style="line-height:1.5;"># chown -R git log/</span>
</p>
<p>
	<span style="line-height:1.5;"># chown -R git tmp/</span>
</p>
<p>
	<span style="line-height:1.5;"># chmod -R u+rwX log/</span>
</p>
<p>
	<span style="line-height:1.5;"># chmod -R u+rwX tmp/</span>
</p>
<p>
	
</p>
<p>
	e.创建gitlab-satellites目录
</p>
<p>
	<span style="line-height:1.5;"># mkdir /home/git/gitlab-satellites</span>
</p>
<p>
	
</p>
<p>
	f.创建tmp/pids/和tmp/sockets/目录，确保gitlab有相应的权限
</p>
<p>
	<span style="line-height:1.5;"># mkdir tmp/pids/</span>
</p>
<p>
	<span style="line-height:1.5;"># mkdir tmp/sockets/</span>
</p>
<p>
	<span style="line-height:1.5;"># chmod -R u+rwX tmp/pids/</span>
</p>
<p>
	<span style="line-height:1.5;"># chmod -R u+rwX tmp/sockets/</span>
</p>
<p>
	
</p>
<p>
	g.创建public/uploads目录
</p>
<p>
	<span style="line-height:1.5;"># mkdir public/uploads</span>
</p>
<p>
	<span style="line-height:1.5;"># chmod -R u+rwX public/uploads</span>
</p>
<p>
	
</p>
<p>
	h.复制unicorn配置
</p>
<p>
	<span style="line-height:1.5;"># cp config/unicorn.rb.example config/unicorn.rb</span>
</p>
<p>
	
</p>
<p>
	i.保持unicorn配置文件默认配置
</p>
<p>
	
</p>
<p>
	g.配置git的用户和邮件
</p>
<p>
	<span style="line-height:1.5;"># git config --global user.name "GitLab"</span>
</p>
<p>
	<span style="line-height:1.5;"># git config --global user.email "gitlab@git.example.com”</span>
</p>
<p>
	<span style="line-height:1.5;"># git config --global core.autocrlf input</span>
</p>
<p>
	
</p>
<p>
	k.配置数据库访问文件
</p>
<p>
	<span style="line-height:1.5;"># cp config/database.yml.mysql config/database.yml</span>
</p>
<p>
	编辑config/database.yml，设置其中连接数据库的账号密码
</p>
<p>
	<span style="line-height:1.5;"># vi config/database.yml</span>
</p>
<p>
	<span style="line-height:1.5;">———————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;">#</span>
</p>
<p>
	<span style="line-height:1.5;"># PRODUCTION</span>
</p>
<p>
	<span style="line-height:1.5;">#</span>
</p>
<p>
	<span style="line-height:1.5;">production:</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; adapter: mysql2</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; encoding: utf8</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; reconnect: false</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; database: gitlabhq_production</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; pool: 10</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; username: <span style="color:#E53333;">gitlab</span></span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; password: “<span style="color:#E53333;">123456</span>”</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; # host: localhost</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; # socket: /tmp/mysql.sock</span>
</p>
<p>
	<span style="line-height:1.5;">———————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;">修改其中username和password就可以了，其中密码就是上面数据库步骤中创建gitlab用户的密码。</span>
</p>
<p>
	
</p>
<p>
	l.确保该文件只有git账号有权限读取。
</p>
<p>
	<span style="line-height:1.5;"># chmod o-rwx config/database.yml</span>
</p>
<p>
	
</p>
<p>
	<strong>四.安装Gems</strong>
</p>
<p>
	
</p>
<p>
	1.安装charlock_holmes
</p>
<p>
	<span style="line-height:1.5;"># su -</span>
</p>
<p>
	<span style="line-height:1.5;"># gem install charlock_holmes --version '0.6.9.4'</span>
</p>
<p>
	<span style="line-height:1.5;"># exit</span>
</p>
<p>
	
</p>
<p>
	2.安装mysql包
</p>
<p>
	<span style="line-height:1.5;"># cd /home/git/gitlab/</span>
</p>
<p>
	<span style="line-height:1.5;"># vi Gemfile&nbsp;</span>
</p>
<p>
	<span style="line-height:1.5;">修改 <a href="https://rubygems.org" rel="nofollow">https://rubygems.org</a> 为 <a href="https://ruby.taobao.org" rel="nofollow">https://ruby.taobao.org</a></span>
</p>
<p>
	
</p>
<p>
	# bundle install --deployment --without development test postgres puma aws
</p>
<p>
	<span style="line-height:1.5;color:#E53333;">若报Could not find modernizr-2.6.2 in any of the sources错误,没有则无视:</span>
</p>
<p>
	<span style="color:#E53333;">修复方案:</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;"># vi Gemfile</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;">搜索该行 &nbsp; gem "modernizr", &nbsp; &nbsp; &nbsp; &nbsp;"2.6.2"</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;">更改为： &nbsp; gem "modernizr-rails", &nbsp;"2.7.1"</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;"># vi Gemfile.lock</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;">搜索该行 &nbsp; modernizr (2.6.2)</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;">更改为： &nbsp; modernizr-rails (2.7.1)</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;">搜索该行 &nbsp; modernizr (= 2.6.2)：</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;">更改为： &nbsp; modernizr-rails (= 2.7.1)</span>
</p>
<p>
	
</p>
<p>
	重新执行
</p>
<p>
	<span style="line-height:1.5;"># bundle install --deployment --without development test postgres puma aws</span>
</p>
<p>
	
</p>
<p>
	3.初始化数据和激活高级功能
</p>
<p>
	<span style="line-height:1.5;"># cd /home/git/gitlab</span>
</p>
<p>
	<span style="line-height:1.5;"># bundle exec rake gitlab:setup RAILS_ENV=production</span>
</p>
<p>
	<span style="line-height:1.5;">这步完成后，会生一个默认的管理员账号/密码：</span>
</p>
<p>
	<span style="line-height:1.5;"><a href="mailto:admin@local.host">admin@local.host</a>/5iveL!fe</span>
</p>
<p>
	
</p>
<p>
	4.安装启动脚本
</p>
<p>
	<span style="line-height:1.5;"># su -</span>
</p>
<p>
	<span style="line-height:1.5;"># wget -O /etc/init.d/gitlab <a href="https://raw.github.com/gitlabhq/gitlab-recipes/5-0-stable/init.d/gitlab" rel="nofollow">https://raw.github.com/gitlabhq/gitlab-recipes/5-0-stable/init.d/gitlab</a></span>
</p>
<p>
	<span style="line-height:1.5;"># chmod +x /etc/init.d/gitlab</span>
</p>
<p>
	
</p>
<p>
	5.开机时启动
</p>
<p>
	<span style="line-height:1.5;"># chkconfig --add gitlab</span>
</p>
<p>
	<span style="line-height:1.5;"># chkconfig gitlab on</span>
</p>
<p>
	
</p>
<p>
	6.检测应用程序状态
</p>
<p>
	<span style="line-height:1.5;"># su - git</span>
</p>
<p>
	<span style="line-height:1.5;"># cd gitlab/</span>
</p>
<p>
	<span style="line-height:1.5;"># bundle exec rake gitlab:env:info RAILS_ENV=production</span>
</p>
<p>
	<span style="line-height:1.5;"># exit</span>
</p>
<p>
	<span style="line-height:1.5;">可以查看到系统、Ruby、GitLab和GitLab Shell的版本和其他信息。</span>
</p>
<p>
	
</p>
<p>
	7.启动GitLab实例
</p>
<p>
	<span style="line-height:1.5;"># service gitlab start</span>
</p>
<p>
	
</p>
<p>
	8.查看应用更加详细的信息
</p>
<p>
	<span style="line-height:1.5;"># su - git</span>
</p>
<p>
	<span style="line-height:1.5;"># cd gitlab/</span>
</p>
<p>
	# bundle exec rake gitlab:check RAILS_ENV=production
</p>
<p>
	<span style="line-height:1.5;">这里会提示一个Init script up-to-date的错误，如下：</span>
</p>
<p>
	<span style="line-height:1.5;">——————————————————————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;">Init script up-to-date? ... no</span>
</p>
<p>
	<span style="line-height:1.5;">Try fixing it:</span>
</p>
<p>
	<span style="line-height:1.5;">Redownload the init script</span>
</p>
<p>
	<span style="line-height:1.5;">For more information see:</span>
</p>
<p>
	<span style="line-height:1.5;">doc/install/installation.md in section "Install Init Script"</span>
</p>
<p>
	<span style="line-height:1.5;">Please fix the error above and rerun the checks.</span>
</p>
<p>
	<span style="line-height:1.5;">——————————————————————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;">查阅官方自带文档,说明此问题可忽略.</span>
</p>
<p>
	
</p>
<p>
	<strong>五.Nginx配置</strong>
</p>
<p>
	
</p>
<p>
	1.配置Gitlab虚拟主机及SSL连接:
</p>
<p>
	
</p>
<p>
	# cd /usr/local/nginx/conf/vhosts/
</p>
<p>
	<span style="line-height:1.5;"># vi gitlab-ssl.conf</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;">注: 这里先感谢提供此脚本的极客,该脚本在原基础上稍作改动.</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;">内容用红字标注的地方为需要自定义的地方.</span>
</p>
<p>
	<span style="line-height:1.5;">————————————————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;">## GitLab</span>
</p>
<p>
	<span style="line-height:1.5;">## Contributors: randx, yin8086, sashkab, orkoden, axilleas</span>
</p>
<p>
	<span style="line-height:1.5;">## App Version: 5.4 - 6.0</span>
</p>
<p>
	<span style="line-height:1.5;">##</span>
</p>
<p>
	<span style="line-height:1.5;">## Modified from nginx http version</span>
</p>
<p>
	<span style="line-height:1.5;">## Modified from <a href="http://blog.phusion.nl/2012/04/21/tutorial-setting-up-gitlab-on-debian-6/" rel="nofollow">http://blog.phusion.nl/2012/04/21/tutorial-setting-up-gitlab-on-debian-6/</a></span>
</p>
<p>
	<span style="line-height:1.5;">##</span>
</p>
<p>
	<span style="line-height:1.5;">## Lines starting with two hashes (##) are comments containing information</span>
</p>
<p>
	<span style="line-height:1.5;">## for configuration. One hash (#) comments are actual configuration parameters</span>
</p>
<p>
	<span style="line-height:1.5;">## which you can comment/uncomment to your liking.</span>
</p>
<p>
	<span style="line-height:1.5;">##</span>
</p>
<p>
	<span style="line-height:1.5;">###################################</span>
</p>
<p>
	<span style="line-height:1.5;">## &nbsp; &nbsp; &nbsp; &nbsp;SSL configuration &nbsp; &nbsp; &nbsp;##</span>
</p>
<p>
	<span style="line-height:1.5;">###################################</span>
</p>
<p>
	<span style="line-height:1.5;">##</span>
</p>
<p>
	<span style="line-height:1.5;">## Optimal configuration is taken from:</span>
</p>
<p>
	<span style="line-height:1.5;">## <a href="https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html" rel="nofollow">https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html</a></span>
</p>
<p>
	<span style="line-height:1.5;">## Make sure to read it and understand what each option does.</span>
</p>
<p>
	<span style="line-height:1.5;">##</span>
</p>
<p>
	<span style="line-height:1.5;">## [Optional] Generate a self-signed ssl certificate:</span>
</p>
<p>
	<span style="line-height:1.5;">## &nbsp; &nbsp;mkdir /etc/nginx/ssl/</span>
</p>
<p>
	<span style="line-height:1.5;">## &nbsp; &nbsp;cd /etc/nginx/ssl/</span>
</p>
<p>
	<span style="line-height:1.5;">## &nbsp; &nbsp;sudo openssl req -newkey rsa:2048 -x509 -nodes -days 3560 -out gitlab.crt -keyout gitlab.key</span>
</p>
<p>
	<span style="line-height:1.5;">## &nbsp; &nbsp;sudo chmod o-r gitlab.key</span>
</p>
<p>
	<span style="line-height:1.5;">##</span>
</p>
<p>
	<span style="line-height:1.5;">## Edit `gitlab-shell/config.yml`:</span>
</p>
<p>
	<span style="line-height:1.5;">## &nbsp;1) Set "gitlab_url" param in `gitlab-shell/config.yml` to `https://git.example.com`</span>
</p>
<p>
	<span style="line-height:1.5;">## &nbsp;2) Set "ca_file" to `/etc/nginx/ssl/gitlab.crt`</span>
</p>
<p>
	<span style="line-height:1.5;">## &nbsp;3) Set "self_signed_cert" to `true`</span>
</p>
<p>
	<span style="line-height:1.5;">## Edit `gitlab/config/gitlab.yml`:</span>
</p>
<p>
	<span style="line-height:1.5;">## &nbsp;1) Define port for http "port: 443"</span>
</p>
<p>
	<span style="line-height:1.5;">## &nbsp;2) Enable https "https: true"</span>
</p>
<p>
	<span style="line-height:1.5;">## &nbsp;3) Update ssl for gravatar "ssl_url: <a href="https://secure.gravatar.com/avatar/%" rel="nofollow">https://secure.gravatar.com/avatar/%</a>{hash}?s=%{size}&amp;d=mm"</span>
</p>
<p>
	<span style="line-height:1.5;">##</span>
</p>
<p>
	<span style="line-height:1.5;">##################################</span>
</p>
<p>
	<span style="line-height:1.5;">## &nbsp; &nbsp; &nbsp; &nbsp;CHUNKED TRANSFER &nbsp; &nbsp; &nbsp;##</span>
</p>
<p>
	<span style="line-height:1.5;">##################################</span>
</p>
<p>
	<span style="line-height:1.5;">##</span>
</p>
<p>
	<span style="line-height:1.5;">## It is a known issue that Git-over-HTTP requires chunked transfer encoding [0]</span>
</p>
<p>
	<span style="line-height:1.5;">## which is not supported by Nginx &lt; 1.3.9 [1]. As a result, pushing a large object</span>
</p>
<p>
	<span style="line-height:1.5;">## with Git (i.e. a single large file) can lead to a 411 error. In theory you can get</span>
</p>
<p>
	<span style="line-height:1.5;">## around this by tweaking this configuration file and either:</span>
</p>
<p>
	<span style="line-height:1.5;">## - installing an old version of Nginx with the chunkin module [2] compiled in, or</span>
</p>
<p>
	## - using a newer version of Nginx.
</p>
<p>
	##
</p>
<p>
	<span style="line-height:1.5;">## At the time of writing we do not know if either of these theoretical solutions works. As a workaround</span>
</p>
<p>
	<span style="line-height:1.5;">## users can use Git over SSH to push large files.</span>
</p>
<p>
	<span style="line-height:1.5;">##</span>
</p>
<p>
	<span style="line-height:1.5;">## [0] <a href="https://git.kernel.org/cgit/git/git.git/tree/Documentation/technical/http-protocol.txt#n99" rel="nofollow">https://git.kernel.org/cgit/git/git.git/tree/Documentation/technical/http-protocol.txt#n99</a></span>
</p>
<p>
	<span style="line-height:1.5;">## [1] <a href="https://github.com/agentzh/chunkin-nginx-module#status" rel="nofollow">https://github.com/agentzh/chunkin-nginx-module#status</a></span>
</p>
<p>
	<span style="line-height:1.5;">## [2] <a href="https://github.com/agentzh/chunkin-nginx-module" rel="nofollow">https://github.com/agentzh/chunkin-nginx-module</a></span>
</p>
<p></p>
<p>
	
</p>
<p>
	upstream gitlab {
</p>
<p>
	
</p>
<p>
	&nbsp; ## Uncomment if you have set up puma/unicorn to listen on a unix socket (recommended).
</p>
<p>
	<span style="line-height:1.5;">&nbsp; server unix:/home/git/gitlab/tmp/sockets/gitlab.socket;</span>
</p>
<p></p>
<p>
	<span style="line-height:1.5;">&nbsp; ## Uncomment if puma/unicorn are configured to listen on a tcp port.</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; ## Check the port number in /home/git/gitlab/config/{puma.rb/unicorn.rb}</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; # <span style="color:#E53333;">server 127.0.0.1:8080</span>;</span>
</p>
<p>
	<span style="line-height:1.5;">}</span>
</p>
<p>
	
</p>
<p>
	## This is a normal HTTP host which redirects all traffic to the HTTPS host.
</p>
<p>
	<span style="line-height:1.5;">server {</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; listen *:80;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; ## Replace git.example.com with your FQDN.</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; server_name <span style="color:#E53333;">git.example.com</span>;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; server_tokens off;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; ## This doesn't have to be a valid path since we are redirecting,</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; ## you don't have to change it.</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; root /nowhere;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; rewrite ^ <a href="https://$server_name$request_uri" rel="nofollow">https://$server_name$request_uri</a> permanent;</span>
</p>
<p>
	<span style="line-height:1.5;">}</span>
</p>
<p>
	
</p>
<p>
	server {
</p>
<p>
	<span style="line-height:1.5;">&nbsp; listen 443 ssl;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; ## Replace git.example.com with your FQDN.</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; server_name<span style="color:#E53333;"> git.example.com</span>;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; server_tokens off;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; root /home/git/gitlab/public;</span>
</p>
<p>
	
</p>
<p>
	&nbsp; ## Increase this if you want to upload large attachments
</p>
<p>
	<span style="line-height:1.5;">&nbsp; ## Or if you want to accept large git objects over http</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; client_max_body_size 20m;</span>
</p>
<p>
	
</p>
<p>
	&nbsp; ## Strong SSL Security
</p>
<p>
	<span style="line-height:1.5;">&nbsp; ## <a href="https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html" rel="nofollow">https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html</a></span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; ssl on;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; <span style="color:#E53333;">ssl_certificate /usr/local/nginx/ssl/gitlab.crt;</span></span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;">&nbsp; ssl_certificate_key /usr/local/nginx/ssl/gitlab.key;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; ssl_protocols &nbsp;TLSv1 TLSv1.1 TLSv1.2;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; ssl_session_cache &nbsp;builtin:1000 &nbsp;shared:SSL:10m;</span>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	&nbsp; #add_header Strict-Transport-Security max-age=63072000;
</p>
<p>
	&nbsp; #add_header X-Frame-Options DENY;
</p>
<p>
	<span style="line-height:1.5;">&nbsp; #add_header X-Content-Type-Options nosniff;</span>
</p>
<p>
	
</p>
<p>
	&nbsp; ## Individual nginx logs for this GitLab vhost
</p>
<p>
	<span style="line-height:1.5;">&nbsp; <span style="color:#E53333;">access_log &nbsp;/usr/local/nginx/logs/gitlab_access.log;</span></span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;">&nbsp; error_log &nbsp; /usr/local/nginx/logs/gitlab_error.log;</span>
</p>
<p>
	
</p>
<p>
	&nbsp; location / {
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; ## Serve static files from defined root folder.</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; ## @gitlab is a named location for the upstream fallback, see below.</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; try_files $uri $uri/index.html $uri.html @gitlab;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; }</span>
</p>
<p>
	
</p>
<p>
	&nbsp; ## If a file, which is not found in the root folder is requested,
</p>
<p>
	<span style="line-height:1.5;">&nbsp; ## then the proxy pass the request to the upsteam (gitlab unicorn).</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; location @gitlab {</span>
</p>
<p>
	
</p>
<p>
	&nbsp; &nbsp; ## If you use https make sure you disable gzip compression
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; ## to be safe against BREACH attack.</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; gzip off;</span>
</p>
<p>
	
</p>
<p>
	&nbsp; &nbsp; ## <a href="https://github.com/gitlabhq/gitlabhq/issues/694" rel="nofollow">https://github.com/gitlabhq/gitlabhq/issues/694</a>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; ## Some requests take more than 30 seconds.</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; proxy_read_timeout &nbsp; &nbsp; &nbsp;300;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; proxy_connect_timeout &nbsp; 300;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; proxy_redirect &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;off;</span>
</p>
<p>
	
</p>
<p>
	&nbsp; &nbsp; proxy_set_header &nbsp; Host &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$http_host;
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; proxy_set_header &nbsp; X-Real-IP &nbsp; &nbsp; &nbsp; &nbsp; $remote_addr;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; proxy_set_header &nbsp; X-Forwarded-Ssl &nbsp; on;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; proxy_set_header &nbsp; X-Forwarded-For &nbsp; $proxy_add_x_forwarded_for;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; proxy_set_header &nbsp; X-Forwarded-Proto $scheme;</span>
</p>
<p>
	
</p>
<p>
	&nbsp; &nbsp; proxy_pass <a href="http://127.0.0.1:8080" rel="nofollow">http://127.0.0.1:8080</a>;
</p>
<p>
	<span style="line-height:1.5;">&nbsp; }</span>
</p>
<p>
	
</p>
<p>
	&nbsp; ## Enable gzip compression as per rails guide:
</p>
<p>
	<span style="line-height:1.5;">&nbsp; ## <a href="http://guides.rubyonrails.org/asset_pipeline.html#gzip-compression" rel="nofollow">http://guides.rubyonrails.org/asset_pipeline.html#gzip-compression</a></span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; location ~ ^/(assets)/ {</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; root /home/git/gitlab/public;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; gzip_static on; # to serve pre-gzipped version</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; expires max;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; add_header Cache-Control public;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; }</span>
</p>
<p>
	
</p>
<p>
	&nbsp; error_page 502 /502.html;
</p>
<p>
	<span style="line-height:1.5;">}</span>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;">————————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;">2.将nginx加入git用户组<span style="color:#E53333;">(重要)</span></span>
</p>
<p>
	<span style="line-height:1.5;"># usermod -a -G git nginx</span>
</p>
<p>
	<span style="line-height:1.5;"># chmod g+rx /home/git/</span>
</p>
<p>
	
</p>
<p>
	3.生成ssl证书
</p>
<p>
	<span style="line-height:1.5;"># mkdir /usr/local/nginx/ssl</span>
</p>
<p>
	<span style="line-height:1.5;"># cd /usr/local/nginx/ssl</span>
</p>
<p>
	<span style="line-height:1.5;"># openssl req -new -x509 -nodes -days 3560 -out gitlab.crt -keyout gitlab.key</span>
</p>
<p>
	
</p>
<p>
	4.开启Git over SSL
</p>
<p>
	# vi&nbsp;/home/git/gitlab/config/gitlab.yml
</p>
<pre class="prettyprint lang-bsh">  ## GitLab settings
  gitlab:
    ## Web server settings
    host: git.example.com
    port: 443
    https: true</pre>
<p>
	# vi&nbsp;/home/git/gitlab-shell/config.yml
</p>
<pre class="prettyprint lang-bsh">gitlab_url: "https://git.example.com"
http_settings:
#  user: someone
#  password: somepass
#  ca_file: /etc/ssl/cert.pem
#  ca_path: /etc/ssl/
  self_signed_cert: true

ca_file: "/usr/local/nginx/ssl/gitlab.crt"</pre>
<p>
	<span style="line-height:1.5;">5.启动nginx</span>
</p>
<p>
	<span style="line-height:1.5;"># service nginx start</span>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	
</p>
<p>
	6.打开web页面 git.example.com
</p>
<p>
	nginx直接跳转URL为https://<span>git.example.com</span>
</p>
<p>
	<span style="color:#E53333;">注:视浏览器不同这里首先会提示证书不受信任,因为我们在此是自己给自己颁发的证书,所以非官方CA授权,有需要授权的朋友可以通过很多其他途径购买.</span>
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/QQ20140829-7@2x.png"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/QQ20140829-7@2x-1024x598.png" alt="QQ20140829-7@2x" width="1024" height="598" class="alignnone size-large wp-image-1286" /></a>
</p>
<p>
	<span style="line-height:1.5;">GitLab默认的账号密码如下:</span>
</p>
<p>
	<span style="line-height:1.5;"><a href="mailto:admin@local.host">admin@local.host</a>/5iveL!fe</span>
</p>
<p>
	
</p>
<p>
	Client端配置:
</p>
<p>
	
</p>
<p>
	<strong>六.上传git仓库</strong>
</p>
<p>
	<span style="line-height:1.5;">1.客户端生成秘钥</span>
</p>
<p>
	<span style="line-height:1.5;"># cd ~</span>
</p>
<p>
	<span style="line-height:1.5;"># ssh-keygen -t rsa</span>
</p>
<p>
	<span style="line-height:1.5;">一路回车后生成公钥和秘钥对</span><span style="line-height:1.5;"></span>
</p>
<p>
	<span style="line-height:1.5;">$ cat ~/.ssh/id_rsa.pub&nbsp;</span>
</p>
<p>
	<span style="line-height:1.5;">—————————————————————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;">将这里生成的秘钥全部复制并粘贴到gitlab web SSH Keys后台保存即可</span>
</p>
<p>
	<span style="line-height:1.5;">—————————————————————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;">上传后如图:</span>
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/QQ20140829-9@2x.png"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/QQ20140829-9@2x-1024x291.png" alt="QQ20140829-9@2x" width="1024" height="291" class="alignnone size-large wp-image-1288" /></a>
</p>
<p>
	<span style="line-height:1.5;">2.测试SSH连接</span>
</p>
<p>
	<span style="line-height:1.5;"># ssh -p22 <a href="mailto:git@git.example.com">git@git.example.com</a></span>
</p>
<p>
	<span style="line-height:1.5;">若报如下错误:</span>
</p>
<p>
	<span style="line-height:1.5;">——————————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;">PTY allocation request failed on channel 1</span>
</p>
<p>
	<span style="line-height:1.5;">/usr/bin/env: ruby: No such file or directory</span>
</p>
<p>
	<span style="line-height:1.5;">Connection to git.example.com closed.</span>
</p>
<p>
	<span style="line-height:1.5;">——————————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;">说明服务端ruby环境变量未在此目录/usr/bin/ruby</span>
</p>
<p>
	<span style="line-height:1.5;">在服务器端加此软链即可:</span>
</p>
<p>
	<span style="line-height:1.5;"># ln -s /usr/local/ruby/bin/ruby /usr/bin/ruby</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;">注:若服务器端SSH自定义端口,则需要在客户端~/.ssh/config下添加端口配置</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;">假定自定义SSH端口为2222</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;"># echo “Port 2222” &gt;&gt; ~/.ssh/config</span>
</p>
<p>
	
</p>
<p>
	3.重新连接
</p>
<p>
	<span style="line-height:1.5;"># ssh -p22 <a href="mailto:git@git.example.com">git@git.example.com</a></span>
</p>
<p>
	<span style="line-height:1.5;">——————————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;">PTY allocation request failed on channel 1</span>
</p>
<p>
	<span style="line-height:1.5;">Welcome to GitLab, Anonymous!</span>
</p>
<p>
	<span style="line-height:1.5;">Connection to git.example.com closed.</span>
</p>
<p>
	<span style="line-height:1.5;">——————————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;">4.命令行上传git仓库</span>
</p>
<p>
	<span style="line-height:1.5;"># su -&nbsp;</span>
</p>
<p>
	<span style="line-height:1.5;"># mkdir testprojiect</span>
</p>
<p>
	# cd testprojiect/
</p>
<p>
	<span style="line-height:1.5;"># git init</span>
</p>
<p>
	<span style="line-height:1.5;"># echo "What a fucking Hello World" &gt; readme.txt</span>
</p>
<p>
	<span style="line-height:1.5;"># git add .</span>
</p>
<p>
	<span style="line-height:1.5;"># git commit -m 'first commit'</span>
</p>
<p>
	<span style="line-height:1.5;"># git remote add origin <a href="mailto:git@git.example.com">git@git.example.com</a>:root/testproject.git</span>
</p>
<p>
	<span style="line-height:1.5;"># git push -u origin master</span>
</p>
<p>
	<span style="line-height:1.5;">————————————————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;">Counting objects: 3, done.</span>
</p>
<p>
	<span style="line-height:1.5;">Writing objects: 100% (3/3), 238 bytes | 0 bytes/s, done.</span>
</p>
<p>
	<span style="line-height:1.5;">Total 3 (delta 0), reused 0 (delta 0)</span>
</p>
<p>
	<span style="line-height:1.5;">To <a href="mailto:git@git.example.com">git@git.example.com</a>:root/testproject.git</span>
</p>
<p>
	<span style="line-height:1.5;">* [new branch] &nbsp; &nbsp; &nbsp;master -&gt; master</span>
</p>
<p>
	<span style="line-height:1.5;">Branch master set up to track remote branch master from origin.</span>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;">————————————————————————————————————————————</span>
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/QQ20140829-8@2x.png"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/QQ20140829-8@2x-1024x329.png" alt="QQ20140829-8@2x" width="1024" height="329" class="alignnone size-large wp-image-1287" /></a>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;">大功告成...</span>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;">注: 若主页CSS出现错误未加载, 可从新编译assets, 可从新获取CSS文件.</span>
</p>
<p>
	<span style="line-height:1.5;"><span style="color:#E53333;"># cd /</span><span style="color:#E53333;">home/git/gitlab</span></span>
</p>
<p>
	<span style="color:#E53333;">#&nbsp;bundle exec rake assets:precompile RAILS_ENV=production</span>
</p>
<p>
	<span style="color:#E53333;"><br />
</span>
</p>
<p>
	<span><span style="color:#E53333;">注: 解决</span><span style="color:#E53333;">Gravatar的头像加载timeout问题</span></span>
</p>
<p>
	<span></span>
</p>
<p>
	<span><span><span style="color:#E53333;">搜索plain_url部分, 将原有部分改成:</span><br />
<span style="color:#E53333;">plain_url: "http://gravatar.duoshuo.com/avatar/%{hash}?s=%{size}&amp;d=identicon"</span></span></span>
</p>
<p>
	<span style="line-height:1.5;"><span style="color:#E53333;">#cd&nbsp;</span><span style="color:#E53333;">/home/git/gitlab</span><span style="color:#E53333;"></span></span>
</p>
<p>
	<span><span style="color:#E53333;">清除缓存</span></span>
</p>
<p>
	<span style="line-height:1.5;"><span style="color:#E53333;">#&nbsp;</span><span style="color:#E53333;">RAILS_ENV=production bundle exec rake cache:clear</span><span style="color:#E53333;"></span></span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;"># service gitlab restart</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;">注: 解决内存耗尽问题</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;">如果你的VPS 为1G内存+1核处理器</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;">建议将默认的unicorn worker_process设置为2, timeout设定为60s, 这样就不会因为长时间加载web页面而出现timeout等问题.</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;">#&nbsp;vi /home/git/gitlab/config/unicorn.rb</span>
</p>
<pre class="prettyprint lang-bsh">...
worker_processes 2
timeout 60
...</pre>
<p>
	官方推荐配置详见:&nbsp;<a href="https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/requirements.md" target="_blank">https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/requirements.md</a>
</p>
<p>
	
</p>
<p>
	
</p>
<p>
	本文的Gitlab为6.3版本, 如果大家有升级到7.14或者8.0版本的需要的话, 可以参考官方的升级文档
</p>
<p><a href="https://github.com/gitlabhq/gitlabhq/blob/master/doc/update/6.x-or-7.x-to-7.14.md" rel="nofollow">https://github.com/gitlabhq/gitlabhq/blob/master/doc/update/6.x-or-7.x-to-7.14.md</a></p>
<p><a href="https://github.com/gitlabhq/gitlabhq/blob/master/doc/update/7.14-to-8.0.md" rel="nofollow">https://github.com/gitlabhq/gitlabhq/blob/master/doc/update/7.14-to-8.0.md</a></p>
<p></p>
<div>声明: 本文采用 <a rel="external" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" title="署名-非商业性使用-相同方式共享 3.0 Unported">CC BY-NC-SA 3.0</a> 协议进行授权</div><div>转载请注明来源：<a rel="external" title="DevOps技术分享" href="http://www.showerlee.com/archives/1285">DevOps技术分享</a></div><div>本文链接地址：<a rel="external" title="CentOS6.3下GitLab+Nginx(SSL)+MySQL+Ruby安装部署" href="http://www.showerlee.com/archives/1285">http://www.showerlee.com/archives/1285</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.showerlee.com/archives/1285/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>CentOS6.3下Gitosis安装部署</title>
		<link>http://www.showerlee.com/archives/1240</link>
		<comments>http://www.showerlee.com/archives/1240#comments</comments>
		<pubDate>Mon, 11 Aug 2014 11:04:23 +0000</pubDate>
		<dc:creator>showerlee</dc:creator>
				<category><![CDATA[Git]]></category>

		<guid isPermaLink="false">http://www.showerlee.com/?p=1240</guid>
		<description><![CDATA[&#160; Git作为一个分布式的版本控制系统，使用git的时候，一般和服务器通讯使用的是ssh协议，用ss [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>
	<span style="line-height:1.5;">&nbsp; <a href="http://www.showerlee.com/archives/tag/git" title="查看Git中的全部文章" class="tag_link">Git</a>作为一个分布式的版本控制系统<span>，</span>使用git的时候，一般和服务器通讯使用的是ssh协议，用ssh的主要优点是速度快（传输前数据会先压缩，比HTTP快），安全，方便读写。&nbsp;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; 客户端通过ssh访问服务器端的验证方式一般有两种，一种是用户名密码的方式，一种是使用公私钥认证的方式. 使用公私钥的方式比较方便，无需每次登录输入密码。&nbsp;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; 某个受信任的客户端的公钥会被设置在服务器端的 ~/.ssh/authorized_keys文件中，有关此文件的格式可以参见 sshd的用户手册 man sshd . authorized_keys有个比较厉害的功能是 支持 command参数，使得每次用户使用此公钥进行验证的时候执行此后面的命令.这样就可以做一些逻辑处理了.&nbsp;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; 一般git库的管理需要权限控制，如何方便简单的进行库的权限管理呢？ authorized_keys是一个思路，指定特定command参数，每次验证好用户后首先执行相关逻辑，检测当前用户是否具有某个权限。 所以便有了gitosis，与其说gitosis是一个git权限管理系统，还不如说它是一个authorized_keys文件管理器.</p>
<p></span>
</p>
<p>
	<span style="line-height:1.5;"></span>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;">解决方案：</span>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;"><strong>一.环境部署</strong></span>
</p>
<p>
	<span style="line-height:1.5;">操作系统： &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;centos6.3 x64</span>
</p>
<p>
	<span style="line-height:1.5;"><a href="http://www.showerlee.com/archives/tag/git" title="查看Git中的全部文章" class="tag_link">Git</a>: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; git-1.7.1</span>
</p>
<p>
	<span style="line-height:1.5;"><a href="http://www.showerlee.com/archives/tag/git" title="查看Git中的全部文章" class="tag_link">Git</a>osis: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.showerlee.com/archives/tag/git" title="查看Git中的全部文章" class="tag_link">Git</a>osis</span>
</p>
<p>
	<span style="line-height:1.5;"><a href="http://www.showerlee.com/archives/tag/git" title="查看Git中的全部文章" class="tag_link">Git</a>web: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;1.7.1-3 &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>
</p>
<p>
	<span style="line-height:1.5;">OpenSSH Server: &nbsp; &nbsp; openssh-server-5.3p1</span>
</p>
<p>
	<span style="line-height:1.5;">apache: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;httpd-2.4.4</span>
</p>
<p>
	<span style="line-height:1.5;">python-setuptools: &nbsp; python-setuptools-0.6.10-3</span>
</p>
<p>
	&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</p>
<p>
	<a href="http://www.showerlee.com/archives/tag/git" title="查看Git中的全部文章" class="tag_link">Git</a> server(centos6.3 x64): node2.example.com
</p>
<p>
	<span style="line-height:1.5;"><a href="http://www.showerlee.com/archives/tag/git" title="查看Git中的全部文章" class="tag_link">Git</a> client(centos6.3 x64): node1.example.com</span>
</p>
<p>
	
</p>
<p>
	server端配置:
</p>
<p>
	<span style="line-height:1.5;">一.关闭iptables和SELINUX</span>
</p>
<p>
	<span style="line-height:1.5;"># service iptables stop</span>
</p>
<p>
	<span style="line-height:1.5;"># setenforce 0</span>
</p>
<p>
	<span style="line-height:1.5;"># vi /etc/sysconfig/selinux</span>
</p>
<p>
	<span style="line-height:1.5;">---------------</span>
</p>
<p>
	<span style="line-height:1.5;">SELINUX=disabled</span>
</p>
<p>
	<span style="line-height:1.5;">---------------</span>
</p>
<p>
	
</p>
<p>
	<strong>二.同步时间</strong>
</p>
<p>
	<span style="line-height:1.5;"># ntpdate cn.pool.ntp.org</span>
</p>
<p>
	
</p>
<p>
	<strong>三.安装apache</strong>
</p>
<p>
	<span style="line-height:1.5;">传送门：<a href="http://www.showerlee.com/archives/6" target="_blank">http://www.showerlee.com/archives/6</a></span>
</p>
<p>
	
</p>
<p>
	<strong>四.安装OpenSSH</strong>
</p>
<p>
	<span style="line-height:1.5;">1.yum安装OpenSSH:</span>
</p>
<p>
	<span style="line-height:1.5;"># yum install openssh-server -y</span>
</p>
<p>
	
</p>
<p>
	2.修改ssh服务端配置:
</p>
<p>
	<span style="line-height:1.5;"># vi /etc/ssh/sshd_config</span>
</p>
<p>
	<span style="line-height:1.5;">——————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp;Port 22 # 修改成你想要的登陆端口</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp;PermitRootLogin no # 禁止root用户登陆</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp;StrictModes yes # 检查密钥的用户和权限是否正确，默认打开的</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp;RSAAuthentication yes # 启用 RSA 认证</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp;PubkeyAuthentication yes # 启用公钥认证</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp;PasswordAuthentication yes # 启用密码认证，默认是打开的</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp;ServerKeyBits 1024 # 修改后变为此状态，将ServerKey强度改为1024比特</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; PermitEmptyPasswords no # 修改后变为此状态，禁止空密码进行登录</span>
</p>
<p>
	<span style="line-height:1.5;">——————————————————————————————</span>
</p>
<p>
	
</p>
<p>
	3.重启服务：
</p>
<p>
	<span style="line-height:1.5;"># /etc/init.d/sshd restart</span>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;"><strong>五.安装<a href="http://www.showerlee.com/archives/tag/git" title="查看Git中的全部文章" class="tag_link">Git</a>&nbsp;</strong></span>
</p>
<p>
	<span style="line-height:1.5;"># yum install git-core -y</span>
</p>
<p>
	&nbsp;
</p>
<p>
	<strong>六.安装<a href="http://www.showerlee.com/archives/tag/git" title="查看Git中的全部文章" class="tag_link">Git</a>osis</strong>
</p>
<p>
	<span style="line-height:1.5;">1.安装<a href="http://www.showerlee.com/archives/tag/git" title="查看Git中的全部文章" class="tag_link">Git</a>osis依赖python-setuptools包</span>
</p>
<p>
	<span style="line-height:1.5;"># yum install python-setuptools -y</span>
</p>
<p>
	
</p>
<p>
	2.安装Gitosis
</p>
<p>
	<span style="line-height:1.5;"># cd ~</span>
</p>
<p>
	<span style="line-height:1.5;"># mkdir src</span>
</p>
<p>
	<span style="line-height:1.5;"># cd src&nbsp;</span>
</p>
<p>
	<span style="line-height:1.5;"># git clone <a href="https://github.com/tv42/gitosis.git" rel="nofollow">https://github.com/tv42/gitosis.git</a></span>
</p>
<p>
	<span style="line-height:1.5;"># cd gitosis</span>
</p>
<p>
	<span style="line-height:1.5;"># python setup.py install</span>
</p>
<p>
	&nbsp;
</p>
<p>
	3.为gitosis创建系统用户&nbsp;
</p>
<p>
	<span style="line-height:1.5;"># useradd -m git</span>
</p>
<p>
	<span style="line-height:1.5;"># passwd git</span>
</p>
<p>
	&nbsp;
</p>
<p>
	4. 运行gitosis
</p>
<p>
	<span style="line-height:1.5;">(1).将管理员生成的公钥上传或拷贝到服务器上。这里的公钥需要在git服务器管理员下使用ssh-keygen命令来创建</span>
</p>
<p>
	<span style="line-height:1.5;"># su - git</span>
</p>
<p>
	保证web页面有权限显示该仓库内容
</p>
<p>
	<span style="line-height:1.5;">#&nbsp;chmod -R 755 /home/git</span>
</p>
<p>
	<span style="line-height:1.5;"># ssh-keygen -t rsa</span>
</p>
<p>
	<span style="line-height:1.5;"># cp ~/.ssh/id_rsa.pub /tmp</span>
</p>
<p>
	
</p>
<p>
	(2).初始化gitosis
</p>
<p>
	<span style="line-height:1.5;">进入到拷贝过来的id_rsa.pub所在目录</span>
</p>
<p>
	<span style="line-height:1.5;"># cd /tmp</span>
</p>
<p>
	<span style="line-height:1.5;"># gitosis-init &lt; id_rsa.pub</span>
</p>
<p>
	<span style="line-height:1.5;">此时，会在/home/git目录下生成<span>gitosis</span>仓库和配置目录</span>
</p>
<p>
	<span style="line-height:1.5;"># cd /home/git</span>
</p>
<p>
	<span style="line-height:1.5;"># ll</span>
</p>
<p>
	<span style="line-height:1.5;">------------------------</span><span style="line-height:1.5;">------------------------</span><span style="line-height:1.5;">----------------</span>
</p>
<p>
	<span style="line-height:1.5;">drwxr-xr-x 2 git git 4096 Aug 12 13:39 gitosis</span>
</p>
<p>
	<span style="line-height:1.5;">drwxr-xr-x 4 git git 4096 Aug 12 13:39 repositories</span>
</p>
<p>
	<span style="line-height:1.5;">------------------------</span><span style="line-height:1.5;">------------------------</span><span style="line-height:1.5;">---------------</span>
</p>
<p>
	
</p>
<p>
	(3).切换回当前(root)用户
</p>
<p>
	<span style="line-height:1.5;"># exit</span>
</p>
<p>
	
</p>
<p>
	(4).配置权限
</p>
<p>
	<span style="line-height:1.5;">如果想要别人能够clone gitosis-admin.git，需要执行以下操作：</span>
</p>
<p>
	<span style="line-height:1.5;"># chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update</span>
</p>
<p>
	<span style="line-height:1.5;">至此，gitosis的安装工作已完成，其相关配置可以有管理员来操作，然后再提交到服务器上.</span>
</p>
<p>
	
</p>
<p>
	(5)现在可以试一下用初始化 Gitosis 的公钥的拥有者身份 SSH 登录服务器，应该会看到类似下面这样：
</p>
<p>
	<span style="line-height:1.5;"># su - git</span>
</p>
<p>
	<span style="line-height:1.5;">$ ssh git@127.0.0.1</span>
</p>
<p>
	<span style="line-height:1.5;">------------------------------------------------</span>
</p>
<p>
	<span style="line-height:1.5;">PTY allocation request failed on channel 0</span>
</p>
<p>
	<span style="line-height:1.5;">ERROR:gitosis.serve.main:Need SSH_ORIGINAL_COMMAND in environment.</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; Connection to gitserver closed.</span>
</p>
<p>
	<span style="line-height:1.5;">------------------------------------------------</span><span style="line-height:1.5;"></span>
</p>
<p>
	<span style="line-height:1.5;">说明 Gitosis 认出了该用户的身份，但由于没有运行任何 Git 命令，所以它切断了连接。那么，现在运行一个实际的 Git 命令 — 克隆 Gitosis 的控制仓库：</span>
</p>
<p>
	
</p>
<p>
	在你本地计算机上克隆git仓库
</p>
<p>
	<span style="line-height:1.5;"># cd /tmp</span>
</p>
<p>
	<span style="line-height:1.5;"># git clone git@gitserver:gitosis-admin.git</span>
</p>
<p>
	<span style="line-height:1.5;">这会得到一个名为 gitosis-admin 的工作目录，主要由两部分组成：</span>
</p>
<p>
	红色为git仓库配置,蓝色为实际仓库保存的文件
</p>
<p>
	<span style="line-height:1.5;"># cd gitosis-admin</span>
</p>
<p>
	<span style="line-height:1.5;"># ll -a</span>
</p>
<p>
	<span style="line-height:1.5;">----------------------------------------------------------</span>
</p>
<p>
	<span style="line-height:1.5;">total 20</span>
</p>
<p>
	<span style="line-height:1.5;">drwxr-xr-x 4 git git 4096 Aug 12 13:21 .</span>
</p>
<p>
	<span style="line-height:1.5;">drwxr-xr-x 4 git git 4096 Aug 12 13:23 ..</span>
</p>
<p>
	<span style="line-height:1.5;"><span style="color:#E53333;">drwxr-xr-x 8 git git 4096 Aug 12 13:22 .git</span></span>
</p>
<p>
	<span style="line-height:1.5;"><span style="color:#337FE5;">-rwxr-xr-x 1 git git &nbsp;157 Aug 12 13:21 gitosis.conf</span></span>
</p>
<p>
	<span style="line-height:1.5;"><span style="color:#337FE5;">drwxr-xr-x 2 git git 4096 Aug 12 13:20 keydir</span></span>
</p>
<p>
	<span style="line-height:1.5;">-----------------------------------------------------------</span>
</p>
<p>
	以上操作相当于,系统git用户初始化并成为<span>gitosis</span>管理员,且利用其管理员权限将<span>gitosis-admin仓库</span>clone到本地.
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;">5.添加本地用户john和仓库test到gitosis,并和管理员git合作管理gitosis</span>
</p>
<p>
	<span style="line-height:1.5;">1. 用户john添加并发送id_rsa.pub给git</span>
</p>
<p>
	<span style="line-height:1.5;"># su -</span>
</p>
<p>
	<span style="line-height:1.5;"># useradd john &amp; passwd john</span>
</p>
<p>
	<span style="line-height:1.5;"># su - john</span>
</p>
<p>
	<span style="line-height:1.5;">#</span><span style="line-height:1.5;"> ssh-keygen -t rsa</span>
</p>
<p>
	<span style="line-height:1.5;">-----------------------------------------------------------</span>
</p>
<p>
	<span style="line-height:1.5;">Generating public/private rsa key pair.</span>
</p>
<p>
	<span style="line-height:1.5;">Enter file in which to save the key (/home/john/.ssh/id_rsa):&nbsp;</span>
</p>
<p>
	<span style="line-height:1.5;">Created directory '/home/john/.ssh'.</span>
</p>
<p>
	<span style="line-height:1.5;">Enter passphrase (empty for no passphrase):&nbsp;</span>
</p>
<p>
	<span style="line-height:1.5;">Enter same passphrase again:&nbsp;</span>
</p>
<p>
	<span style="line-height:1.5;">Your identification has been saved in /home/john/.ssh/id_rsa.</span>
</p>
<p>
	<span style="line-height:1.5;">Your public key has been saved in /home/john/.ssh/id_rsa.pub.</span>
</p>
<p>
	<span style="line-height:1.5;">-----------------------------------------------------------</span>
</p>
<p>
	<span style="line-height:1.5;">#</span><span style="line-height:1.5;"> cp /home/john/.ssh/id_rsa.pub /tmp</span>
</p>
<p>
	
</p>
<p>
	2. gitosis管理员git分配john权限
</p>
<p>
	# su - git
</p>
<p>
	# mkdir projects
</p>
<p>
	# cd ~/projects
</p>
<p>
	# git clone <a href="mailto:git@node2.example.com">git@node2.example.com</a>:gitosis-admin
</p>
<p>
	# cd gitosis-admin
</p>
<p>
	# cat gitosis.conf
</p>
<p>
	------------------------------------------------
</p>
<p>
	[gitosis]
</p>
<p>
	[group gitosis-admin]
</p>
<p>
	writable = gitosis-admin
</p>
<p>
	members = <a href="mailto:git@node2.example.com">git@node2.example.com</a>
</p>
<p>
	------------------------------------------------
</p>
<p>
	# ls keydir/
</p>
<p>
	-------------------------
</p>
<p>
	<a href="mailto:git@node2.example.com.pub">git@node2.example.com.pub</a>
</p>
<p>
	-------------------------
</p>
<p>
	# cp /tmp/id_rsa.pub keydir/john.pub
</p>
<p>
	# vi gitosis.conf
</p>
<p>
	————————————————————————————————————
</p>
<p>
	[gitosis]
</p>
<p>
	[group gitosis-admin]
</p>
<p>
	writable = gitosis-admin
</p>
<p>
	members = <a href="mailto:git@node2.example.com">git@node2.example.com</a>
</p>
<p>
	[group test]
</p>
<p>
	writable = test
</p>
<p>
	members = <a href="mailto:git@node2.example.com">git@node2.example.com</a> john
</p>
<p>
	————————————————————————————————————
</p>
<p>
	# git add .
</p>
<p>
	# git commit -am "add member john and project foo"
</p>
<p>
	# git push
</p>
<p>
	3. 用户git添加项目test
</p>
<p>
	# su - git
</p>
<p>
	# cd ~/projects
</p>
<p>
	# mkdir test
</p>
<p>
	# cd test
</p>
<p>
	# git init
</p>
<p>
	# echo "Hello World." &gt; hello.txt
</p>
<p>
	# git add hello.txt
</p>
<p>
	# git commit -am 'first commit'
</p>
<p>
	# git remote add origin <a href="mailto:git@node2.example.com">git@node2.example.com</a>:test.git
</p>
<p>
	# git push origin master
</p>
<p>
	4. 用户 john clone test并修改hello.txt
</p>
<p>
	# su - john
</p>
<p>
	# git clone <a href="mailto:git@node2.example.com">git@node2.example.com</a>:test.git
</p>
<p>
	# cd test
</p>
<p>
	# date &gt;&gt; hello.txt
</p>
<p>
	# git commit -am 'add time to hello.txt' &amp;&amp; git push
</p>
<p>
	整个过程分为:
</p>
<p>
	1.通过修改gitosis-admin管理gitosis用户权限,需要clone到本地,然后修改配置文件,最后add push将结果推送到远程实现权限修改.
</p>
<p>
	2.添加系统用户,生成该用户公钥,并将其复制到keydir下,实现该用户有权限进行git等相关操作.
</p>
<p>
	3.登陆该用户账户进行git相关操作,修改完后commit，push到中服务器即可完成仓库权限配置.
</p>
<p>
	
</p>
<p>
	
</p>
<p>
	<strong>七.安装gitweb</strong>
</p>
<p>
	<span style="line-height:1.5;">1.首先我们需要Git的源码，其中带有GitWeb，并能生成定制的CGI脚本：</span>
</p>
<p>
	<span style="line-height:1.5;"># git clone git://git.kernel.org/pub/scm/git/git.git</span>
</p>
<p>
	<span style="line-height:1.5;"># cd git/</span>
</p>
<p>
	<span style="line-height:1.5;"># make GITWEB_PROJECTROOT="/home/git/repositories" prefix=/usr gitweb &nbsp; &nbsp; &nbsp;&nbsp;</span>
</p>
<p>
	<span style="line-height:1.5;"># cp -rf gitweb /usr/local/apache2/htdocs/</span>
</p>
<p>
	<span style="line-height:1.5;color:#E53333;">注: 通过指定 GITWEB_PROJECTROOT 变量告诉编译命令 Git 仓库的位置</span>
</p>
<p>
	
</p>
<p>
	2.设置Apache以CGI方式运行该脚本，并添加一个VirtualHost配置：
</p>
<p>
	<span style="line-height:1.5;">(1).加载apache的vhost配置文件</span>
</p>
<p>
	<span style="line-height:1.5;"># vi /usr/local/apache2/conf/httpd.conf&nbsp;</span>
</p>
<p>
	<span style="line-height:1.5;">搜索包含httpd-vhosts的行,并去掉该行注释.</span>
</p>
<p>
	
</p>
<p>
	(2).加载cgid模块,使其支持perl语言.
</p>
<p>
	<span style="line-height:1.5;"># vi /usr/local/apache2/conf/httpd.conf&nbsp;</span>
</p>
<p>
	<span style="line-height:1.5;">搜索包含mod_cgid.so的行,并去掉该行注释.</span>
</p>
<p>
	
</p>
<p>
	(3).配置VirtualHost
</p>
<p>
	<span style="line-height:1.5;"># vi /usr/local/apache2/conf/extra/httpd-vhosts.conf&nbsp;</span>
</p>
<p>
	<span style="line-height:1.5;">添加如下配置:</span>
</p>
<p>
	<span style="line-height:1.5;">——————————————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;">&lt;VirtualHost *:80&gt;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; ServerName git.example.com</span>
</p>
<p>
	&nbsp; &nbsp; DocumentRoot /usr/local/apache2/htdocs/gitweb
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; &lt;Directory /usr/local/apache2/htdocs/gitweb&gt;</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; &nbsp; &nbsp; Options +ExecCGI</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; &nbsp; &nbsp; AllowOverride All</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; &nbsp; &nbsp; order allow,deny</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; &nbsp; &nbsp; Allow from all</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; &nbsp; &nbsp; AddHandler cgi-script cgi pl</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; &nbsp; &nbsp; DirectoryIndex gitweb.cgi</span>
</p>
<p>
	<span style="line-height:1.5;">&nbsp; &nbsp; &lt;/Directory&gt;</span>
</p>
<p>
	<span style="line-height:1.5;">&lt;/VirtualHost&gt;</span>
</p>
<p>
	<span style="line-height:1.5;">——————————————————————————————————————————</span>
</p>
<p>
	<span style="line-height:1.5;"><br />
</span>
</p>
<p>
	<span style="line-height:1.5;">(4).安装Time/HiRes.pm perl模块</span>
</p>
<p>
	<span style="line-height:1.5;">首次打开web页面报Can't locate Time/HiRes.pm in @INC ….错误</span>
</p>
<p>
	<span style="line-height:1.5;">解决方法:</span>
</p>
<p>
	<span style="line-height:1.5;"># yum install perl-devel perl-CPAN -y</span>
</p>
<p>
	<span style="line-height:1.5;"># perl -MCPAN -e shell&nbsp;</span>
</p>
<p>
	<span style="line-height:1.5;">cpan[2]&gt; install Time::HiRes&nbsp;</span>
</p>
<p>
	<span style="line-height:1.5;">cpan[3]&gt; exit&nbsp;</span>
</p>
<p>
	
</p>
<p>
	(5).重启apache服务
</p>
<p>
	<span style="line-height:1.5;"># /usr/local/apache2/bin/apachectl restart</span>
</p>
<p>
	
</p>
<p>
	(6).修改本机HOST,并打开gitweb页面
</p>
<p><a href="http://git.example.com" rel="nofollow">http://git.example.com</a></p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/QQ20140812-1@2x.png"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/QQ20140812-1@2x-1024x174.png" alt="QQ20140812-1@2x" width="1024" height="174" class="alignnone size-large wp-image-1247" /></a> <a href="http://www.showerlee.com/wp-content/uploads/2014/08/QQ20140812-2@2x.png"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/QQ20140812-2@2x-1024x255.png" alt="QQ20140812-2@2x" width="1024" height="255" class="alignnone size-large wp-image-1248" /></a> <a href="http://www.showerlee.com/wp-content/uploads/2014/08/QQ20140812-3@2x.png"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/QQ20140812-3@2x-1024x190.png" alt="QQ20140812-3@2x" width="1024" height="190" class="alignnone size-large wp-image-1249" /></a>
</p>
<p>
	
</p>
<p>
	<a href="http://www.showerlee.com/wp-content/uploads/2014/08/QQ20140812-5@2x.png"><img onerror="javascript:this.src='http://www.showerlee.com/wp-content/themes/BYMT/images/images_error.jpg'" src="http://www.showerlee.com/wp-content/uploads/2014/08/QQ20140812-5@2x-1024x184.png" alt="QQ20140812-5@2x" width="1024" height="184" class="alignnone size-large wp-image-1251" /></a>
</p>
<p>
	
</p>
<p>
	大功告成....</p>
<div>声明: 本文采用 <a rel="external" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" title="署名-非商业性使用-相同方式共享 3.0 Unported">CC BY-NC-SA 3.0</a> 协议进行授权</div><div>转载请注明来源：<a rel="external" title="DevOps技术分享" href="http://www.showerlee.com/archives/1240">DevOps技术分享</a></div><div>本文链接地址：<a rel="external" title="CentOS6.3下Gitosis安装部署" href="http://www.showerlee.com/archives/1240">http://www.showerlee.com/archives/1240</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.showerlee.com/archives/1240/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
