cipi app create

cipi app create admite dos tipos de aplicaciones: Laravel (predeterminado) y personalizado (--custom). Las aplicaciones Laravel obtienen un entorno completamente aislado: Usuario de Linux, grupo PHP-FPM o Laravel Octane (FrankenPHP) desde v5.0, Nginx vhost, base de datos (MariaDB por defecto; opcional PostgreSQL desde v4.8.0), Supervisor trabajador, entrada crontab, versiones de implementación sin tiempo de inactividad, SSH implementar clave y compilarse automáticamente .env. Las aplicaciones personalizadas son más sencillas: consulte aplicaciones personalizadas para más detalles.

Aplicación Laravel (predeterminada: PHP-FPM)

fiesta
$ cipi app create

Laravel Octane (FrankenPHP)

fiesta
$ cipi app create --octane
$ cipi app create --octane=frankenphp   # explicit (same as --octane)

Ver Laravel Octane para conocer los requisitos, la conversión y cómo vhost difiere del FPM.

No interactivo (banderas)

fiesta
$ cipi app create \
    --user=myapp \
    --domain=myapp.com \
    --repository=git@github.com:you/myapp.git \
    --branch=main \
    --php=8.5

# Laravel Octane (FrankenPHP) — v5.0+
$ cipi app create --user=myapp --domain=myapp.com \
    --repository=git@github.com:you/myapp.git --octane

# optional PostgreSQL (v4.8.0+, after cipi db install pgsql)
$ cipi app create --user=myapp --domain=myapp.com \
    --repository=git@github.com:you/myapp.git --engine=pgsql
--userNombre de usuario de Linux para la aplicación. Debe ser único, minúsculas, alfanuméricas.
--domainDominio principal (p. ej. myapp.com). Usado para Nginx vhost y APP_URL.
--repositoryURL SSH Git (p. ej. git@github.com:you/repo.git). Debe ser SSH, no HTTPS.
--branchRama para implementar. El valor predeterminado es main.
--phpPHP versión para esta aplicación (p. ej. 8.5). El valor predeterminado es PHP 8.5. Debe ser una versión instalada, solo 8.3, 8.4 y 8.5 se aceptan desde v4.5.4 (Deployer 8 requiere PHP ≥ 8.3).
--octane / --octane=frankenphpServir HTTP vía Laravel Octane (FrankenPHP) en lugar de PHP-FPM (ya que v5.0). Laravel aplicaciones solamente: rechazadas con --custom. Ver Laravel Octane.
--engineMotor de base de datos: mariadb (predeterminado) o pgsql (desde v4.8.0; requiere cipi db install pgsql). Mensajes de creación interactiva cuando PostgreSQL es instalado. Escribe coincidente .env / connection URL.
Si se configura un token GitHub o GitLab, Cipi agrega automáticamente la clave de implementación SSH y crea webhook en el repositorio; no se necesitan pasos manuales. Ver configuración automática de git para obtener instrucciones de configuración y opciones de respaldo cuando la configuración automática no está disponible.

Laravel Octane (FrankenPHP)

desde v5.0, Laravel aplicaciones pueden servir HTTP a través de Laravel Octane con el FrankenPHP servidor en lugar de por aplicación PHP-Grupo de FPM. Octane y las aplicaciones FPM clásicas se ejecutan en paralelo en el mismo servidor Cipi.

Qué configura Cipi

  • Asigna un puerto localhost en 8100–8999 y tiendas octane / octane_port en apps.json
  • Nginx usos de host virtual proxy_pass a Octane y sirve archivos estáticos desde current/publicsin grupo de FPM por aplicación
  • Supervisor programa ${app}-octane junto a los trabajadores de la cola
  • Plantilla de implementación laravel-octane.php reinicia / recarga Octane en la implementación
  • .env: OCTANE_SERVER=frankenphp, OCTANE_HTTPS=true

Requisitos de la aplicación

Su repositorio Laravel debe incluir laravel/octane y correr php artisan octane:install --server=frankenphp. Octane comienza después del primer implementación exitosa.

fiesta
# create an Octane app
$ cipi app create --user=myapp --domain=myapp.com \
    --repository=git@github.com:you/myapp.git --octane

# convert an existing FPM app → Octane (or the reverse)
$ cipi app convert myapp --to=octane
$ cipi app convert myapp --to=fpm

# tune Octane workers (also see app limits)
$ cipi app limits myapp --octane-workers=4

cipi app convert --to=octane|fpm reescribe el pool /vhost / Supervisor / Deployer plantilla / .envy vuelve a aplicar SSL cuando ya hay un certificado presente.

Octane consejo: mantener el trabajo en cola de larga duración cipi worker o Horizon — Octane maneja HTTP únicamente. Emparejar con Reverb para WebSockets.

cipi app create --custom

Crea un aplicación personalizada con implementación clásica (sin tiempo de inactividad cero): el código se implementa en htdocs - no current/shared enlaces simbólicos. Ideal para sitios estáticos, SPA (Vue, React, Svelte), WordPress, otros CMS o cualquier proyecto o marco que no sea Laravel PHP.

Durante la creación solo eliges la raíz del documento (predeterminado /, o por ej. www, dist, public). Nginx está preconfigurado con index index.html index.php, try_files $uri $uri/ /index.php?$args, y error_page 404 /404.html — no hay indicaciones para try_files o punto de entrada.

Git opcional (solo SFTP)

El repositorio de Git es opcional para aplicaciones personalizadas. Laravel Las aplicaciones aún requieren un repositorio. Si omite el repositorio para una costumbre aplicación, Cipi crea /home/<app>/htdocs con un marcador de posición index.html y hace no configurar una clave de implementación o webhook: carga archivos con SFTP (o SCP/rsync) a ~/htdocs como usuario de la aplicación. El resultado de incorporación explica esto "sin repositorio, solo SFTP" flujo de trabajo. Si proporciona un repositorio, el comportamiento no cambia: use cipi deploy <app> para introducir el código htdocs.

Qué incluye y qué agregas

Las aplicaciones personalizadas tienen sin base de datos, no .env, no cron y no trabajadores en cola. Cuando se configura un repositorio, se incluyen una clave de implementación y (con la configuración automática de Git) webhook. mostrado; para aplicaciones solo SFTP, se omiten. El resumen posterior a la creación enumera el acceso SSH y los siguientes pasos en consecuencia.

Si su aplicación personalizada necesita una base de datos (por ejemplo, WordPress, Drupal), cree una con cipi db create --name=<app> después del despliegue. Ver cipi bases de datos para realizar copias de seguridad, restaurar y administrar contraseñas.

Con Git: ejemplo no interactivo:

fiesta
$ cipi app create --custom --user=mysite --domain=mysite.com \
    --repository=git@github.com:you/mysite.git --docroot=dist

Solo SFTP: omitir --repository y --branch:

fiesta
$ cipi app create --custom --user=mysite --domain=mysite.com --docroot=dist

Con un repositorio, use cipi deploy <app> desplegar; El código se clona en /home/<app>/htdocs.

app list / app show / app edit / app delete

Comando Descripción
cipi lista de aplicaciones Enumere todas las aplicaciones con dominio, versión PHP y estado ((suspended) cuando fuera de línea)
cipi aplicación muestra <aplicación> Detalles completos: dominio, PHP, clave de implementación, trabajadores, webhook, estado de suspensión. Para aplicaciones personalizadas: escriba "Personalizado", docroot; webhook (y la clave de implementación) se omiten cuando solo se utiliza SFTP sin una repositorio.
cipi edición de aplicación <aplicación> --php=8.5 Versión PHP de intercambio en caliente. Actualiza el grupo de FPM, Nginx socket, Supervisor, crontab, Deployer configuración, y .env — cero tiempo de inactividad
cipi edición de aplicación <aplicación> --branch=desarrollar Cambiar la rama de implementación
cipi edición de aplicación <aplicación> --dominio=nuevo.ejemplo.com Cambie el nombre del dominio principal (ya que v4.6.2). Valida el formato y unicidad, mueve el antiguo primario a alias, regenera el vhost Nginx, actualiza APP_URL, actualiza los webhooks de Git cuando se configuran automáticamente y los vuelve a publicar Let's Encrypt cuando ya existía un certificado
cipi edición de aplicación <aplicación> --repository=<SSH-URL> Adjunte o cambie el repositorio de Git (por ejemplo, habilite la implementación en una aplicación personalizada solo SFTP) creado sin --repository). Componible con --branch, --php, y --domain
cipi edición de aplicación <aplicación> --node-build='npm ci && npm ejecutar compilación' Ejecute una compilación de nodo después de Composer proveedores en cada implementación (desde v5.0). El implementador se ejecuta .deployer/node-build.sh (fallo cerrado; comando validado). Limpiar con --no-node-build
cipi edición de aplicación <aplicación> --instantánea previa a la implementación Habilite un volcado de base de datos antes de cada implementación (desde v5.0). Mismo comportamiento que pasar --snapshot en cada uno cipi deploy. Ver Instantáneas de base de datos previas a la implementación
cipi conversión de aplicación <aplicación> --to=octane|fpm Convertir entre PHP-FPM y Laravel Octane (desde v5.0). Ver Laravel Octane
cipi entorno de aplicación <aplicación> [--show|--get|--set|--unset] Abra la aplicación .env en nano, o administrar claves no interactivamente desde v5.0.3 (--show/--get/--set/--unset, opcional --json). Sale con error para aplicaciones personalizadas (sin .env).
cipi ejecución de la aplicación <aplicación> <cmd> [args…] Comando no interactivo incluido en la lista blanca como usuario de la aplicación (ya que v5.0.3). Ver app run
cipi aplicación implementar-config <aplicación> Opciones de recetas de Structured Deployer (ya que v5.0.3). Ver configuración de implementación
cipi aplicación webhook recrear <aplicación> [--rotate-secret] Vuelva a crear la implementación GitHub/GitLab webhook; rotación secreta opcional actualizaciones CIPI_WEBHOOK_TOKEN (desde v5.0.6). DESCANSO:POST /api/apps/{name}/webhook/recreate (API 1.15.0+). desde 5.0.6, app edit --repository= solo recrea webhook/clave de implementación cuando la URL del repositorio realmente cambia.
cipi restablecimiento de contraseña de aplicación <aplicación> Vuelva a generar la contraseña SSH del usuario de Linux de la aplicación. La nueva contraseña se muestra en pantalla: guárdalo inmediatamente
cipi aplicación restablecer-db-contraseña <aplicación> Regenerar la contraseña de la base de datos de la aplicación (MariaDB o PostgreSQL por aplicación engine) y actualizar automáticamente DB_PASSWORD en la aplicación .env. Sale con error para aplicaciones personalizadas (sin base de datos).
cipi eliminación de aplicación <aplicación> Elimine permanentemente la aplicación, el usuario, la base de datos (si Laravel), Nginx vhost, el grupo FPM y Supervisor trabajadores. Para aplicaciones personalizadas, omite la eliminación de la base de datos (no se creó ninguna). pide confirmación.
cipi eliminación de aplicación <aplicación> --force Igual que eliminar pero omite el mensaje de confirmación: para scripts, el panel API y cipi-cli

cipi app reverb

desde v5.0, habilitar Laravel Reverb para WebSockets propios en un Laravel aplicación. Cipi asigna un puerto de host local en 9000–9099, agrega el programa Supervisor ${app}-reverb, representantes Nginx /app a ese puerto, y escribe REVERB_* en .env.

fiesta
$ cipi app reverb enable myapp
$ cipi app reverb status myapp
$ cipi app reverb disable myapp

cipi app clone

desde v5.0, clone una aplicación Laravel existente en una nueva aplicación de prueba (o revisión) con su propio dominio. Conjuntos cloned_from en apps.json; hace no copie webhook o git ID.

fiesta
$ cipi app clone myapp --domain=staging.myapp.com
$ cipi app clone myapp --domain=staging.myapp.com --name=myapp-stg --branch=develop --with-db
$ cipi app clone myapp --domain=staging.myapp.com --no-db
--domainRequerido. Dominio principal para la nueva aplicación.
--nameNombre de usuario de Linux opcional para el clon.
--branchImplementar rama para el clon (el valor predeterminado es el rama de la aplicación fuente).
--with-dbCrear una nueva base de datos para el clonar.
--no-dbOmitir el aprovisionamiento de la base de datos para el clonar.

cipi app limits

desde v5.0, establezca límites de recursos por aplicación con límites estrictos aplicados por Cipi.

fiesta
$ cipi app limits myapp --fpm-max-children=20 --memory-limit=256M
$ cipi app limits myapp --octane-workers=4 --worker-procs=3
$ cipi app limits myapp   # show current limits
--fpm-max-childrenPHP-FPM pm.max_children para aplicaciones FPM.
--memory-limitPHP memory_limit.
--octane-workersOctane recuento de trabajadores para FrankenPHP aplicaciones.
--worker-procsSupervisor proceso de trabajo de cola contar.

app suspend / app unsuspend

Disponible desde v4.5.8. Desconectar una aplicación sin eliminarla: útil para la facturación bodegas, ventanas de mantenimiento o sitios de preparación que desee que estén completamente a oscuras. La suspensión cambia el host virtual Nginx por una estática HTTP 503 página servida desde /var/www/cipi-suspended/.

fiesta
$ cipi app suspend myapp      # take offline (503 page)
$ cipi app unsuspend myapp    # restore normal vhost
Comando Descripción
cipi suspensión de aplicación <aplicación> Conjuntos suspended: true en apps.json, reconstruye el vhost para devuelve 503 para todas las solicitudes. Idempotente si ya está suspendido.
cipi aplicación reactivada <aplicación> Borra la bandera, restaura el Laravel/vhost personalizado normal y vuelve a aplicar los bloques SSL. Idempotente si ya está en línea.

Comportamiento

  • HTTPS incluido — certbot clona el vhost de suspensión en el :443 bloquear, por lo que HTTPS también muestra la página sin conexión
  • Let's Encrypt todavía funciona — el /.well-known/acme-challenge/ camino permanece público para que los certificados se puedan emitir o renovar mientras están suspendidos
  • Sobrevive a la regeneración del vhost — cambios de alias, PHP ediciones e SSL instalaciones respetar la bandera suspendida
  • Visible en listadoscipi app list marca aplicaciones suspendidas; cipi domains añade ⏸ suspended en cada fila
Suspender vs autenticación básica: cipi basicauth muestra un mensaje de inicio de sesión pero aún ejecuta su aplicación. app suspend detiene PHP por completo y ofrece una página estática sin conexión: los visitantes nunca llegan a Laravel. Utilice suspender para "sitio cerrado"; autenticación básica para “vista previa solo por invitación”.

También disponible a través del DESCANSO API (POST /api/apps/{name}/suspend), cipi-cli (apps suspend), y el módulo WHMCS (Suspender / Botones de reactivación). Requiere habilidad simbólica apps-suspend para API acceso.

cipi basicauth

Disponible desde v4.5.2. Proteja cualquier aplicación (Laravel o personalizada) detrás de un Nginx solicitud de nombre de usuario/contraseña. Útil para preparar sitios, herramientas internas o aplicaciones que no están listas para tráfico público todavía.

Comando Descripción
cipi habilitación de autenticación básica <aplicación> [--usuario=NOMBRE] [--contraseña=PASS] Active HTTP autenticación básica. Las credenciales se generan cuando se omiten y se muestran una vez pantalla: guárdalos inmediatamente
cipi basicauth deshabilita <aplicación> Elimine el mensaje y borre las credenciales almacenadas
cipi estado de autenticación básica <aplicación> Mostrar si la autenticación básica está habilitada y el usuario configurado

Las credenciales están codificadas con openssl passwd -apr1 (no apache2-utils necesario) y almacenado en /etc/nginx/cipi-basicauth/<app>.htpasswd; el estado habilitado vive en apps.json. el auth_basic Las directivas se inyectan por location bloque, por lo que la protección sobrevive a la regeneración de vhost (cambios de alias, ediciones PHP) y se clona en el :443 bloquear por certbot — HTTPS también está cubierto. Los desafíos de ACME permanecen público, por lo que la emisión y renovación de certificados nunca se bloquean. La autenticación básica se elimina automáticamente en cipi app delete.

Esto es distinto de cipi auth, que gestiona el Composer auth.json para repositorios de paquetes privados.

Gestión de variables ENV

cada Laravel la aplicación tiene un solo .env archivo viviendo en /home/<app>/shared/.env. Las aplicaciones personalizadas no tienen .env. Lo crea y lo completa previamente Cipi durante app create con la base de datos credenciales, APP_KEY, APP_URL, configuración de caché/sesión/cola y la webhook token. el shared/ El directorio tiene un enlace simbólico en cada versión, por lo que lo mismo .env siempre está activo independientemente de qué versión esté vigente.

