打包用于Debian的PHP Web应用程序的好方法


15

许多PHP Web应用程序都遵循此模型进行安装和升级:

  1. 解压源tar球。
  2. 将Apache指向源代码。
  3. 将Web浏览器导航到主页。
  4. 浏览几个设置页面(例如,检查是否存在库,询问数据库连接信息,创建或更新数据库架构等)。
  5. 用户将install/目录重命名为其他目录,以便应用程序知道该目录已安装。

在没有让用户安装软件包的过程中,我看不出有任何(简单)的方式来创建Debian软件包。请注意,我不是该应用程序的开发人员,因此无法直接更改该应用程序的安装方式。

打包此类应用程序的典型方法是什么?


1
我不确定Debian软件包的含义,但是您是否研究过Composer?getcomposer.org
CamelBlues 13-4-22

Answers:


19

我创建了几个PHP Web应用程序,这些应用程序通过Debian软件包(内部)分发。借助脚本(此处已简化)可以自动执行此过程,因此这样做非常简单:

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.

所有这一切都非常容易做到,并且对于我所做的内部软件包分发非常有效。我不确定是否足以在全球范围内分发,但这可能与Ubuntu和Debian人员在获取源程序包(可能使用安装脚本以tarball的形式分发)并为其创建.deb程序包时的操作类似。

我认为这可以顺利解决您的五个要点:

  1. 安装Debian软件包后,它会自动解压缩到目标系统上的正确位置。

  2. 您可以让Debian软件包自动配置Apache。某些软件包(例如MySQL和Apache)在/ etc中具有“ conf.d”目录,您可以在其中放置配置文件。这是理想的。您的打包脚本可以创建debian / etc / apache2 / conf.d目录,并在其中复制配置文件。它将安装在目标系统上,您可以使用放置在debian / DEBIAN中的名为postinst的脚本重新启动Apache。

  3. 如果必须输入自定义信息,这可能是不可避免的,尽管许多人更喜欢可以“开箱即用”运行而无需进行配置的系统。

  4. 通过在控制文件中包含适当的程序包依赖关系,可以保证库的存在。数据库连接信息可以默认安装,也可以在配置页面上询问管理员。输入后,配置页应调用幂等数据库迁移脚本以更新数据库架构。几个Web框架(例如Django)使此操作变得容易。

  5. 配置页面后面的代码应将系统标记为已配置,而不是管理员。

我有时使用的一种方法是通过将配置的安装与应用程序的安装分开,从而将其与安装分开。然后,我可以拥有几个可以随意安装的不同配置包(发行版,开发版等)。这种解耦也是有利的,因为配置和应用程序可以分别发展,而在重新安装时不会互相影响。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.