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.

Durante la instalación, el asistente solicita su clave pública SSH (formatos aceptados: ssh-rsa, ssh-ed25519, ecdsa) antes de que cualquier paquete sea instalado. Cipi crea un dedicado cipi Usuario de Linux para administrador SSH acceso y aplica endurecimiento SSH: el inicio de sesión raíz está deshabilitado, cipi utiliza sólo clave pública (grupo cipi-ssh), usuarios de aplicaciones (grupo cipi-apps) puede conectarse con contraseña. Iniciar sesión los intentos están limitados a 3 con un período de gracia de 20 segundos y el reenvío X11 está deshabilitado.

El instalador también genera un contraseña raíz aleatoria de 40 caracteres, lo almacena en /etc/cipi/server.jsony lo muestra en el resumen de instalación. Las claves SSH pegadas son desinfectado automáticamente: los comentarios, los retornos de carro y el exceso de espacios en blanco se eliminan antes validación.

Instalación estándar

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

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
Si aún no tienes una clave SSH, genera una con: ssh-keygen -t rsa -b 4096

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 usando AES-256-CBC a través del incorporado 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 aplica Retención de registros compatible con GDPR con políticas de rotación automática para la aplicación, seguridad y registros HTTP; consulte Retenció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ública dirección — Sólo NAT VPS, redes domésticas detrás de un enrutador y hosts no accesibles desde internet no es compatible
  • KVM completo o virtualización bare-metal: no OpenVZ, contenedores LXC o kernel compartido entornos (incluidos 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 la versión PHP. Las aplicaciones Laravel siempre requieren un repositorio; para personalizado 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 a través de cipi git, este paso es automático — Cipi agrega la clave de implementación y crea 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. Prepare su proyecto Laravel

Cipi utiliza el controlador de la 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 nuevo releases/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 FrankenPHP HTTP opcional por aplicación Laravel (ya que 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.

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/ ← usuario aislado de Linux (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 ← compilado automáticamente 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.