部署 PHP 项目
Zeabur 除了支持传统的多文件 PHP、以 index.php 为入口的项目,还支持 Laravel、Symfony、ThinkPHP、CodeIgniter 等框架的一键部署。
PHP 环境
Zeabur 默认使用 PHP 8 的最新版本、NGINX + php-fpm 服务器来运行您的代码。
Zeabur 的 PHP 环境内置 Composer、apcu、bcmath、gd、intl、mysqli、opcache、pcntl、pdo_mysql、sysvsem、zip 等 PHP 扩展。如果您的 composer.json 中安装了其他以 ext- 开头的扩展类型定义,Zeabur 也会自动安装对应的扩展。此外,还会默认安装 Node.js、Crontab、cURL、gettext、Git、grep、pkg-config、unzip 等工具。
Zeabur 默认会带入 APP_ENV=prod 和 APP_DEBUG=true 环境变量到您的应用程序中,您可以在 Zeabur 控制台的“环境变量”区域手动覆盖这些变量。
完整的基础镜像配置可以参考 zbpack 的代码仓库。
NPM 支持
如果您的项目有 package.json,Zeabur 会帮您运行 npm install 安装依赖。
如果您的项目的 package.json 有 build 脚本,Zeabur 会自动帮您运行 npm run build 编译产物。
自定义编译和启动命令
Zeabur 允许您使用环境变量或配置文件自定义 PHP 的编译和启动命令。
“编译命令”适用于需要下载或编译自定义产物(如 CSS、JavaScript 等等)或配置文件的场景。例如,您希望往 /etc 文件夹写入配置文件,可以设置环境变量:
ZBPACK_BUILD_COMMAND=echo 'your-configuration' > /etc/somewhere或者在 zbpack.json 中加入以下配置:
{
"build_command": "echo 'your-configuration' > /etc/somewhere"
}您也可以在这里执行其他 npm 的命令:
{
"build_command": "npm run build:dist"
}编译命令 不会 影响 Zeabur 原本的编译流程,所以您不需要手动在这里重复指定 Zeabur 默认帮您执行的命令。
“启动命令”适用于启动 PHP 服务器时的场景,比如在原有命令基础上加上 php artisan migrate 来创建数据库表。例如,您可以设置环境变量:
ZBPACK_START_COMMAND="php artisan migrate && _startup"或者在 zbpack.json 中加入以下配置:
{
"start_command": "php artisan migrate && _startup"
}注意:如果是需要持续运行的服务,需要把启动命令放在 () 中,并用 & 把任务放到后台运行:
ZBPACK_START_COMMAND="(php artisan reverb:start &); _startup"或者
{
"start_command": "(php artisan reverb:start &); _startup"
}其中 _startup 是 Zeabur 原本的启动命令(可以在 zbpack 查阅)。如果您有自定义 start_command,_startup 必须在您的启动命令中执行,否则不会启动 PHP 服务器。
build_command 和 start_command 均会使用 POSIX 兼容的 shell 执行,因此您可以使用 && 连接多个命令,或者使用 ; 分隔多个命令。
复杂启动命令的处理方式
如果你的启动命令很复杂(比如涉及到定时任务的设置、多个服务的启动等),start_command 可能会变得太复杂且不容易调试。可以尝试将这些命令用 Config Editor 打包在一个脚本中,比如 worker.sh:
#!/usr/bin/env bash
php artisan migrate
php artisan queue:work &
# 以及你的各种命令然后在 start_command 中执行这个脚本:
{
"start_command": "(bash worker.sh &); _startup"
}
```env
ZBPACK_START_COMMAND=(bash worker.sh &); _startupWorkers 的处理方式
对于队列处理或定时任务,我们建议你分开服务处理。
假如你想要启动一个队列 worker,你可以在主服务之外,另外部署一个服务 queue-worker,其中 start_command 是:
ZBPACK_START_COMMAND="php artisan queue:work"记得不要加入 ; _startup 以免启动 PHP 服务器。这样你就会有单独的一个用来处理异步任务的服务了。
如果你还需要多一个处理定时任务的服务,你可以再部署一个服务 cron-worker,其中 start_command 是:
ZBPACK_START_COMMAND="php artisan schedule:work"这样一来,就算你其中一个 worker 出现问题,其他 workers 以及主服务也不会受到影响。
自定义 PHP 版本
Zeabur 默认使用 PHP 8,但您可以使用 composer.json 或 zbpack 的配置来指定 PHP 版本。如果您的项目是 Laravel Sail,Zeabur 也会根据 docker-compose.yml 自动判断。zbpack 配置优先级最高,composer.json 次之,Laravel Sail 最低。
composer.json
在 composer.json 的 require 中设置 php 版本范围:
{
"require": {
"php": "7.4"
}
}以上例子中,Zeabur 会使用 PHP 7.4 的最新补丁版本运行您的项目。
{
"require": {
"php": "^7.4"
}
}以上例子中,Zeabur 会使用 PHP 7 的最新次版本运行您的项目。
Laravel Sail
如果您的项目是 Laravel Sail,Zeabur 会自动检测并使用 Laravel Sail 在 docker-compose.yml 中定义的 PHP 版本。

zbpack 配置
如果您没有使用 Laravel Sail 或 Composer,但需要更改 PHP 版本,可以使用 ZBPACK_PHP_VERSION 环境变量:
ZBPACK_PHP_VERSION=8.0或者在 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,内容如下:
upload_max_filesize = 100M自定义 NGINX 配置
使用 Zeabur 的配置文件编辑器,创建一个路径为 /etc/nginx/sites-enabled/default 的配置文件,覆盖 Zeabur 默认的 NGINX 配置。创建后会自动带入当前的 NGINX 配置,您可以在此基础上进行修改。
例如,假如您想要禁用 gzip 压缩,可以将模板中的 gzip_static on; 改为 gzip_static off;。
location / {
try_files $uri $uri/ /index.php$is_args$args;
gzip_static off;
}