2009-07-17 49 views
22

Cách triển khai đúng các ứng dụng từ phát triển đến sản xuất và cách xử lý nhiều cấu hình trang web. Tất cả sự phát triển của tôi được thực hiện thông qua svn nằm tại var/svn/myapp/trunk và mã sản xuất thực tế nằm trong/var/www/myapp.Làm thế nào để triển khai các ứng dụng PHP của bạn một cách chính xác?

Tôi kiểm tra mã mới nhất cho máy cục bộ của mình vào thư mục có tên "myapp_latest_svn". Tôi có mã trang web và vị trí cụ thể trong settings.php chính của mình, trong đó có H_PATH = 'http://myapp.com' & cài đặt cấu hình db cho db_host, db_user_name và db_password giống như bạn biết khác nhau trong cài đặt máy cục bộ (trong đó localhost/myapp. com chỉ là bí danh Apache) & trên máy chủ sản xuất (live site chạy trên myapp.com).

Ngoài ra tệp .htaccess khác với tệp trên máy chủ sản xuất. Tóm lại, có một số khác biệt giữa dev và sản xuất.

Tôi giữ tất cả công việc của mình trong SVN. Mỗi buổi sáng tôi sử dụng SVN Update cập nhật mã mới nhất cho kho lưu trữ svn địa phương của tôi. Khi tôi sẵn sàng phát trực tiếp, tôi xây dựng bản phát hành với cam kết svn.

Sau đó, trong bản phát hành, tôi phải nhớ thay đổi tất cả các tệp dev phù hợp thành đối tác sản xuất của chúng. Bây giờ tôi đã phải chỉnh sửa thủ công các thiết lập production.php & .htaccess để phản ánh các thay đổi cụ thể của trang web.

Tôi đang tìm một cách tự động để chuyển từ dev sang sản xuất hoàn chỉnh với phiên bản và không chỉnh sửa thủ công các tệp dễ mắc lỗi và thực hành không tốt.

Một cách là làm cho phiên bản sản xuất của tệp chỉ đọc (0444). Bằng cách đó khi tôi làm một xuất khẩu svn, chúng không bị ghi đè bởi phiên bản dev của các tệp và tôi không phải lo lắng về việc chỉnh sửa tệp trên mỗi chuyển từ dev sang sản xuất. Nhưng đó là cách làm xấu như tích hợp liên tục.

Cũng bằng cách tạo nhiều bản sao của settings.php (một cho localhost, beta và prod). Sau đó sử dụng một kịch bản shell xuất khẩu từ svn, và sau đó khi xuất xong, nó sẽ thay thế settings.php bằng đúng settings.php, tùy thuộc vào vị trí mà chúng tôi đang triển khai. Bằng cách đó, mọi thứ đều tự động. Nhưng đây cũng là một cách què quặt để đi.

cách cuối là

if(eregi ("myapp.com$", $_SERVER['HTTP_HOST'])){ 

    define('H_PATH', 'myapp.com'); 

} else { 

    define('H_PATH', 'localmyapp.com'); 

} 

Điều này là tốt như xa như settings.php là có liên quan. Nhưng những gì abt .htaccess, u không thể kiểm tra như trên trong .htaccess.

Điều tôi không muốn làm mỗi lần triển khai trang web của mình là tôi phải thay đổi cài đặt.

Lược đồ DB của tôi không có trong phiên bản kiểm soát để db không phải là vấn đề với tôi, chỉ có settings.php và .htaccess.

Ngoài ra làm cách nào tôi có thể yêu cầu svn không cập nhật một số thư mục vì đó cũng là trang web cụ thể (/ log,/cache,/assets,/downloads). Ngoài ra tôi cần phải bảo vệ các apache (www_data) viết truy cập nguyên vẹn cho các tập tin trên là tốt.

Cuối cùng tôi không muốn sao chép thư mục thân trống và tệp .svn vào máy chủ sản xuất khi tôi xuất.

Làm cách nào tôi có thể sử dụng Phing hoặc thậm chí tập lệnh shell để tích hợp mà không gây ra bất kỳ vấn đề nào trong số này khi xây dựng từ svn đến máy chủ sản xuất.

Điều này có thể hữu ích cho nhiều nhà phát triển ứng dụng wannabe trên mạng trong môi trường hoang dã.

Cảm ơn trước,

ocptime

Trả lời

13

tôi muốn khuyên bạn nên nhìn vào Capistrano về tai ương triển khai. Tôi đã sử dụng nó để triển khai các hệ thống PHP, và nó sẽ làm mọi thứ bạn mô tả (với một chút kịch bản làm việc trong công thức triển khai của bạn).

