2009-04-07 44 views
25

Thực tiễn tiêu chuẩn hiện nay là dành cho các ứng dụng dành cho máy tính để bàn tự cập nhật. Trên máy Mac, mọi chương trình không phải của Apple sử dụng Sparkle trong sách của tôi là giành chiến thắng ngay lập tức. Đối với nhà phát triển Windows, this has already been discussed at length. Tôi chưa tìm thấy thông tin về tự cập nhật các ứng dụng web và tôi hy vọng bạn có thể trợ giúp.Các phương pháp hay nhất để tự cập nhật các ứng dụng PHP + MySQL là gì?

Tôi đang xây dựng một ứng dụng web có nghĩa là được cài đặt như Wordpress hoặc Drupal - giải nén nó trong một thư mục, nhấn một số trang cài đặt, và nó đã sẵn sàng để đi. Để có khả năng tương thích máy chủ rộng, tôi đã được yêu cầu sử dụng PHP và MySQL - đó là ** MP? Trong mọi trường hợp, nó phải là nền tảng đa nền tảng. Đối với ngữ cảnh, đây là một ứng dụng nhắn tin web thống nhất cho các doanh nghiệp nhỏ. Nó không phải là một nền tảng CMS, nghĩ rằng webmail.

Tôi muốn biết về tự cập nhật ứng dụng web. Trước hết, (1) đây có phải là một ý tưởng tồi không? Theo Wordpress 2.7, bản cập nhật tự động là một nút duy nhất, có vẻ dễ dàng, nhưng tôi có thể tưởng tượng ra rất nhiều cách để điều này có thể trở nên khủng khiếp, khủng khiếp. Ngoài ra, không phải là ý tưởng rằng các tập tin web được ghi bởi quá trình web một lỗ hổng bảo mật?

(2) Có xứng đáng với thời gian phát triển không? Có thể có hàng triệu lượt cài đặt WP trên thế giới, vì vậy có thể đáng để thời gian nhóm WP làm cho việc này trở nên dễ dàng, tiết kiệm hàng triệu giờ làm việc trên toàn thế giới. Tôi chỉ có thể tưởng tượng vài nghìn lượt cài đặt phần mềm của mình - là xây dựng bản nâng cấp có đáng để đầu tư thời gian hay tôi có thể giả định rằng người dùng đủ tinh vi để tải xuống và cài đặt phần mềm web ngay từ đầu có thể trải qua danh sách kiểm tra nâng cấp?

Nếu đó không phải là thảm hoạ an ninh hoặc lãng phí thời gian, thì (3) Tôi đang tìm kiếm các đề xuất từ ​​bất kỳ ai đã thực hiện nó trước đây. Bạn có giữ một bảng phiên bản trong cơ sở dữ liệu của bạn? Làm thế nào để bạn quản lý nâng cấp DB? Bạn sử dụng phương pháp nào để quay trở lại một phần nâng cấp trong ngữ cảnh của một ứng dụng web tự cập nhật? Việc sử dụng lớp ORM có giúp dễ dàng hơn hay khó hơn không? Bạn có giữ một đồng bằng của các thay đổi phiên bản hay bạn chỉ thổi ra toàn bộ mọi thứ?

Tôi đánh giá cao suy nghĩ của bạn về điều này.

+0

câu hỏi hay. Tôi nghĩ rằng việc tự nâng cấp không chỉ giảm thời gian cài đặt, mà còn cung cấp cho bạn khả năng khắc phục sự cố bảo mật được phân phối khi đang di chuyển. rất nhiều ứng dụng mã nguồn mở nhận được khối lượng khai thác một khi lỗ hổng bảo mật được tìm thấy. nhưng bạn nói đúng, có rất nhiều thứ có thể sai. nếu người dùng tùy chỉnh mã của họ cho một thì sao? – dqhendricks

+0

Tôi đã hỏi [câu hỏi tương tự] (http://stackoverflow.com/questions/558535/should-a-web-app-have-automatic-updates) một lúc trước có thể hữu ích. – VirtuosiMedia

Trả lời

12

Thành thật mà nói, nó thực sự phụ thuộc vào userbase của bạn. Có rất nhiều ứng dụng PHP không tự động nâng cấp. Người dùng của họ đủ kỹ thuật để xử lý quá trình nâng cấp hoặc không nâng cấp.

Tôi muốn thực hiện hai bước:

1) Nghiêm túc tự hỏi những gì người dùng của bạn có thể thực sự cần. Sẽ tự cập nhật cung cấp đủ của một thúc đẩy để áp dụng để biện minh cho công việc bổ sung? Nếu bạn tự tin câu trả lời là có, chỉ cần làm điều đó.

Vì bạn đang yêu cầu ở đây, tôi đoán bạn chưa biết. Trong trường hợp đó, tôi nhắm mục tiêu bước 2:

