Instalando Cipi

Cipi instala una pila de producción completa lista para Laravel en Ubuntu 24.04 o 26.04 con un solo comando. El instalador tarda aproximadamente 10 minutos y configura Nginx, MariaDB, PHP, Valkey. (opcional PostgreSQL vía cipi db install pgsql después de la instalación), Supervisor, Fail2ban, UFW, Certbot, Deployer y el cipi CLI mismo.

De cero a producción en tres pasos

fiesta
# 1 — on a fresh Ubuntu 24.04 / 26.04 VPS, over SSH, as a user with sudo
wget -O - https://cipi.sh/setup.sh | bash

# 2 — create the app (Laravel by default)
cipi app create

# 3 — deploy it and put it behind HTTPS
cipi deploy myapp
cipi ssl install myapp

Ese es todo el camino. Primero cree una clave SSH en su computadora (a continuación), luego ejecute el instalador en el servidor: le pedirá que pegue esa clave pública. Todo lo que sigue se explica en el resto de esta página.

Ejecute el instalador en el servidor, no en su propia máquina. SSH en fresco VPS primero y ejecútelo allí, como usuario con sudo. Cipi abastece toda la caja: no es algo que apuntes a un host remoto desde tu computadora portátil.

Crea una clave SSH en tu computadora

haz esto en su computadora portátil o estación de trabajo, no en el VPS. El instalador necesita el publico la mitad de la clave para que pueda bloquear el servidor: después de configurar SSH como el cipi usuario con esta clave. El inicio de sesión raíz SSH está deshabilitado. Nunca pegues el privado. clave.

Mira si ya tienes uno:

