Cách tiếp cận tốt để đóng gói các ứng dụng web PHP cho Debian


15

Nhiều ứng dụng web PHP theo mô hình này để cài đặt và nâng cấp:

  1. Un-tar một nguồn tar bóng.
  2. Điểm Apache tại nguồn.
  3. Điều hướng một trình duyệt web đến trang chủ.
  4. Đi qua một số trang web thiết lập (ví dụ: kiểm tra sự tồn tại của thư viện, yêu cầu thông tin kết nối cơ sở dữ liệu, tạo hoặc cập nhật lược đồ cơ sở dữ liệu, v.v.).
  5. Người dùng đổi tên một install/thư mục thành một cái khác để ứng dụng biết nó đã được cài đặt.

Tôi không thấy bất kỳ cách (đơn giản) nào để tạo gói Debian ra khỏi điều này mà không khiến người dùng cài đặt gói phải trải qua nhiều bước thủ công ở trên. Lưu ý rằng tôi không phải là nhà phát triển trên ứng dụng nên tôi không ở vị trí để thực hiện thay đổi trực tiếp về cách cài đặt ứng dụng hoạt động.

Cách tiếp cận điển hình để đóng gói một ứng dụng như vậy là gì?


1
Tôi không chắc ý của bạn về gói Debian, nhưng bạn đã xem qua Trình soạn thảo chưa? getcomposer.org
CamelBlues

Câu trả lời:


19

Tôi đã tạo một số ứng dụng web PHP mà tôi phân phối (nội bộ) thông qua các gói Debian. Làm như vậy rất đơn giản nhờ các tập lệnh (được đơn giản hóa tại đây) để tự động hóa quy trình:

tạo_package.sh :

# create a clean debian package directory
rm -rf debian
mkdir -p debian/DEBIAN
mkdir -p debian/var/www/myapp

# populate the debian directory
cp control    debian/DEBIAN
cp myapp.php  debian/var/www/myapp
cp index.html debian/var/www/myapp

# finish through fakeroot so we can adjust ownerships without needing to be root    
fakeroot ./finish_package.sh debian .

finish_package.sh :

# $1 is the debian directory, $2 is the output directory

# adjust ownerships
chown -R root:root $1
chown -R nobody:nobody $1/var/www/myapp

# finally build the package
dpkg-deb --build $1 $2

kiểm soát :

Package: myapp
Version: 1.2.3
Maintainer: Your Name <yourname@email.com>
Architecture: all
Depends: apache2, php5
Description: The myapp web application.

Tất cả điều này khá dễ thực hiện và hoạt động tốt cho phân phối gói nội bộ mà tôi làm. Tôi không chắc nó đủ để phân phối toàn cầu, nhưng nó có thể giống với những gì người Ubuntu và Debian làm khi họ lấy các gói nguồn (có thể được phân phối dưới dạng tarball với các tập lệnh cài đặt) và tạo các gói .deb cho họ.

Tôi nghĩ rằng điều này có thể giải quyết năm điểm của bạn trơn tru:

  1. Gói Debian tự động giải nén vào vị trí thích hợp trên hệ thống đích khi nó được cài đặt.

  2. Bạn có thể có gói Debian cấu hình Apache tự động. Một số gói như MySQL và Apache có các thư mục "conf.d" trong / etc để bạn có thể thả các tệp cấu hình. Đây là lý tưởng. Tập lệnh đóng gói của bạn có thể tạo thư mục debian / etc / apache2 / conf.d và sao chép tệp cấu hình trong đó. Nó sẽ được cài đặt trên hệ thống đích và bạn có thể khởi động lại Apache trong một tập lệnh gọi là postinst mà bạn đặt trong debian / DEBIAN.

  3. Điều này có lẽ là không thể tránh khỏi nếu phải nhập thông tin tùy chỉnh, mặc dù nhiều hệ thống thích có thể chạy "ra khỏi hộp" mà không cần cấu hình.

  4. Sự tồn tại của thư viện có thể được đảm bảo bằng cách bao gồm các phụ thuộc gói thích hợp trong tệp điều khiển. Thông tin kết nối cơ sở dữ liệu có thể được cài đặt làm mặc định hoặc yêu cầu của quản trị viên trên các trang cấu hình. Sau khi nhập, các trang cấu hình sẽ gọi các tập lệnh di chuyển cơ sở dữ liệu idempotent để cập nhật lược đồ cơ sở dữ liệu. Một số khung web (như Django) làm cho điều này trở nên dễ dàng.

  5. Mã đằng sau các trang cấu hình nên đánh dấu hệ thống là được cấu hình, không phải quản trị viên.

Một cách tiếp cận đôi khi tôi sử dụng là tách cài đặt cấu hình khỏi cài đặt ứng dụng bằng cách đặt chúng thành các gói riêng biệt. Sau đó tôi có thể có một số gói cấu hình khác nhau (phát hành, phát triển, v.v.) mà tôi có thể cài đặt theo ý muốn. Việc tách rời này cũng thuận lợi vì cấu hình và ứng dụng có thể phát triển riêng biệt mà không bị lẫn lộn khi cài đặt lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.