問題1:它們指的是遠程服務器上的用戶。
問題2:這取決於兩種情況:1.您需要添加本地用戶的公鑰以推送到遠程服務器。 2.如果需要將ssh部署到其他服務器,則需要將公鑰添加到運行post-receive hook的本地用戶。最有可能的只有1個是你的問題,2不是因爲遠程服務器將容納遠程git倉庫和www服務器。
這意味着您將公鑰添加到linux/unix環境中的authorized_keys文件中。該文件通常位於/home/$USER/.ssh/authorized_keys中authorized_keys文件與用戶的known_hosts文件位於同一目錄中。
問題3:他們正在解釋如何設置遠程git存儲庫。它不需要與本地存儲庫位於同一路徑。
好的 - 現在來澄清這裏實際發生了什麼。本教程將教您如何設置遠程存儲庫,每次推送時都會部署jekyll安裝。
這意味着如果你有一個github repo,你不能在那裏設置服務器端鉤子。而是你會在你的遠程服務器上建立一個新的遠程。所以說,你登錄到你的服務器(使用ssh典型值),運行pwd
學習您的完整路徑,或將其設置在環境變量:
$DIR=`pwd`
現在,你可以在此服務器上創建一個裸露的回購協議:
git init --bare $DIR/<SOMEDIRNAME>.git
現在,您的服務器上已有遠程裸Git存儲庫。接下來,您需要添加該鉤子,以便在接收推送時部署您的Jekyll站點。你列出的網站有一個相當簡單的部署,但基本上它所做的一切就是使_site目錄服務html頁面,你可以通過多種方式做到這一點,我建議你儘可能地在不中斷用戶的情況下做到這一點,在這裏是一個示例腳本可能會做這樣的事情:
#!/bin/bash
# Assuming a directory structure for www:
# $www_root/releases
# $www_root/shared
# $www_root/current
# all releases go in releases dir as timestamps dirs
# any logs or other shared items go in shared dir - shared/logs
# current is a symlink to latest release
unset GIT_DIR
WWW_ROOT=/PATH/TO/WWW
REPO_PATH=/PATH/TO/REPO
REPO_BRANCH=master
SITE_DIR=/PATH/TO/_SITE/DIR/IN/REPO
DATE=$(date +"%Y%m%d%H%M")
# get code
if [ ! -d $WWW_ROOT/shared/git_maint ]; then
mkdir -p $WWW_ROOT/shared/git_maint
cd $WWW_ROOT/shared/git_maint
git clone $REPO_PATH $WWW_ROOT/shared/git_maint
git checkout master
else
cd $WWW_ROOT/shared/git_maint
git pull
git checkout master
fi
# do deploy
if [ ! -d $WWW_ROOT/releases/$DATE ]; then mkdir $WWW_ROOT/releases/$DATE; fi
cp -ar $WWW_ROOT/shared/git_maint/$SITE_DIR $WWW_ROOT/releases/$DATE
ln -s $WWW_ROOT/new_current $WWW_ROOT/releases/$DATE && mv $WWW_ROOT/new_current $WWW_ROOT/current
exit 0
喜歡的東西,這將是一個很好的部署。如果您將此腳本保存在遠程服務器上的裸回購鉤子/接收後文件中,則每次將存儲庫推送到該文件時都會運行該腳本。只記得,使其可執行的:chmod 755 hooks/post-receive
所以,如果你這個新的遠程與添加到您的git回購:
git remote add DEPLOY_PROD [email protected]:/path/to/bare/repo
然後git push DEPLOY_PROD
- 這將推動遠程,然後遠程回購將觸發它後獲得掛鉤,然後將裸露的repo複製到維護目錄,幾乎在任何時候都可以將其刪除。該目錄然後用於將站點目錄cp到一個發佈目錄,然後鏈接到主目錄。
當然,所有這些都很可能過量使用,您可以創建一個從本地主機運行的部署腳本,通過ssh完成所有這些。
問題是您無法直接從github運行服務器端鉤子,因此您必須解決此問題。我建議你查看capistrano作爲部署策略 - 當前/發佈/共享目錄和git_maint目錄是從他們的模式中提取的,它運行良好。
讓我知道如果你想在這裏得到任何幫助,我有很多開發部署和自動化部署策略的經驗,所以根據你的情況,事情會有所不同。
謝謝,我會試一試,讓你知道它是如何工作的。感謝你的幫助。 – Leahcim
git倉庫中的鉤子目錄中沒有post-receive文件。只有'applypatch-msg.sample post-update.sample pre-commit.sample pre-rebase.sample commit-msg.sample pre-applypatch.sample prepare-commit-msg.sample update.sample' – Leahcim
你可以創建這個文件 - 這只是在git收到包後運行的腳本。只需將它命名後 - git將完成剩下的工作。 – Michael