前言:本教程只面向那些我的開發者,想要本身在
linux
上搭建一個git
中央倉庫用來上傳發布本身的項目。可是對於團隊來講可能有更高的要求,可使用gitlab
搭建一個可視化的相似github
的版本管理系統linux
我使用的linux
版本是Centos7
,若是你們使用的是其餘發行版本,步驟也都是同樣的git
Centos
上使用的是yum
的安裝方式github
yum install -y git
1.建立git
用戶shell
adduser git
2.設置用戶密碼vim
passwd git
3.禁止shell
登陸centos
vim /etc/passwd
找到git
用戶的那一行並進行修改安全
將 git:x:1001:1001:,,,:/home/git:/bin/bash 修改成 git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
這樣一來剛建立git
用戶能夠正常經過ssh
使用git
,可是沒法登陸shell
,會更加的安全bash
1.客戶端建立私鑰和公鑰服務器
ssh-keygen -t rsa -C "12345678@qq.com"
建立後你的用戶主目錄下面就有個.ssh
文件夾,裏面的id.rsa
就是私鑰,id.rsa_pub
就是公鑰。公鑰裏面的內容待會要用到ssh
2.git
服務器打開RSA驗證
vim /etc/ssh/sshd_config
找到並去掉前面的#
號
RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
最後效果如圖所示
3.在git
用戶的主目錄裏新建.ssh
文件夾,而後在文件夾裏面新建文件authorized_keys
cd /home/git mkdir .ssh cd .ssh vim authorized_keys
4.將客戶端的id.rsa_pub
公鑰寫進文件authorized_keys
,一行一個。添加了這個之後你鏈接中央倉庫就不須要輸入密碼了,直接使用公鑰和私鑰的驗證方式
1.進入git
用戶主目錄
cd /home/git
2.建立一個裸倉庫 (通常以.git
結尾)
git init --bare test.git #以test.git爲例子,固然你能夠叫任意名字
裸倉庫是沒有工做區的,純粹爲了共享
3.修改倉庫用戶屬主
chown -R git:git test.git
git hook
中央倉庫其實只是一箇中介,若是你想要把中央倉庫的代碼關聯到你域名掛載下的文件夾時候,就須要使用到
git
的鉤子來實現,當客戶端提交代碼到中央倉庫,中央倉庫能將代碼也推送到另外的一個文件夾下面
1.在服務器初始化一個本地倉庫
這個倉庫就是你虛擬主機指定的文件夾,也就是你輸入域名後會訪問到的那個文件夾
cd /var/www #進入你虛擬主機的掛載目錄 git init #初始化git git remote add origin /home/git/test.git #添加遠程倉庫到隔壁的中央倉庫(滑稽) chown -R git:git /var/www #修改服務器本地倉庫的用戶屬組
2.在中央倉庫中設置鉤子
進入遠程倉庫的鉤子目錄
cd /home/git/test.git/hooks
新建一個文件post-receive
vim post-receive
編寫shell
腳本
#!/bin/sh unset GIT_DIR DeployPath=/var/www #這裏的目錄是你本身虛擬主機的目錄 cd $DeployPath git add . -A && git stash git pull origin master
固然你也能夠視狀況而定,將這個腳本編寫得更增強大
給文件post-receive
添加可執行權限
chmod +x post-receive
這應該也是你們最期待的步驟了,實現本地提交代碼上服務器,經過鉤子實現項目的自動部署
其實到了這一步,就和你之前使用git
上傳代碼到github
上面沒有什麼區別了
1.克隆中央倉庫
方法一 git clone git@192.168.229.130:test.git #把ip換成你本身服務器的ip 方法二 git init git remote add origin git@118.89.28.249:test.git #把ip換成你本身服務器的ip
2.推送遠程服務器 (第一次加上-u參數)
git push -u origin master
經過上面的這些步驟其實就能夠實現一個簡易的git
服務器了,是否是很簡單呢?