簡體   English   中英

git / github和Web服務器部署配置

[英]git / github and web server deployment configuration

我正在運行一個Apache Web服務器,並想知道將更改(從github)部署到Web服務器的最佳方法是什么?

/ var / www /現在只能由root寫入。

我應該直接在/ var / www /中使用我的git項目嗎? (所以創建/var/www/.git/?)

但是,當我需要運行命令(即sudo git push)時不起作用(因為我的ssh鍵不在sudo下)。

我自己(而不僅僅是root)制作/ var / www / writable會更好嗎? 或者我應該向root用戶添加ssh密鑰? 或者我應該完全做其他事情?

謝謝。

我使用rsync將本地計算機的內容與服務器同步,如果您只是部署到一台服務器,那么它非常簡單(而且Capistrano太過分了。)。 我把以下別名放在~/.bash_profile

alias eget='rsync -avie ssh matt@example.com:sites/example.com/www/ ~/Projects/example/example.com/www/ --exclude .DS_Store --exclude ".git*" --delete-after'
alias edep='rsync -avuie ssh ~/Projects/example/example.com/www/ matt@example.com:sites/example.com/www/ --exclude .DS_Store --exclude ".git*" --delay-updates --delete-after'

然后,從我本地機器上的git repo。 我做:

git commit -am 'commit some changes'
git pull --rebase # pull any new changes from remote (--rebase prevents an unnecessary merge commit.)
eget -n # confirm which files I've changed

如果它看起來很腥,我可以在沒有-n的情況下進行eget ,然后只需要做一個git diff -w 然后,我可以對我希望保留更改的文件執行git checkout -- path/to/file 然后,我提交了我尚未獲得的服務器上的更改。 只有當服務器上的文件以不同於部署的方式更改時,才會發生這種情況。 否則,您知道本地版本總是比服務器上的文件更新,因此不必擔心覆蓋您本地尚未擁有的服務器上的內容。 繼續...

edep -n # just see what files will be deployed/updated/etc.
edep # looks good. Deploy for real.

完成!

有關詳細信息,請查看rsync(1)Mac OS X手冊頁

另一種選擇是使用Git post-receive hook 但是,你必須在服務器上安裝Git才能做到這一點。 此外,出於安全性和清潔原因,我建議將.git目錄放在公共www目錄之外。 您可以使用Git core.worktree配置選項執行此操作。 例如,從~/git/example.com.git ,執行git init --bare; git config core.worktree ~/sites/example.com/ git init --bare; git config core.worktree ~/sites/example.com/ 這使~/git/example.com.git就像~/sites/example.com/.git目錄一樣。

創建一個中央存儲庫,使用git的分支為不同的目的創建不同的分支,並且永遠不會公開地為您的所有存儲庫提供服務,也不應該公開地提供您的.git目錄(因為這與提供您使用的所有內容相同)代碼或將存儲庫放入公共場所)。 從我自己的經驗來看,這是我推薦的步驟:

  • 為代碼創建中央/中心存儲庫。 (可選,但建議。更好的是使用github.com作為中央存儲庫)。 然后,您可以查看本地部署的本地副本,例如,當您想要在筆記本電腦上重新創建站點時。 沒必要,但非常方便,確保您的網站是便攜式的。 您可以使用暫存存儲庫和暫存分支進行開發。 您還可以使用回購和分支進行生產。

  • 在存儲庫中創建一個顯式公共目錄,該目錄不是存儲庫的根目錄 :例如,在存儲庫中創建/ www /或/ served /或/ public /目錄。 這些內容將由搜索引擎公開提供並可編入索引,因此請注意其中的內容。 假設那里的任何東西都是公共知識,緩存為永恆,並且將成為安全漏洞攻擊的目標(因為這很容易就是事實)。

  • 創建開發者存儲庫:git克隆服務器上的中央存儲庫(例如cd /home/tchal然后是git clone git@github.com:tchalvak/ninjawars.git ),盡管理想情況下是在對開發人員組具有共享權限的文件夾中。

  • 為您的開發站點創建一個符號鏈接: cd /var/www/ln -s /url/to/shared/repository/public/ nickNameForDevSiteHere ,創建僅指向站點的服務/公共文件的符號鏈接,創建一個簡單的發展水平的網站。 (可選,但建議)。 通過這種方式,可以通過一些ip和昵稱輕松訪問開發站點,例如http://10.0.1.123/publicdevelopmentsitenickname而無需真正的域名。

  • 指定實時和部署的代碼提交。 您可能希望為當前“活動”的任何代碼創建live-branch ,只要知道該分支可能必須被周期性地強制覆蓋,例如git branch live-branch git push -f origin live-branch 將其視為代碼的快照,而不是保持穩定的分支。

  • 當您確定開發站點已經過足夠好的測試時,可以通過自定義部署腳本手動部署live-branch代碼,也可以使用在其中簽出實時分支的不同存儲庫,僅為明確公開提供服務內容,類似於開發站點。

    • 在apache中為域名創建虛擬主機。 例如,你可以使用類似的東西: <VirtualHost *> ServerName greatdomain.com ServerAlias www.greatdomain.com DocumentRoot /srv/greatdomain/www/ </VirtualHost>這是一個很大的話題,所以如果你不清楚所有的話題細節,我建議進一步研究在apache中設置虛擬主機。

    • 將DNS指向服務器IP的域名。

總之,您可以非常輕松地使用git使用特定於每個部署類型的分支來部署所有代碼。 無法幫助同步(例如,部署之間的數據庫),但這是您在運行之后可以弄清楚的一個步驟,作為部署站點的第二層,並在此期間手動執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM