Primeros pasos¶
De un VPS recién creado a tu app en línea. Si prefieres verlo, cada paso está en los videos.
Lo que necesitas
- Un VPS con Ubuntu, Debian, Rocky, Alma o RHEL, y acceso root por SSH (lo da cualquier proveedor: Hetzner, DigitalOcean, Vultr, OVH…).
- Tu proyecto en git, en tu computador, con lo que use para compilar:
composer,npm,go… (Python se instala en el servidor). - Opcional: un dominio apuntando a la IP del VPS, para tener HTTPS con Let's Encrypt.
1. Instala versa¶
curl -fsSL https://raw.githubusercontent.com/kriollo/versaDeploy/main/install.sh | sh
versa version
Descarga versa_windows_amd64.exe desde Releases, renómbralo a versa.exe y ponlo en una carpeta de tu PATH. Para los hooks locales instala Git for Windows. Detalles en Instalación.
2. Tu llave SSH en el servidor¶
Si aún no tienes una llave SSH, créala y cópiala al servidor (una sola vez):
ssh-keygen -t ed25519 # Enter a todo
ssh-copy-id root@IP_DE_TU_VPS # pide la contraseña de root por última vez
ssh root@IP_DE_TU_VPS 'echo ok' # debe entrar sin contraseña
3. El archivo deploy.yml¶
En la carpeta de tu proyecto, parte del ejemplo de tu framework:
curl -fsSL -o deploy.yml https://raw.githubusercontent.com/kriollo/versaDeploy/main/examples/deploy.laravel.yml
Hay ejemplos para Laravel, Next.js, Nuxt, FastAPI, Flask y Gin en Ejemplos. Ábrelo y cambia lo marcado con # change:
project: el nombre de tu proyecto.ssh.host: la IP o el dominio de tu VPS.provision.domain: el dominio de tu app (o déjalo y usa la IP mientras tanto).remote_path,db_name,db_user: normalmente basta con cambiarmyapppor tu nombre.
Las contraseñas no van en el archivo: db_password: "${DB_PASS}" se lee de una variable.
export DB_PASS='una-contraseña-segura'
versa config validate production
git add deploy.yml && git commit -m "Configura versaDeploy"
versa despliega lo commiteado
versa toma el último commit, no tus archivos sin guardar: haz commit antes de cada deploy.
4. Prepara el servidor¶
versa
Se abre la interfaz. Con → ve a la vista Services: versa detecta el servidor y marca lo que tu app necesita (nginx, PHP, la base de datos, el usuario deploy con tu llave, backups, fail2ban…). Revisa, y presiona I y luego Y para instalar. Toma unos minutos. Sal con q.
Si el servidor ya tiene cosas instaladas, versa las respeta: no reemplaza nginx por Apache, no instala un segundo PHP, no reinicia servicios ni cambia contraseñas existentes.
5. Primer deploy¶
versa deploy production --initial-deploy
versa compila en tu computador, sube el proyecto y lo activa. En el primer deploy pregunta si correr los hooks post_deploy (las migraciones): responde N, porque falta el .env.
6. El .env de producción¶
El primer deploy creó el .env del servidor a partir de tu .env.example. Edítalo:
versa
Vista Shared → .env → Enter → e para editar → Ctrl+S para guardar. Pon los datos de producción (en Laravel: APP_ENV=production, APP_DEBUG=false, APP_URL, DB_*…). Si tu framework necesita una clave (Laravel: APP_KEY), puedes generarla en el servidor:
versa exec production 'cd /var/www/miapp/current/app && php artisan key:generate --force'
7. Deploy¶
versa deploy production --force
Ahora sí corren las migraciones y los caches, y el health check confirma que la app responde. ¡Listo!
Desde ahora¶
git commit -am "Mi cambio"
versa deploy production # solo sube lo que cambió
versa history production # quién desplegó qué y cuándo
versa rollback production # volver a la versión anterior, al instante
Siguientes pasos:
- HTTPS: con un dominio apuntando al VPS, marca SSL en la vista Services.
- Avisos a Slack, Discord o Telegram, staging, tags y CI: Configuración.
- Cómo funciona todo por dentro: Flujos. ¿Algo falló? Problemas comunes.