fiesta
ls ~/.ssh/*.pub

si id_ed25519.pub o id_rsa.pub aparece en la lista, ya tienes una clave: omitir generación y copie el archivo público con el siguiente comando. Si la carpeta está vacía o el comando errores, cree una nueva clave Ed25519:

fiesta
ssh-keygen -t ed25519 -C "you@example.com"

Presione Enter para aceptar la ruta predeterminada (~/.ssh/id_ed25519). Establece una frase de contraseña si desea (recomendado). En macOS y Linux, ejecute esto en Terminal; en Windows utilice PowerShell o WSL.

Muestre la clave pública: esta es la única línea que pegará cuando el instalador le solicite:

fiesta
cat ~/.ssh/id_ed25519.pub

parece ssh-ed25519 AAAA… comment. Copia toda la línea:

  • MacOS: pbcopy < ~/.ssh/id_ed25519.pub
  • Linux: xclip -sel clip < ~/.ssh/id_ed25519.pub (o copia del terminales)
  • Windows (PowerShell): Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard
Sólo el .pub El archivo es público. El archivo llamado id_ed25519 (no extensión) es el privado clave: guárdela en su computadora y nunca la pegue en el instalador o enviarlo al servidor.

Ejecute el instalador en el servidor.

SSH en el nuevo Ubuntu VPS como usuario con sudo, entonces:

fiesta
wget -O - https://cipi.sh/setup.sh | bash

El asistente solicita la clave pública. antes de instalar cualquier paquete. Pega la línea copiaste arriba (formatos aceptados: ssh-ed25519, ssh-rsa, ecdsa). Cipi desinfecta comentarios, retornos de carro y espacios en blanco adicionales, luego crea un dedicado cipi Usuario de Linux para acceso SSH de administrador y endurece SSH: inicio de sesión root deshabilitado, cipi sólo clave pública (grupo cipi-ssh), usuarios de aplicaciones (grupo cipi-apps) puede conectarse con contraseña. Los intentos de inicio de sesión están limitados a 3 con un período de gracia de 20 segundos; El reenvío X11 está deshabilitado.

El instalador también genera un contraseña raíz aleatoria de 40 caracteres, stores it in /etc/cipi/server.jsony lo muestra en el resumen de instalación. es nouna contraseña SSH: el inicio de sesión SSH raíz está deshabilitado. Es lo que escribe cuando ya ha iniciado sesión comocipi usuario con tu clave, corres su root. Guárdalo en una contraseña gerente.

Instalación no interactiva

Para configuraciones automatizadas, pase su clave pública SSH a través del SSH_PUBKEY variable de entorno para omitir el mensaje interactivo:

fiesta
SSH_PUBKEY="ssh-ed25519 AAAA..." wget -O - https://cipi.sh/setup.sh | bash

AWS (inicio de sesión raíz deshabilitado de forma predeterminada)

fiesta
$ ssh ubuntu@your-server-ip
$ sudo -s
$ wget -O - https://cipi.sh/setup.sh | bash

Al final de la instalación verá una pantalla de resumen con los detalles de acceso SSH, el contraseña de root generada automáticamente y la contraseña de root MariaDB. Guárdalos inmediatamente — se muestran solo una vez. Las credenciales se almacenan en /etc/cipi/server.json, que, como todos los archivos de configuración Cipi, es cifrado en reposo utilizando AES-256-CBC a través del Bóveda sistema. Credenciales, claves SSH, .env archivos y volcados de bases de datos están protegidos tanto en disco y durante la transferencia (a través de Sincronizar archivos cifrados). Cipi también hace cumplir Retención de registros compatible con GDPR con políticas de rotación automática para la aplicación, seguridad y HTTP registros; consulteRetención de registros para más detalles.

Guarde los detalles de acceso SSH, la contraseña de root y la contraseña de root MariaDB. Mostrado solo una vez durante instalación. Las credenciales se almacenan cifradas en/etc/cipi/server.json.

Acceso posterior a la instalación

Después de la instalación, acceso de administrador utiliza la autenticación de clave pública como cipi usuario (el inicio de sesión raíz está deshabilitado). Usuarios de la aplicación ¿Puede SSH directamente con ssh myapp@server-ip y la contraseña generada al crear la aplicación. correr cipi comandos o realizar cualquier tarea administrativa, conéctese como cipi y luego escalar:

fiesta
# 1. connect to the server (key-based auth only)
$ ssh cipi@your-server-ip

# 2. escalate to root to run cipi commands
cipi@server:~$ sudo -s

# 3. now you can use all cipi commands
root@server:~# cipi status
root@server:~# cipi app list

# 4. to work as an app user, switch with su
root@server:~# su - myapp

Requisitos

  • Ubuntu 24.04 o 26.04 LTS (solo instalaciones nuevas; no se admiten versiones provisionales)
  • Acceso raíz (o sudo -s en AWS)
  • Puertos 22, 80 y 443 abiertos
  • Un servidor limpio: no instale Cipi en un servidor con una pila web existente
  • A servidor público con acceso a Internet con un enrutable IPv4 público dirección — Sólo NAT VPS, redes domésticas detrás de un enrutador y hosts a los que no se puede acceder desde internet no es compatible
  • KVM completo o virtualización bare-metal: no OpenVZ, contenedores LXC o kernel compartido entornos (incluidos los locales Docker, Docker Desktop, OrbStack, Colima, WSL y similares). tiempos de ejecución de contenedores de escritorio)
Cipi no se ejecuta localmente. No es compatible con dockerizado local. ambientes. Puede parecer que el instalador funciona correctamente en una máquina virtual portátil o en un contenedor, pero SSL El aprovisionamiento, el enrutamiento de dominios y los flujos de trabajo de producción no funcionarán sin un público real. servidor. Ver ¿Por qué no locales? para la explicación completa.

Cipi está probado y funciona en: DigitalOcean, AWS EC2, Vultr, Linode / Akamai, Hetzner, Google Cloud, OVH, Scaleway y cualquier KVM o host bare metal que ejecute Ubuntu con una IP pública.

Inicio rápido

1. Crea tu primera aplicación

El asistente interactivo solicita un nombre de usuario, dominio principal, URL del repositorio Git (formato SSH) y rama cuando corresponda, y versión PHP. Laravel las aplicaciones siempre requieren un repositorio; parapersonalizado aplicaciones, puede dejar el repositorio vacío para alojar el sitio solo a través de SFTP; consulte aplicaciones personalizadas. desde v5.0, Laravel aplicaciones pueden usar clásico PHP-FPM o Laravel Octane (FrankenPHP) con --octane - ver Laravel Octane.

fiesta
$ cipi app create
$ cipi app create --octane   # Laravel Octane (FrankenPHP)

O pase todas las banderas directamente para omitir el modo interactivo:

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

Al final, Cipi imprime un resumen de credenciales: guárdalo, se muestra solo una vez - incluyendo la dirección IP pública del servidor (para la configuración DNS), la clave de implementación SSH, las credenciales de la base de datos, un listo para usar mariadb+ssh://URL de conexión para GUI clientes (TablePlus, DBeaver, Sequel Pro), webhook URL y webhook token.

2. Agregue la clave de implementación a su proveedor de Git.

Si ha configurado un token GitHub o GitLab mediante cipi git, este paso es automático — Cipi agrega la clave de implementación y crea el webhook para usted. Ver configuración automática de git para más detalles.

De lo contrario, copie el ssh-ed25519 ... clave que se muestra después de la creación de la aplicación y agréguela como Implemente la clave en su repositorio:

  • GitHub: Repositorio → Configuración → Implementar claves → Agregar clave de implementación
  • GitLab: Repositorio → Configuración → Repositorio → Implementar claves

3. Prepara tu proyecto Laravel

Cipi utiliza el controlador de base de datos para caché, sesiones y colas. Ejecútelos una vez dentro de su Laravel proyectar, confirmar e impulsar las migraciones generadas:

fiesta
$ php artisan cache:table
$ php artisan session:table
$ php artisan queue:table
$ php artisan migrate
Cipi se ejecuta automáticamente artisan migrate --force en cada despliegue. El caché, La sesión y las tablas de cola se crearán en la primera implementación si confirma las migraciones.

4. Implementar

fiesta
$ cipi deploy myapp

El implementador clona su repositorio en un nuevoreleases/N/ directorio, se ejecuta composer install --no-dev, enlaces .env y storage/, corre migraciones, carreras artisan optimize, crea storage:link, intercambia el current enlace simbólico de forma atómica y reinicia los trabajadores de la cola. Cero tiempo de inactividad.

5. Instale SSL

fiesta
$ cipi ssl install myapp

Certbot proporciona un certificado Let's Encrypt, configura Nginx para HTTPS y actualiza APP_URL en .env. Tu aplicación Laravel ya está disponible https://myapp.com.

Pila de tecnología

Cipi trae una pila completa y lista para producción a su servidor Ubuntu. Aquí está todo lo que obtiene. instalado y configurado:

Componente Rol
Ubuntu SO básico (24.04 o 26.04 LTS)
Nginx Servidor web, proxy inverso, terminación SSL. desde v4.5.9, línea principal nginx de nginx.org(1.29.8+) con max_headers 1000 para endurecimiento HTTP/2, no el Ubuntu paquete de archivo
PHP-FPM Tiempo de ejecución predeterminado PHP por aplicación (8.3–8.5; ondrej/php, packages.sury.org o Ubuntu main por liberación)
Laravel Octane Servidor opcional FrankenPHP HTTP por Laravel aplicación (desde v5.0) — cipi app create --octane; Las aplicaciones FPM y Octane coexisten en el mismo servidor
MariaDB Base de datos relacional predeterminada (reemplazo directo MySQL, puerto 3306). Opcional PostgreSQL vía cipi db install pgsql (puerto 5432) desde v4.8.0
Valkey Almacenamiento en memoria para caché, sesiones, colas y difusión (bifurcación Redis con licencia BSD)
Supervisor Administrador de procesos para Laravel trabajadores de cola, Octane, Horizon y Reverb.
Implementador Herramienta de implementación sin tiempo de inactividad
Certbot Let's Encrypt SSL certificados
UFW Cortafuegos (puertos 22, 80, 443)
falla2ban Protección progresiva por fuerza bruta con cárcel reincidente
actualizaciones desatendidas Parches de seguridad automáticos
Composer PHP administrador de dependencias
cipi CLI Gestión y orquestación de servidores.

Lo que obtiene cada aplicación

Cada aplicación se ejecuta en un entorno completamente aislado. Laravel es el valor predeterminado: tiempo de inactividad cero implementa, su propia base de datos, trabajadores, programador y webhook, opcionalmente servido por Octane (FrankenPHP) en lugar de PHP-FPM. --custom es para sitios simples (WordPress, estático + PHP): un despliegue clásico en htdocs, un docroot configurable, no base de datos, no .env, no cron, no hay trabajadores.

Área Lo que te da Cipi
servidor web Nginx con un host virtual por aplicación: PHP-FPM o Octane mediante proxy_pass, sintonizado para Laravel
PHP y Composer Seleccionable por aplicación, intercambiable en caliente; configuraciones administradas con cipi ini en FPM y CLI
Base de datos MariaDB de forma predeterminada, opcional PostgreSQL: una base de datos dedicada y un usuario por Laravel aplicación
Trabajadores de cola Supervisor grupos por aplicación — queue:work o Horizon; opcional Reverb para WebSockets
Implementaciones Implementador: enlace simbólico atómico, 5 versiones, reversión, compilación de nodo opcional; clon clasico en htdocs para aplicaciones personalizadas
SSL Let's Encrypt a través de Certbot: HTTP-01 de forma predeterminada, opcional DNS-01 (Cloudflare) con comodines
Seguridad Fail2ban + UFW, un usuario dedicado de Linux, su propio proceso FPM/Octane y clave SSH por aplicación
Controles de salud HTTP sondas cada 5 minutos, más una verificación posterior al despliegue con opcional reversión automática de una versión rota
Copias de seguridad Perfiles de respaldo — qué, con qué frecuencia, dónde, cuánto tiempo: compatible con S3 / S3 / local, con cifrado del lado del cliente
Configuración Opcional por proyecto cipi.yml para alias, bases de datos, trabajadores, chequeo de salud y copias de seguridad

Estructura de la aplicación

cuando corres cipi app create, Cipi crea un entorno completamente aislado para la aplicación. Aquí está todo lo que se configura:

/home/myapp/ ← isolated Linux user (chmod 750)
├── .ssh/
│   ├── id_ed25519 ← implementar clave (privada)
│   └── id_ed25519.pub ← clave de implementación (pública - agregar a Git)
├── .deployer/
│   └── deploy.php ← Configuración del implementador (generada automáticamente)
├── actual -> releases/3/ ← enlace simbólico a la versión activa
├── releases/
│   ├── 1/
│   ├── 2/
│   └── 3/ ← última versión (se conservan las últimas 5)
├── shared/
│   ├── .env ← autocompilado por Cipi
│   └── storage/ ← almacenamiento persistente
└── logs/
    ├── nginx-access.log
    ├── nginx-error.log
    ├── php-fpm-error.log
    ├── worker-default.log
    └── deploy.log

Además del directorio de inicio, Cipi crea estos archivos de sistema:

PHP-FPM pool: /etc/php/8.5/fpm/pool.d/miaplicación.conf (usuario=miaplicación; omitido para Octane aplicaciones)
Octane (v5+): Supervisor miaplicación-octane + Nginx proxy_pass → 127.0.0.1:81xx
Nginx vhost:  /etc/nginx/sites-available/miaplicación
Supervisor:   /etc/supervisor/conf.d/miaplicación.conf
Crontab:      * * * * * php artisan schedule:run
MariaDB:      database 'miaplicación', user 'miaplicación'@'localhost'

el .env se compila automáticamente con todas las credenciales: nombre de la base de datos, contraseña, token webhook, y APP_KEY. Nunca tendrás que tocarlo manualmente, pero siempre puedes editarlo con cipi app env myapp.