Desplegando aplicaciones PHP

Zeabur no solo admite aplicaciones PHP tradicionales de varios archivos con index.php como punto de entrada, sino también el despliegue con un solo clic de frameworks como Laravel, Symfony, ThinkPHP y CodeIgniter.

Entorno PHP

Zeabur utiliza por defecto la última versión de PHP 8 y un servidor NGINX + php-fpm para ejecutar tu código.

El entorno PHP en Zeabur incluye Composer y extensiones PHP integradas como apcu, bcmath, gd, intl, mysqli, opcache, pcntl, pdo_mysql, sysvsem y zip. Si tu archivo composer.json incluye definiciones de extensiones prefijadas con ext-, Zeabur instalará automáticamente las extensiones correspondientes. Además, herramientas como Node.js, Crontab, cURL, gettext, Git, grep, pkg-config y unzip están preinstaladas.

Por defecto, Zeabur proporciona las variables de entorno APP_ENV=prod y APP_DEBUG=true a tu aplicación. Puedes sobrescribir estas variables manualmente en la sección “Variables de Entorno” de la consola de Zeabur.

Para ver la configuración completa de la imagen base, consulta el repositorio de código de zbpack.

Soporte para NPM

Si tu proyecto contiene un archivo package.json, Zeabur ejecutará automáticamente npm install para instalar las dependencias.

Si tu archivo package.json contiene un script build, Zeabur también ejecutará npm run build para generar los artefactos de compilación.

Comandos Personalizados de Compilación y Inicio

Zeabur te permite personalizar los comandos de compilación e inicio para PHP utilizando variables de entorno o archivos de configuración.

Comando de Compilación

El “comando de compilación” es ideal para escenarios donde necesitas descargar o compilar artefactos personalizados (por ejemplo, CSS, JavaScript) o configurar ajustes. Por ejemplo, para escribir un archivo de configuración en el directorio /etc, puedes establecer una variable de entorno:

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

O puedes añadir lo siguiente en zbpack.json:

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

También puedes ejecutar comandos npm adicionales aquí:

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

El comando de compilación no interferirá con el proceso de compilación predeterminado de Zeabur, por lo que no es necesario repetir los comandos que Zeabur ya maneja.

Comando de Inicio

El “comando de inicio” es adecuado para situaciones donde deseas ejecutar comandos mientras se inicia el servidor PHP, como ejecutar php artisan migrate para crear tablas de base de datos. Por ejemplo, puedes establecer una variable de entorno:

ZBPACK_START_COMMAND="php artisan migrate && _startup"

O añadir lo siguiente en zbpack.json:

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

Nota: Si necesitas que un servicio se ejecute continuamente, coloca el comando de inicio entre () y usa & para ejecutar la tarea en segundo plano.

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

O:

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

Aquí, _startup es el comando de inicio predeterminado de Zeabur (consulta zbpack). Si personalizas el start_command, debes incluir _startup en el comando; de lo contrario, el servidor PHP no se iniciará.

Tanto build_command como start_command se ejecutan utilizando un shell compatible con POSIX, por lo que puedes encadenar varios comandos con && o separarlos con ;.

Manejo de Comandos de Inicio Complejos

Si tu comando de inicio es complejo (como configurar tareas programadas, iniciar múltiples servicios, etc.), start_command puede volverse demasiado complicado y difícil de depurar. Puedes intentar empaquetar estos comandos en un script usando el Editor de Configuración, como worker.sh:

worker.sh
#!/usr/bin/env bash
 
php artisan migrate
php artisan queue:work &
# Y tus diversos comandos

Luego ejecuta este script en el start_command:

zbpack.json
{
    "start_command": "(bash worker.sh &); _startup"
}
ZBPACK_START_COMMAND=(bash worker.sh &); _startup

Manejo de Workers

Para el procesamiento de colas o tareas programadas, recomendamos manejar los servicios por separado.

Si deseas iniciar un worker de cola, puedes desplegar otro servicio queue-worker fuera del servicio principal, donde el start_command es:

ZBPACK_START_COMMAND="php artisan queue:work"

No agregues ; _startup para que el servidor PHP no se inicie. De esta manera, tendrás un servicio separado dedicado a manejar tareas asíncronas.

Si también necesitas un servicio para manejar tareas programadas, puedes desplegar otro servicio cron-worker, donde el start_command es:

ZBPACK_START_COMMAND="php artisan schedule:work"

De esta manera, incluso si uno de tus workers encuentra un problema, los otros workers y el servicio principal no se verán afectados.

Versión Personalizada de PHP

Zeabur utiliza PHP 8 por defecto, pero puedes especificar la versión de PHP a través de composer.json o la configuración de zbpack. Si tu proyecto utiliza Laravel Sail, Zeabur puede detectar automáticamente la versión de PHP desde docker-compose.yml. El orden de prioridad es: configuración de zbpack > composer.json > Laravel Sail.

composer.json

Establece el rango de la versión de PHP en la sección require de composer.json:

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

En este ejemplo, Zeabur usará la última versión parcheada de PHP 7.4 para ejecutar tu proyecto.

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

Aquí, Zeabur usará la última versión menor de PHP 7 para ejecutar tu proyecto.

Laravel Sail

Si tu proyecto utiliza Laravel Sail, Zeabur detectará y usará automáticamente la versión de PHP definida en el archivo docker-compose.yml.

Definición de Docker Compose para Laravel Sail

Configuración de zbpack

Si no estás utilizando Laravel Sail ni Composer pero necesitas especificar una versión de PHP, puedes usar la variable de entorno ZBPACK_PHP_VERSION:

ZBPACK_PHP_VERSION=8.0

O añadir lo siguiente en zbpack.json:

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

Configuraciones Personalizadas de php.ini

Usando el editor de archivos de configuración de Zeabur, crea un archivo de configuración en el directorio /usr/local/etc/php/conf.d con la extensión .ini e incluye las configuraciones PHP que deseas sobrescribir.

Por ejemplo, para establecer el tamaño máximo de subida de archivos a 100 MB, crea un archivo /usr/local/etc/php/conf.d/upload.ini con el siguiente contenido:

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

Configuración Personalizada de NGINX

Usando el editor de archivos de configuración de Zeabur, crea un archivo de configuración en /etc/nginx/sites-enabled/default para sobrescribir las configuraciones predeterminadas de NGINX en Zeabur. El editor rellenará previamente la configuración actual de NGINX, que puedes modificar según sea necesario.

Por ejemplo, para desactivar la compresión gzip, cambia gzip_static on; a gzip_static off; en la plantilla.

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