Tôi không giữ bất kỳ tệp cấu hình nào trong repo từ xa - khi tôi thanh toán trong dev, tôi có thể thêm chúng một lần, sau đó bỏ qua chúng để tôi không tự kiểm tra chúng. Khi nói đến việc triển khai, công thức triển khai cap của tôi được thiết lập để nó sẽ ghi các tệp cài đặt vào phiên bản được triển khai. Bằng cách này, tôi không bao giờ phải lo lắng về việc triển khai và thiếu bất cứ điều gì quan trọng.

Cap cũng quản lý mọi nội dung được tải lên (liên kết các thư mục để chúng vẫn tồn tại trên mỗi triển khai) và nó cũng tự động sao lưu tất cả các tệp nội dung và cơ sở dữ liệu triển khai lên Amazon S3. Khá tiện lợi, eh?

+0

lớn liên kết! Cảm ơn! –

+0

Bạn có thể giải thích thư mục tài sản liên kết tượng trưng nào không? – dave1010

2

Tôi lưu trữ tệp cài đặt và .haccess trong SVN với tên tệp được đổi tên, ví dụ: settings.php.example và .htaccess.example. Bằng cách này khi tôi tạo một bản phát hành mới, tôi không cần phải lo lắng về việc ghi đè lên nội dung.

8

Tôi có một nhiệm vụ Phing được gọi là cấu hình, yêu cầu tôi môi trường nào tôi muốn định cấu hình mã cho. Nhiệm vụ chấp nhận nhiều giá trị có thể: địa phương, phát triển, dàn dựng, sản xuất, vv

Khi tôi nói với nó đến môi trường, nó đọc trong file .properties thích hợp (ví dụ local.properties, production.properties, vv)

Bước tiếp theo sẽ là chìa khóa cho bạn: lưu trữ TEMPLATES của tệp cấu hình và htaccess của bạn, sau đó chạy một bộ lọcChọn thay thế nhiệm vụ trên chúng để thẻ của chúng được thay thế bằng các giá trị từ tệp thuộc tính.

Tạo những tập tin này:

common/xây dựng/templates/settings.tpl

define('H_PATH','##H_PATH##'); 
define('ENVIRONMENT', '##ENVIRONMENT##'); 

build/templates/htaccess.tpl

http://##H_PATH## 

xây dựng/tài sản/local.properties

site.H_PATH = localmyapp.com 
site.ENVIRONMENT = local 

build/properties/production.properties

site.H_PATH = myapp.com 
site.ENVIRONMENT = production 

common/build/build.xml

<target name="config"> 
    <input propertyname="env" validargs="local,production">Enter environment name:</input> 
    <property file="build/properties/${environment}.properties" /> 
    <copy file="build/templates/settings.tpl" 
    tofile="config/settings.php" overwrite="true"> 
    <filterchain> 
     <replacetokens begintoken="##" endtoken="##">  
      <token key="H_PATH" value="${site.H_PATH}" /> 
      <token key="ENVIRONMENT" value="${site.ENVIRONMENT}" /> 
     </replacetokens>   
    </filterchain> 
    </copy>  
    <copy file="build/templates/htaccess.tpl" 
    tofile="public/.htaccess" overwrite="true">  
    <filterchain> 
     <replacetokens begintoken="##" endtoken="##">  
      <token key="H_PATH" value="${site.H_PATH}" />               
     </replacetokens>   
    </filterchain> 
    </copy>    
    <echo msg="Configured settings.php and .htaccess for ${environment}" />    
</target>        

Bây giờ khi bạn muốn cấu hình trang web để chạy cục bộ chỉ cần gõ:

phing config 

sau đó gõ:

local 

và nhấn return. Đó là nó! Một lợi ích to lớn của việc này là bạn không còn cần BẤT CỨ nếu/else tuyên bố trong mã của bạn. Thêm vào đó, nó không phụ thuộc vào biến $ _SERVER, vì vậy nó sẽ hoạt động tốt trên dòng lệnh.

0

bạn có thể nghĩ về Capistrano, Magallanes, Deployer, nhưng chúng cũng là kịch bản. Tôi có thể khuyên bạn nên thử walle-web, một công cụ triển khai được viết bằng PHP với yii2 ngoài hộp. Tôi đã lưu trữ nó trong công ty của chúng tôi trong nhiều tháng, nó hoạt động trơn tru trong khi triển khai thử nghiệm, mô phỏng, môi trường sản xuất.

Nó hỗ trợ bạn định cấu hình tác vụ triển khai trước, sau triển khai, sau khi phát hành, sau đó bạn có thể thay đổi cấu hình môi trường của mình, chẳng hạn như cp db_test.php db.php.

enter image description here

nó phụ thuộc vào nhóm các công cụ bash, rsync, git, liên kết, nhưng một ui web nói chung tốt cho hoạt động, có một thử :)

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