Empezando
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
# 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.
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:
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:
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:
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
.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:
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:
SSH_PUBKEY="ssh-ed25519 AAAA..." wget -O - https://cipi.sh/setup.sh | bash
AWS (inicio de sesión raíz deshabilitado de forma predeterminada)
$ 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.
/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:
# 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 -sen 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 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.
$ cipi app create $ cipi app create --octane # Laravel Octane (FrankenPHP)
O pase todas las banderas directamente para omitir el modo interactivo:
$ 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:
$ php artisan cache:table $ php artisan session:table $ php artisan queue:table $ php artisan migrate
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
$ 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
$ 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.