2009-08-15 38 views
5

Tôi đã làm việc trong một công ty phát triển web, nơi chúng tôi có các máy địa phương, máy chủ dàn dựng và một số máy chủ sản xuất. Chúng tôi đã làm việc trên các máy mac trong perl và được sử dụng svn để cam kết với stage, và các script perl để tải đến các máy chủ sản xuất. Bây giờ tôi đang làm việc trên dự án của riêng mình và muốn tìm các thực hành tốt cho phát triển web khi sử dụng lưu trữ web chia sẻ và không hoạt động từ môi trường dựa trên Unix (với tất cả phép thuật tôi có thể thực hiện với công việc perl/bash scripting/cron etc)Thực tiễn tốt nhất cho việc triển khai (php/mysql) để chia sẻ lưu trữ?

Vì vậy, câu hỏi của tôi được đưa ra điều kiện của tôi, đó là:

  • tôi đang sử dụng một tiêu chuẩn duy nhất chia sẻ web hosting từ một nhà cung cấp bên ngoài (với truy cập ssh)
  • tôi đang làm việc với ít nhất một người khác và dự định sử dụng SVN để kiểm soát nguồn
  • Tôi đang phát triển php/mysql trong Windows (nhưng sử dụng linux là một khả năng)

Bạn thiết lập đề xuất nào để thử nghiệm, triển khai, di chuyển mã/dữ liệu? Tôi có một máy chủ xampp được cài đặt trên máy địa phương của tôi, nhưng không chắc chắn phương pháp nào sử dụng để di chuyển dữ liệu vv trong cửa sổ.

Trả lời

10

Tôi có một số dự án PHP personnal trên shared-hosting; đây là một vài suy nghĩ, từ những gì tôi đang thực hiện trên một trong những số (một trong những hoạt động nhất và cần một số cách đồng bộ hóa bán tự động ít nhất):

Một vài từ về thiết lập của tôi :

  • Cách đây một thời gian, tôi có mọi thứ trên SVN; bây giờ, tôi đang sử dụng bazaar; nhưng ý tưởng là giống hệt nhau (ngoại trừ, với chợ, tôi có lịch sử địa phương và tất cả những gì)
  • Tôi có một truy cập ssh vào máy chủ sản xuất, như bạn làm
  • Tôi làm việc trên Linux exclusivly (vì vậy , những gì tôi làm có thể không phải là dễ dàng với các cửa sổ)

Bây giờ, làm thế nào tôi làm việc:

  • Tất cả những gì có thể te trên production server (mã nguồn, hình ảnh, .. .) được cam kết để SVN/bazarr/bất cứ điều gì
  • Tôi làm việc tại địa phương, với Apache/PHP/MySQL (tôi sử dụng một bãi chứa của DB sản xuất mà tôi nhập khẩu tại địa phương một lần trong một thời gian)
  • Tôi là người duy nhất làm việc trên dự án đó; nó có lẽ sẽ ổn cho một nhóm nhỏ gồm 2/3 người phát triển, nhưng không được nhiều hơn.

Những gì tôi đã làm trước đây:

  • tôi đã có một số kịch bản PHP mà kiểm tra các máy chủ SVN sửa đổi giữa "phiên bản cuối cùng đẩy vào sản xuất" và ĐẦU
    • Tôi đoán tự chế này Tập lệnh PHP trông giống như tập lệnh Perl bạn hiện đang dùng usng ^^
  • Tập lệnh đó tạo danh sách các thư mục/tệp để tải lên sản xuất
  • Và tải lên những người đó qua quyền truy cập FTP
  • Điều này không thực sự thỏa mãn (có lỗi trong tập lệnh của tôi, tôi giả sử; Tôi không bao giờ dành thời gian để sửa những người đó); và buộc tôi phải nhớ số phiên bản của thời gian tôi cuối cùng đẩy sản xuất (tốt, nó được tự động lưu trữ trong một tập tin bằng kịch bản, vì vậy không phải là khó ^^)

Những gì tôi làm bây giờ:

  • Khi chuyển sang Bazaar, tôi không muốn viết lại rằng kịch bản, mà không làm việc rất tốt anyway
  • tôi đã giảm kịch bản hoàn toàn
  • Như tôi đã có quyền truy cập ssh vào máy chủ sản xuất , Tôi sử dụng rsync để đồng bộ hóa từ máy phát triển của tôi đến máy chủ sản xuất, khi những gì tôi có tại địa phương được coi là ổn định/sẵn sàng sản xuất.

Một vài ghi chú về cách mà những điều thực hiện:

  • Tôi không có một dàn máy chủ: thiết lập địa phương của tôi là đủ gần để một
  • Không có một dàn máy chủ của sản xuất được bật đèn xanh cho một dự án đơn giản với một hoặc hai developpers
  • Nếu tôi đã có một dàn máy chủ, tôi có thể đi với:
    • làm một "svn update" vào nó khi bạn muốn sta ge
    • khi nó là OK, khởi động lệnh rsync từ dàn máy chủ (mà sẽ ba tại phiên bản "ổn định" mới nhất, do đó OK để bị đẩy vào sản xuất)
  • Với một dự án lớn, với hơn developpers, tôi có lẽ sẽ không đi với loại thiết lập đó; nhưng tôi thấy nó khá ổn cho một dự án personnal (không quá lớn).


