上次簡單說了搭建git伺服器,這次來聊聊自動同步部署到專案。這種方式會很方便,比如用在**上,只需要點一下push,線上的**就會同步。這個教程的前提是**放在git伺服器上。
發現之前的文章有幾處錯誤,又經過一大堆測試,直接登入git使用者模擬了一遍操作等,終於找到比較完善的方法了。
檢視專案目錄下的.git
,所屬是否是git
使用者的,如果不是需要修改
chown -r git:git .git
git報錯
[git使用者 g]$ git pull
remote: counting objects: 5, done.
remote: compressing objects: 100% (3/3), done.
remote: total 3 (delta 2), reused 0 (delta 0)
unpacking objects: 100% (3/3), done.
from /git/g
528b0d2..9b2e4c3 master -> origin/master
updating 528b0d2..9b2e4c3
error: unable to unlink old 'index.php'
(permission denied)
沒有許可權更新,解決這個問題可以使用sudo
命令,但這樣又會引出乙個新問題。
sudo問題
你需要先在/etc/sudoers
資料夾中把執行sudo命令的使用者加上,否則會報錯
vim /etc/sudoers
把git使用者加上,並且不需要密碼
git all=
(all)nopasswd:all
但sudo還有乙個問題
[git@使用者 g]$ sudo
git pull
updating 528b0d2..9b2e4c3
fast-forward
index.php | 1 +
1 file changed, 1 insertion(+)
[git@使用者 g]$ ll
-rw-r--r-- 1 root root 5105 aug 14 19:03 index.php
就是使用者和使用者組變成了root
,這樣網頁會打不開顯示拒絕訪問,就不得不使用chown
來更換,所以git鉤子檔案就得這樣寫。
在相應的git專案目錄中,進入hooks
目錄,新建或更改post-receive
檔案,用自己裝的編輯器開啟,使用命令。
vim post-receive
輸入以下資訊
#!/bin/sh
cd /www/wwwroot/mywebsite ||
exit
unset git_dir
sudo
git reset --hard
sudo
git pull origin master
sudo
chown -r www:www *
sudo git reset --hard
是解決報錯your local changes would be overwritten by merge. commit, stash or revert them to proceed
,這是因為拉取**時發現本地**有過修改,所以提示你提交一下專案目錄**,但我們並不要提交,於是使用sudo git reset --hard
可以放棄專案目錄修改(其實不是修改,只是跟git上的不同),讓拉取的**覆蓋專案目錄的**,實現硬更新。
sudo chown -r www:www *
是把當前目錄所有檔案的所有者改為www
使用者和www
使用者組,這個使用者是檔案原本的使用者,如果你的是其他的請自行更改,.git
是隱藏目錄所以不會被修改,但如果被修改需要你再改回來,在下面新增命令sudo chown -r git:git .git
就可以。
這樣就完成了,下次push專案後就會被觸發,自動在mywebsite
目錄下拉取相應分支的更新、更改使用者和使用者組。
像這種更改git
使用者獲取許可權不用密碼的方式,我不確定安全性怎麼樣,還請大佬指教。
部署專案到伺服器
購買伺服器,可以到阿里雲 華為雲等國內一些大型雲服務平台購買,個人推薦國內的ucloud平台,活動多價效比高 購買的伺服器使用liunx作業系統,推薦使用centos 7。有了雲伺服器,還需要乙個網域名稱,通過網域名稱訪問 我想應該沒有人會用自己的ip來訪問吧 購買網域名稱,同樣可以在以上幾個雲服務...
專案部署到伺服器
今天,第一次為工作寫日子,以後肯定會一直記錄,好了,說一下重點吧。如何把已完成的專案部署到伺服器,準備工作,在伺服器上搭建 jdk 和 tomcat 版本根據個人需求,我是 jdk1.7 和 tomcat 7.0 具體怎麼搭建上網查吧。第一步 把自己的專案上傳到伺服器上。我用的是最笨的方法,因為伺服...
git實現webhook 部署到伺服器
簡單利用coding結合git實現webhook 1.建立webhook.php 確保伺服器上能以ssh方式進行git pull操作 確保shell exec能執行,在php.ini中 disable functions 中去掉 shell exec pwd getcwd command cd pw...