데비안 용 PHP 웹 응용 프로그램을 패키징하는 좋은 방법


15

많은 PHP 웹 응용 프로그램이 설치 및 업그레이드를 위해이 모델을 따릅니다.

  1. 소스 타르 볼을 타르 해제하십시오.
  2. 소스에서 Apache를 가리 킵니다.
  3. 웹 브라우저를 홈페이지로 이동하십시오.
  4. 설정의 여러 웹 페이지를 살펴보십시오 (예 : 라이브러리 존재 여부 확인, 데이터베이스 연결 정보 요청, 데이터베이스 스키마 작성 또는 업데이트 등).
  5. 사용자는 install/디렉토리 이름 을 다른 것으로 변경하여 응용 프로그램이 설치되었음을 알 수 있습니다.

패키지를 설치하는 사용자가 위의 많은 수동 단계를 거치지 않고 데비안 패키지를 만드는 간단한 방법은 없습니다. 본인은 응용 프로그램의 개발자가 아니므로 응용 프로그램 설치 작동 방식을 직접 변경할 수있는 위치에 있지 않습니다.

이러한 응용 프로그램을 패키징하는 일반적인 방법은 무엇입니까?


1
데비안 패키지가 무엇을 의미하는지 잘 모르겠지만 Composer를 살펴 보셨습니까? getcomposer.org
CamelBlues

답변:


19

데비안 패키지를 통해 (내부적으로) 배포하는 몇 가지 PHP 웹 응용 프로그램을 만들었습니다. 프로세스를 자동화하는 스크립트 (여기에서는 단순화 됨) 덕분에 간단했습니다.

create_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

제어 :

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

이 모든 것이 상당히 쉬우 며 내가하는 내부 패키지 배포에 적합합니다. 글로벌 배포에 충분하지는 않지만 우분투와 데비안 사람들이 소스 패키지 (설치 스크립트와 함께 tarballs로 배포)를 가져 와서 .deb 패키지를 만들 때 수행하는 것과 비슷할 수 있습니다.

나는 이것이 당신의 다섯 가지 포인트를 부드럽게 해결할 수 있다고 생각합니다.

  1. 데비안 패키지는 설치 될 때 대상 시스템의 적절한 위치로 자동 압축 해제됩니다.

  2. 데비안 패키지가 Apache를 자동으로 구성하도록 할 수 있습니다. MySQL 및 Apache와 같은 일부 패키지에는 / etc에 "conf.d"디렉토리가있어 구성 파일을 삭제할 수 있습니다. 이것이 이상적입니다. 패키징 스크립트는 debian / etc / apache2 / conf.d 디렉토리를 생성하고 그 안에 구성 파일을 복사 할 수 있습니다. 대상 시스템에 설치되며 debian / DEBIAN에 배치 한 postinst라는 스크립트에서 Apache를 다시 시작할 수 있습니다.

  3. 사용자 지정 정보를 입력해야하는 경우 피할 수없는 경우가 많지만 많은 구성이 필요하지 않은 상태에서 "즉석에서"실행할 수있는 시스템을 선호합니다.

  4. 제어 파일에 적절한 패키지 종속성을 포함시켜 라이브러리 존재를 보장 할 수 있습니다. 데이터베이스 연결 정보는 기본값으로 설치되거나 구성 페이지에서 관리자에게 문의 할 수 있습니다. 구성 페이지가 입력되면 idempotent 데이터베이스 마이그레이션 스크립트를 호출하여 데이터베이스 스키마를 업데이트해야합니다. Django와 같은 여러 웹 프레임 워크가이를 쉽게 만듭니다.

  5. 구성 페이지 뒤의 코드는 시스템이 관리자가 아닌 구성된 것으로 표시되어야합니다.

때때로 사용하는 방법은 별도의 패키지를 만들어 구성 설치를 앱 설치와 분리하는 것입니다. 그런 다음 원하는대로 설치할 수있는 여러 가지 구성 패키지 (릴리스, 개발 등)를 가질 수 있습니다. 이 분리는 또한 다시 설치할 때 서로를 방해하지 않고 구성과 앱이 개별적으로 진화 할 수 있기 때문에 유리합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.