2) Phiên bản phát hành 1.0 không có tính năng. Chờ phản hồi của người dùng. Người dùng của bạn có thể khóc ngay lập tức cho một quá trình nâng cấp đơn giản hơn, trong trường hợp đó bạn nên ưu tiên nó. Cách khác, bạn có thể thấy rằng người dùng của bạn quan tâm nhiều hơn đến một số tính năng khác.

Đoán xem người dùng của bạn muốn gì mà không hỏi họ là cách tốt để lãng phí nhiều thời gian phát triển cho những thứ mà mọi người không thực sự cần.

3

Tôi cho rằng bạn đã loại trừ điều này, nhưng bạn có thể lưu trữ nó như một dịch vụ. (Hãy suy nghĩ wordpress.com)

+0

Tôi chưa loại trừ nó; chúng tôi muốn thực hiện cả hai. –

1

Tôi nghĩ tùy chọn tốt nhất của bạn là cơ chế kiểm tra cập nhật sẽ cảnh báo cho quản trị viên khi có (các) bản cập nhật.

Như bạn đã đề cập, có một số vấn đề bảo mật tiềm ẩn. Chỉ vì những người đó, tôi sẽ đề nghị không làm điều này. Thay vào đó, hãy thử tạo một kịch bản nâng cấp khá thông minh.

3

Tôi khuyên bạn nên đóng gói đơn đăng ký của mình với pearset up a channel. Sau đó, người dùng của bạn có thể nâng cấp ứng dụng thông qua giao diện chuẩn (quả lê). Nó không hoàn toàn tự động (trừ khi người dùng có một số loại tự động chạy trên đỉnh của quả lê), nhưng nó là tiêu chuẩn, vì vậy bất kỳ sysadmin nào cũng có thể duy trì nó.

1

Chỉ cần tôi 2 cent: Tôi muốn xem xét một cách tự động tự cập nhật ứng dụng trong CMS của tôi như là một lỗ hổng bảo mật, vì vậy nếu bạn quyết định mã tính năng này, bạn nên xem xét để thực hiện mức độ khác nhau của hành vi này:

  • Tự động cập nhật
  • Kiểm tra các bản cập nhật và thông báo
  • Disable
4

tôi đã suy nghĩ về vấn đề này thời gian gần đây liên quan đến thay đổi sơ đồ cơ sở dữ liệu. Hiện tại tôi đang đào sâu vào WordPress để xem cách họ xử lý các thay đổi cơ sở dữ liệu giữa các bản sửa đổi. Dưới đây là những gì tôi đã tìm thấy cho đến thời điểm này:

$wp_db_version được tải từ wp-includes/version.php. Biến này tương ứng với một số sửa đổi Subversion, và được cập nhật khi wp-admin/includes/schema.php được thay đổi. (Có thể thông qua một cái móc? Tôi không chắc chắn.) Khi wp-admin/admin.php được tải, tùy chọn WordPress có tên db_version được đọc từ cơ sở dữ liệu. Nếu số này không bằng $wp_db_version, wp-admin/upgrade.php sẽ được tải.

wp-admin/includes/upgrade.php bao gồm hàm có tên dbDelta(). dbDelta() quét $wp_queries (một chuỗi các truy vấn SQL sẽ tạo lược đồ cơ sở dữ liệu gần đây nhất) và so sánh nó với giản đồ trong cơ sở dữ liệu, thay đổi các bảng nếu cần để lược đồ được cập nhật.

upgrade.php sau đó chạy một hàm có tên upgrade_all() chạy các hàm upgrade_NNN() cụ thể nếu $wp_db_version nhỏ hơn giá trị đích. (ví dụ: upgrade_250(), bản nâng cấp WordPress 2.5.0, sẽ chạy nếu phiên bản cơ sở dữ liệu ít hơn 7499.) Mỗi ​​chức năng này chạy dữ liệu di chuyển và quy trình dân số của riêng chúng, một số được gọi trong tập lệnh thiết lập cơ sở dữ liệu ban đầu. Độc đáo cắt giảm mã trùng lặp.

Vì vậy, đó là một cách để thực hiện điều đó.

4

Có nó sẽ là một tính năng bảo mật nếu PHP đi và ghi đè tệp của nó từ một số nơi trên internet mà không có cảnh báo. Không đảm bảo rằng máy chủ đang kết nối chính xác với máy chủ cập nhật của bạn (máy chủ có thể tải xuống mã do ai đó tạo ra nếu xảy ra ngộ độc DNS) - cấp cho người khác quyền truy cập vào dữ liệu của khách hàng của bạn. Do đó việc ký số sẽ là quan trọng.

Người dùng có thể kiểm soát cập nhật bằng cách đặt quyền trên thư mục web để PHP chỉ có quyền truy cập đọc vào tệp - quy trình này có thể được ghi lại bằng chương trình của bạn.

Một câu hỏi vẫn còn (tôi thực sự không biết câu trả lời): PHP có thể ghi đè tệp nếu nó hiện đang sử dụng chúng (ví dụ: nếu tệp update.php cần được cập nhật)? Kiểm tra giá trị.

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