Edite interactivamente a través de CLI

La forma más segura de cambiar los valores ENV es a través del propio Cipi: abre el archivo en nano como aplicación usuario, con los permisos correctos:

fiesta
$ cipi app env myapp

Ahorra con Ctrl+O luego sal con Ctrl+X. Los cambios entran en vigor inmediatamente para los nuevos solicitudes: no es necesario reiniciar para la mayoría de los valores. Si cambia la conexión de la cola o el controlador de caché, reiniciar a los trabajadores:

fiesta
$ cipi worker restart myapp

Banderas no interactivas (v5.0.3+)

desde v5.0.3, scripts, el panel API y la web GUI pueden gestionar.env sin abrir un editor:

fiesta
$ cipi app env myapp --show
$ cipi app env myapp --show --json
$ cipi app env myapp --get=APP_URL
$ cipi app env myapp --set=APP_DEBUG=false
$ cipi app env myapp --unset=LEGACY_KEY

DESCANSO: GET|PUT /api/apps/{name}/env (capacidad apps-env, API 1.14+). MCP: AppEnvShow, AppEnvUpdate.

Editar directamente a través de SSH

También puedes editar el archivo directamente a través de SSH como root o como usuario de la aplicación:

fiesta
# as root
$ nano /home/myapp/shared/.env

# or switch to the app user first
$ su - myapp
$ nano ~/shared/.env

Variables ENV clave establecidas por Cipi

variable Descripción Establecido por
APLICACIÓN_KEY Laravel clave de cifrado: generada una vez al crear la aplicación Cipi
URL_APLICACIÓN Actualizado automáticamente por cipi ssl install Cipi
CONEXIÓN_DB mysql para MariaDB (compatible directamente), o pgsql cuando la aplicación el motor es PostgreSQL (v4.8.0+) Cipi
DB_DATABASE / DB_USERNAME / DB_PASSWORD Credenciales generadas automáticamente para la base de datos aislada de la aplicación Cipi
CACHE_STORE database — utiliza la base de datos de la aplicación Cipi
SESSION_DRIVER database Cipi
QUEUE_CONNECTION database Cipi
CIPI_WEBHOOK_TOKEN Secreto HMAC para la validación del agente cipi webhook Cipi
CIPI_APP_USER Nombre de usuario de Linux propietario de esta aplicación Cipi
CIPI_MCP Habilite o deshabilite el servidor MCP integrado en /cipi/mcp Usuario (true por defecto)
No cambie las credenciales de la base de datos manualmente. Si necesita regenerar la base de datos uso de contraseña cipi db password myapp (o cipi app reset-db-password myapp) — actualiza tanto el motor como el .env atómicamente. Editarlos a mano corre el riesgo de dejarlos desincronizados.

Agregando tus propias variables

Agregue cualquier variable personalizada al final del archivo como lo haría normalmente en un proyecto Laravel. ellos se conservan en todas las implementaciones porque .env vive en shared/ y es nunca sobrescrito por Deployer.

ambiente
# your custom variables
STRIPE_KEY=sk_live_...
STRIPE_SECRET=sk_live_...
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailgun.org

cipi app run

desde v5.0.3, ejecutar un incluido en la lista blanca no interactivo comando como la aplicación usuario: útil desde CLI, panel API y web GUI “Comandos de aplicación”. Editores, buscapersonas, shells y Los REPL están bloqueados (nano, vim, less, bash, tinker,…). Banderas interactivas (p. ej. tail -f, php -a) son rechazado.

fiesta
$ cipi app run myapp composer install --no-dev
$ cipi app run myapp npm ci
$ cipi app run myapp ls -la shared
$ cipi app run --commands          # list allowed binaries
$ cipi app run --commands --json

Los binarios permitidos incluyen composer, npm/npx/yarn/pnpm, ls/ll, cat/head/tail, sistema de archivos ayudantes, archivos, git, php, node, y find. DESCANSO: POST /api/apps/{name}/run (trabajo asíncrono, capacidad apps-run) y GET /api/run-commands (API 1.14+). MCP: AppRun, AppRunCommands.

v5.0.4+ fijo /usr/bin/env: '--': No such file or directory — todos los comandos incluidos en la lista blanca (incluidos los comandos de la aplicación GUI) fallaron antes de ese parche. correr cipi self-update.

