2009-08-15 59 views
5

我曾在一家網站開發公司工作過,我們擁有本地機器,登臺服務器和大量生產服務器。我們在perl中使用mac,並使用svn提交階段,並將perl腳本加載到生產服務器。現在我正在開發自己的項目,並希望在使用共享虛擬主機時不要使用基於unix的環境(使用perl/bash腳本/ cron作業等所有功能)來尋找Web開發的良好實踐。(php/mysql)部署到共享主機的最佳做法?

所以我的問題是給我的條件,它們分別是:

  • 我使用共享網絡的單一標準從外部供應商託管(通過SSH訪問)
  • 我有至少一個其他人的工作並打算使用SVN進行源代碼管理
  • 我在Windows下開發php/mysql(但使用linux是可能的)

你建議測試,部署,代碼/數據遷移的建議是什麼?我在本地機器上安裝了xampp服務器,但不確定哪些方法用於在Windows下遷移數據等。

回答

10

我有一些PHP個人項目共享託管;這裏有幾個想法,從我正在做的其中一個(最活躍的一個,需要一些至少半自動化的同步方式)

有關我的設置:

  • 前段時間,我把所有東西都放在SVN上;現在,我正在使用bazaar;但這個想法是完全一樣的(除了與商場,我有當地的歷史和所有)
  • 我必須到生產服務器的SSH訪問,像你這樣
  • 我工作在Linux上exclusivly (所以,我做什麼,可能無法與Windows一樣容易)

現在,我是如何工作的:有

  • 一切TE是生產服務器(源代碼,圖像上,.. )將提交給SVN/bazarr /不管
  • 我在本地工作,與Apache/PHP/MySQL的(我用的是生產DB的轉儲,我在一段時間導入本地一次)
  • 只有我一個在這個項目上工作;對於2/3開發人員的小團隊來說,這可能是可以的,但不會更多。

我所做之前:

  • 我有這樣的檢查SVN服務器之間進行一些修改PHP腳本「最後一次修訂推到生產」和HEAD
    • 我猜這自制PHP腳本看起來像您當前使用的Perl腳本^^
  • 該腳本構建了要上傳到生產的目錄/文件列表
  • 並通過FTP上傳這些訪問
  • 這不是很令人滿意(我的腳本中有錯誤,我從來沒有花時間去糾正這些);並強迫我記得我最後一次推送到生產時間的版本號(當然,它會自動存儲在由腳本文件,所以並不難^^)

我現在在做什麼:

  • 當切換到商場,我不想重寫劇本,這不我已經放棄了腳本完全
  • 當我有到生產服務器ssh訪問工作得很好反正
  • ,我使用rsync進行同步從我的開發機到生產服務器,當我已在本地被認爲是穩定/生產就緒。

有關的做的事情,這樣對夫婦的注意事項:

  • 我沒有中間服務器:我的本地設置是足夠接近生產不是有一個
  • 臨時服務器爲一個或兩個developpers
  • 如果我有一個臨時服務器一個簡單的項目好,我可能會一起去:
    • 當你想要做的STA上有一個「SVN更新」 GE
    • ,如果是OK,啓動從臨時服務器的rsync命令(其將在最新的「穩定」修訂BA,這樣可以被推到生產)
  • 一個比較大的項目,更開發人員,我可能不會去那種設置;但我覺得這對一個(不太大)的人際項目來說確實很不錯。


這裏唯一的「特殊」,可能是「面向Linux」使用rsync;快速搜索似乎表明有一個可以在Windows上安裝了rsync的可執行文件:http://www.itefix.no/i2/node/10650

我從來沒有嘗試過,但。


一點題外話,這裏就是我的rsync命令看起來像:

rsync --checksum \ 
    --ignore-times \ 
    --human-readable \ 
    --progress \ 
    --itemize-changes \ 
    --archive \ 
    --recursive \ 
    --update \ 
    --verbose \ 
    --executability \ 
    --delay-updates \ 
    --compress --skip-compress=gz/zip/z/rpm/deb/iso/bz2/t[gb]z/7z/mp[34]/mov/avi/ogg/jpg/jpeg/png/gif \ 
    --exclude-from=/SOME_LOCAL_PATH/ignore-rsync.txt \ 
    /LOCAL_PATH/ \ 
    [email protected]:/REMOTE_PATH/ 

我使用私有/公共密鑰mecanism,所以rsync的不要求輸入密碼,順便說一句。

,當然,我一般在「幹運行」模式下使用相同的命令第一,看什麼將要synchorised,還可以選擇「--dry-run

而且ignore-rsync.txt包含的列表我不希望文件推送到生產:

.svn 
cache/cbfeed/* 
cache/cbtpl/* 
cache/dcstaticcache/* 
cache/delicious.cache.html 
cache/versions/* 

在這裏,我只是防止緩存目錄被推到生產 - 似乎是合乎邏輯不發送這些,因爲生產數據是不一樣的發展數據。

(我只注意到有仍然是「.svn」在這個文件......我可以去掉它,因爲我不使用SVN了該項目^^)


希望這有助於有點...

+1

非常感謝。有時候,像你這樣的努力讓我感到驚訝,並以這樣的細節和清晰度給出答案。 – zenna 2009-08-15 14:17:30

+1

不客氣:-)(我得到的一些答案和/或看到我感到驚訝;-)所以,當我可以幫助...嗯,這就是爲什麼! ) – 2009-08-15 14:25:41

1

關於SVN,我會建議你去一個專門的SVN主機像豆莖或使用同一臺服務器運行一個SVN服務器,這樣既可以開發工作過它。

在後一種情況下,你的部署腳本只會位移至暫存Web文件夾(通過beta.mysite.com訪問),然後又部署腳本可以將其移至實時Web目錄。直接部署到實況網站顯然不是一個好主意。

如果你決定使用一個專用的主機或想從你的機器部署到服務器,使用rsync。這也是我目前的設置。 RSync做差異同步(通過SSH),所以它很快,它是爲這種東西而建造的。

當你成長,你就可以開始使用建立單元測試和諸如此類的東西的工具。這隻留下數據同步問題。

我只從遠程 - >本地同步數據,並使用DOS批處理文件通過SSH使用mysqldump來完成此操作。 Cygwin對Windows機器很有用,但可以跳過它。 SQL導入腳本還運行單行查詢來更新某些單元,例如用於本地部署的主機名和Web根。

一旦你有了這個設置,您可以只專注於編寫代碼和遠程部署或本地同步和deployement成爲一個點擊過程。

+0

謝謝,我一直在使用SVN主機的組合,所以我不能真正在該服務器上執行腳本。 – zenna 2009-08-15 14:18:24

+0

由於代碼在您的機器上同步,所以您可以將腳本從您自己的機器上運行(或者您的合作伙伴可以在他的機器上運行它們)。腳本也可以簽入到軟件倉庫。 – aleemb 2009-08-15 22:47:22

1

一種選擇是使用專用框架的任務。 Capistrano非常適合腳本語言,如php。它基於Ruby,但如果您執行搜索,則應該能夠找到有關如何使用它來部署php應用程序的說明。

相關問題