2011-12-16 109 views
6

我們如何做的事情現在尋找部署PHP代碼

我們有一個文件服務器(使用NFS)多個Web服務器安裝和使用這些坐騎作爲Web根目錄的安全方式。當我們部署我們的代碼庫時,我們將SCP檔案(tar.gz)發送到NFS服務器,並直接在文件服務器的「網絡目錄」中解壓縮數據。

問題

在部署過程中,我們已經看到了一些I/O錯誤,大多是當一個請求的文件無法讀取:Smarty error: unable to read resource: "header.tpl"這些錯誤似乎消失部署完成後,讓我們假設這是因爲將數據直接解壓到Web目錄並不是最安全的事情。我猜我們需要一些原子。

我的問題

我們如何能夠以原子新的文件複製到現有的目錄(Web服務器的根目錄)?

編輯

,我們是不妥協到web目錄中的文件是不是在目錄中的唯一文件。我們正在將文件添加到已存在文件的目錄中。因此,複製目錄或使用符號鏈接不是一個選項(我知道)。

+1

重命名爲原子(MV),也可能它的最好使用軟鏈接而實際的網絡目錄只是一個鏈接到/storage/www.revision.3282378例如 – jackdoe 2011-12-16 19:18:15

回答

1

這就是我所做的。

DocumentRoot的是,例如,/var/www/sites/www.example.com/public_html/:

cd /var/www/sites/www.example.com/ 
svn export http://svn/path/to/tags/1.2.3 1.2.3 
ln -snf 1.2.3 public_html 

你可以很容易地修改這個不斷變化的符號鏈接,而不是之前擴展名爲.tar.gz從svn出口。重要的部分是變化是符號鏈接的原子應用。

0

爲什麼你不只是有兩個不同版本的網站2個目錄。因此,當您在site_2中完成部署時,您只需在您的web服務器配置(例如apache)中切換站點目錄並將所有文件複製到site_1目錄。然後,您可以使用相同的方法在site_1目錄中進行部署,並從site_2進行切換。

+0

我想這裏提到的東西是最快的方法。複製你的新東西到一個臨時文件夾,然後重命名原來的和新的/臨時文件夾(這將不需要太多時間)。 – djot 2011-12-16 19:10:17

+0

查看我的編輯 - 我們還有其他必須保留的文件(營銷網站)和大量(> 40GB的用戶生成的內容),我不想一直複製它... – mmattax 2011-12-17 02:56:50

0

rsync的誕生跑......呃...... 我的意思做的這事

rsync的作品在本地文件系統和ssh - 這是非常強大和快速 - 僅發送/複印更改文件。

它可以配置爲刪除任何已刪除的文件(或者只是簡單地從源文件中缺少),或者可以配置爲使它們保持獨立。您可以設置排除列表,以便在同步時排除某些文件/目錄。

這是link to a tutorial

回覆:原子 - link to another question on SO

+0

它的價值,我在多個網站上使用它可以在過去的2年內部署代碼而不會出現任何錯誤(我記錄和發送電子郵件錯誤) - 沒有丟失文件通知/錯誤 - 只需簡單的單一命令和命令行腳本部署即可。 – 2011-12-16 19:33:56

0

我喜歡NFS想法。我們將代碼部署到我們前端的NFS服務器上。事實上,我們在發佈新版本時運行一個shell腳本。我們做什麼用的符號鏈接電流的最後一個版本目錄,像這樣的:

/fasmounts/website/current -> /fasmounts/website/releases/2013120301/ 

和Apache文檔根目錄爲:

/fasmounts/website/current/public 

(其實Apache的文檔根目錄爲/ var/WWW這是一個符號鏈接到/ fasmounts /網站/當前/公共)

shell腳本更新當前符號鏈接到新版本後,一切都已正確上傳。

1

我認爲rsync是一個更好的選擇,而不是scp,只有被更改的文件會被同步。但是通過腳本部署代碼對於團隊中的發佈來說並不方便,並且部署中的錯誤不是人性化的。

你可以考慮Capistrano,Magallanes,Deployer,但它們也是腳本。我可能會建議你試一試walle-web,這是一個使用yii2開箱即用PHP編寫的部署工具。我已經在我們公司託管了好幾個月,它在部署測試,模擬和生產環境的同時運行順利。

這取決於bash的工具,rsync的,git的,鏈路組,但Web UI的普遍好評操作,試試:)