部署 PHP 项目

Zeabur 除了支持传统的多文件 PHP、以 index.php 为入口的项目,还支持 LaravelSymfony、ThinkPHP、CodeIgniter 等框架的一键部署。

PHP 环境

Zeabur 默认使用 PHP 8 的最新版本、NGINX + php-fpm 服务器来运行您的代码。

Zeabur 的 PHP 环境内置 Composer、apcubcmathgdintlmysqliopcachepcntlpdo_mysqlsysvsemzip 等 PHP 扩展。如果您的 composer.json 中安装了其他以 ext- 开头的扩展类型定义,Zeabur 也会自动安装对应的扩展。此外,还会默认安装 Node.js、Crontab、cURL、gettext、Git、grep、pkg-config、unzip 等工具。

Zeabur 默认会带入 APP_ENV=prodAPP_DEBUG=true 环境变量到您的应用程序中,您可以在 Zeabur 控制台的“环境变量”区域手动覆盖这些变量。

完整的基础镜像配置可以参考 zbpack 的代码仓库

NPM 支持

如果您的项目有 package.json,Zeabur 会帮您运行 npm install 安装依赖。

如果您的项目的 package.jsonbuild 脚本,Zeabur 会自动帮您运行 npm run build 编译产物。

自定义编译和启动命令

Zeabur 允许您使用环境变量或配置文件自定义 PHP 的编译和启动命令。

“编译命令”适用于需要下载或编译自定义产物(如 CSS、JavaScript 等等)或配置文件的场景。例如,您希望往 /etc 文件夹写入配置文件,可以设置环境变量:

ZBPACK_BUILD_COMMAND=echo 'your-configuration' > /etc/somewhere

或者在 zbpack.json 中加入以下配置:

zbpack.json
{
    "build_command": "echo 'your-configuration' > /etc/somewhere"
}

您也可以在这里执行其他 npm 的命令:

zbpack.json
{
    "build_command": "npm run build:dist"
}

编译命令 不会 影响 Zeabur 原本的编译流程,所以您不需要手动在这里重复指定 Zeabur 默认帮您执行的命令。

“启动命令”适用于启动 PHP 服务器时的场景,比如在原有命令基础上加上 php artisan migrate 来创建数据库表。例如,您可以设置环境变量:

ZBPACK_START_COMMAND="php artisan migrate && _startup"

或者在 zbpack.json 中加入以下配置:

zbpack.json
{
    "start_command": "php artisan migrate && _startup"
}

注意:如果是持续运行的服务,则需要将启动指令放置于 () 内,并使用 & 连接命令:

ZBPACK_START_COMMAND="(php artisan reverb:start &); _startup"

或者

zbpack.json
{
    "start_command": "(php artisan reverb:start &); _startup"
}

其中 _startup 是 Zeabur 原本的启动命令(可以在 zbpack 查阅)。如果您有自定义 start_command_startup 必须在您的启动命令中执行,否则不会启动 PHP 服务器。

build_commandstart_command 均会使用 POSIX 兼容的 shell 执行,因此您可以使用 && 连接多个命令,或者使用 ; 分隔多个命令。

自定义 PHP 版本

Zeabur 默认使用 PHP 8,但您可以使用 composer.json 或 zbpack 的配置来指定 PHP 版本。如果您的项目是 Laravel Sail,Zeabur 也会根据 docker-compose.yml 自动判断。zbpack 配置优先级最高,composer.json 次之,Laravel Sail 最低。

composer.json

composer.jsonrequire 中设置 php 版本范围:

composer.json
{
    "require": {
        "php": "7.4"
    }
}

以上例子中,Zeabur 会使用 PHP 7.4 的最新补丁版本运行您的项目。

composer.json
{
    "require": {
        "php": "^7.4"
    }
}

以上例子中,Zeabur 会使用 PHP 7 的最新次版本运行您的项目。

Laravel Sail

如果您的项目是 Laravel Sail,Zeabur 会自动检测并使用 Laravel Sail 在 docker-compose.yml 中定义的 PHP 版本。

Laravel Sail 的 Docker Compose 定义

zbpack 配置

如果您没有使用 Laravel Sail 或 Composer,但需要更改 PHP 版本,可以使用 ZBPACK_PHP_VERSION 环境变量:

ZBPACK_PHP_VERSION=8.0

或者在 zbpack.json 中加入以下配置:

zbpack.json
{
    "php": {
        "version": "8.0"
    }
}

来自定义 PHP 版本。

自定义 php.ini 配置

使用 Zeabur 的配置文件编辑器,创建一个路径在 /usr/local/etc/php/conf.d、后缀名为 ini 的配置文件,直接写上您想覆盖的 PHP 配置即可。

例如,如果想将最大上传文件大小设置为 100MB,可以创建一个文件 /usr/local/etc/php/conf.d/upload.ini,内容如下:

/usr/local/etc/php/conf.d/upload.ini
upload_max_filesize = 100M

自定义 NGINX 配置

使用 Zeabur 的配置文件编辑器,创建一个路径为 /etc/nginx/sites-enabled/default 的配置文件,覆盖 Zeabur 默认的 NGINX 配置。创建后会自动带入当前的 NGINX 配置,您可以在此基础上进行修改。

例如,假如您想要禁用 gzip 压缩,可以将模板中的 gzip_static on; 改为 gzip_static off;

/etc/nginx/sites-enabled/default
location / {
    try_files $uri $uri/ /index.php$is_args$args;
    gzip_static off;
}