Điều duy nhất "đặc biệt" ở đây, có thể là "hướng linux" đang sử dụng rsync; một tìm kiếm nhanh dường như cho thấy có một tệp thực thi rsync có thể được cài đặt trên các cửa sổ: http://www.itefix.no/i2/node/10650

Tôi chưa bao giờ thử nó.


Là một sidenote, đây là những gì lệnh rsync của tôi trông giống như:

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/ 

Tôi đang sử dụng các phím private/public mecanism, vì vậy rsync không yêu cầu mật khẩu, btw.

Và, tất nhiên, tôi thường sử dụng các lệnh tương tự trong chế độ "khô hạn" đầu tiên, để xem những gì đang xảy ra để được synchorised, với tùy chọn "--dry-run"

ignore-rsync.txt chứa một danh sách tập tin mà tôi không muốn bị đẩy vào sản xuất:

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

Ở đây, tôi chỉ ngăn chặn các thư mục bộ nhớ cache để được đẩy vào sản xuất - có vẻ hợp lý để không gửi những, như dữ liệu sản xuất là không giống như phát triển dữ liệu.

(Tôi chỉ nhận thấy bạn vẫn có ".svn" trong tập tin này ... Tôi có thể loại bỏ nó, như tôi đã không sử dụng SVN nữa cho dự án mà ^^)


Hope điều này giúp một chút ...

+1

Cảm ơn rất nhiều. Nó vẫn làm tôi kinh ngạc đôi khi những nỗ lực mà mọi người thích mình đưa vào câu trả lời với những chi tiết và sự rõ ràng đó. – zenna

+1

Bạn được chào đón :-) (Một số câu trả lời tôi nhận được và/hoặc thấy tôi ngạc nhiên quá ;-) vì vậy, khi tôi có thể giúp ... tốt, đó là những gì SO là dành cho!) –

1

Về SVN, tôi đề nghị bạn nên đi với một máy chủ SVN chuyên dụng như cây đậu hoặc sử dụng cùng một máy chủ để chạy máy chủ SVN để cả hai nhà phát triển có thể làm việc.

Trong trường hợp sau, tập lệnh triển khai của bạn chỉ đơn giản là di chuyển các bit vào thư mục web dàn dựng (có thể truy cập qua beta.mysite.com) và sau đó một tập lệnh triển khai khác có thể di chuyển đến thư mục web trực tiếp. Triển khai trực tiếp đến trang web trực tiếp rõ ràng không phải là một ý tưởng hay.

Nếu bạn quyết định đi với một máy chủ chuyên dụng hoặc muốn triển khai từ máy tính của bạn đến máy chủ, hãy sử dụng rsync. Đây cũng là thiết lập hiện tại của tôi. RSync không đồng bộ hóa vi phân (qua SSH), vì vậy nó nhanh chóng và nó được xây dựng cho loại công cụ này.

Khi bạn phát triển, bạn có thể bắt đầu sử dụng các công cụ xây dựng với các bài kiểm tra đơn vị và không có gì. Điều này chỉ để lại vấn đề đồng bộ hóa dữ liệu.

Tôi chỉ đồng bộ dữ liệu từ xa -> cục bộ và sử dụng tệp lô DOS thực hiện điều này qua SSH bằng cách sử dụng mysqldump. Cygwin rất hữu ích cho các máy Windows nhưng bạn có thể bỏ qua nó. Tập lệnh nhập SQL cũng chạy một truy vấn một dòng để cập nhật một số ô như tên máy chủ và gốc web để triển khai cục bộ.

Khi bạn đã thiết lập này, bạn có thể tập trung vào việc viết mã và triển khai từ xa hoặc đồng bộ hóa cục bộ và triển khai trở thành một quy trình một lần nhấp.

+0

Cảm ơn, tôi đã sử dụng assembla cho máy chủ SVN, vì vậy tôi không thể thực thi các tập lệnh trên máy chủ đó. – zenna

+0

Vì mã được đồng bộ hóa trên máy của bạn, bạn có thể chạy các tập lệnh khỏi máy của riêng bạn (hoặc đối tác của bạn có thể chạy chúng trên máy của mình). Các kịch bản cũng có thể được kiểm tra trong kho. – aleemb

1

Một tùy chọn là sử dụng khung chuyên dụng cho tác vụ. Capistrano phù hợp rất tốt với các ngôn ngữ kịch bản như php. Nó dựa trên Ruby, nhưng nếu bạn thực hiện tìm kiếm, bạn sẽ có thể tìm thấy hướng dẫn về cách sử dụng nó để triển khai các ứng dụng php.

Các vấn đề liên quan