cipi app logs

La aplicación Tail registra en tiempo real. Los troncos se rotan diariamente y se conservan durante 14 días. Por De forma predeterminada, se muestran todos los registros, incluidos Laravel registros diarios. (laravel-YYYY-MM-DD.log) de shared/storage/logs/.

fiesta
$ cipi app logs myapp                  # all logs (incl. Laravel daily logs)
$ cipi app logs myapp --type=nginx     # Nginx access + error
$ cipi app logs myapp --type=php       # PHP-FPM errors
$ cipi app logs myapp --type=worker    # queue worker output
$ cipi app logs myapp --type=deploy    # deploy history
$ cipi app logs myapp --type=laravel   # Laravel application logs
--type=nginxNginx registros de acceso y errores
--type=phpPHP-Registro de errores de FPM
--type=workerSupervisor / salida del trabajador en cola
--type=deploySalida del implementador: historial completo de implementación con marcas de tiempo
--type=laravelLaravel registros de aplicaciones de shared/storage/logs/ (rotación diaria laravel-YYYY-MM-DD.log)

app artisan & app tinker

Ejecute los comandos Artisan y Tinker como usuario de la aplicación con la versión PHP correcta y open_basedir contexto, exactamente como se ejecutarían durante una implementación.

fiesta
$ cipi app artisan myapp migrate:status
$ cipi app artisan myapp queue:retry all
$ cipi app artisan myapp db:seed --class=ProductionSeeder
$ cipi app artisan myapp cache:clear
$ cipi app tinker myapp

SSH como usuario de la aplicación

Cada aplicación se ejecuta bajo su propio usuario de Linux aislado. A veces necesitas trabajar directamente dentro de eso. entorno del usuario: inspeccionar archivos, ejecutar scripts únicos o depurar algo que solo se reproduce como el usuario correcto.

Directo SSH como usuario de la aplicación (recomendado)

Los usuarios de la aplicación pueden conectarse mediante SSH directamente al servidor con la contraseña generada en el momento de la creación de la aplicación:

fiesta
# connect as the app user (password auth)
$ ssh myapp@your-server-ip

# you are directly inside the app user's shell
myapp@server:~$ pwd
/home/myapp

myapp@server:~$ cd ~/current
myapp@server:~$ ls

La contraseña se muestra cuando se crea la aplicación (o usa cipi app reset-password myapp a regenerarlo). Esto funciona para clientes SFTP, sesiones remotas IDE y acceso a terminales.

A través de cipi (ruta de administrador)

Si ya estás conectado como cipi, puedes cambiar directamente a cualquier usuario de la aplicación:

fiesta
$ ssh cipi@your-server-ip
cipi@server:~$ sudo su - myapp

myapp@server:~$ pwd
/home/myapp

Restablecer la contraseña de usuario de la aplicación

Si necesita regenerar la contraseña de un usuario de la aplicación (por ejemplo, para SSH o SFTP directo), utilice:

fiesta
$ cipi app reset-password myapp

La nueva contraseña se muestra en la pantalla; guárdela inmediatamente.

Comandos útiles una vez que haya iniciado sesión como usuario de la aplicación

fiesta
# navigate to the active release
myapp@server:~$ cd ~/current

# run artisan directly with the correct PHP version
myapp@server:~$ /usr/bin/php8.5 ~/current/artisan tinker

# inspect the shared .env
myapp@server:~$ cat ~/shared/.env

# tail all logs
myapp@server:~$ tail -f ~/logs/*.log

# check active releases (ll is a built-in alias for ls -al)
myapp@server:~$ ll ~/releases/

Cada usuario de la aplicación .bashrc define una práctica ll='ls -al' alias (desde v4.5.5) para listados de directorios más rápidos a través de SSH, junto con el deploy y composer atajos. Las aplicaciones creadas antes de 4.5.5 reciben la ll alias automáticamente en el siguiente cipi self-update a través del 4.5.5 migración.

El usuario de la aplicación open_basedir límites de restricción PHP a /home/myapp. Esto se aplica en el nivel PHP-FPM, no en el nivel de shell; puede acceder a cualquier archivo que desee. El usuario de shell puede leer cuando trabaja en la terminal.