¡Qué onda! Si acabas de rentar un VPS (ya sabes, una máquina en AWS, DigitalOcean o donde sea) y te entregaron una terminal vacía y fría, no te preocupes. Aquí te traigo la guía definitiva para ambientar tu nube y dejarla lista para correr una app de Laravel de forma profesional.
Vamos a usar la última versión de PHP al día de hoy PHP 8.5, Nginx, Redis y todo el «kit de supervivencia».
1. El corazón: PHP 8.5
Debian es súper estable, pero a veces es un poco «conservador» con las versiones. Para tener lo más nuevo, usamos el repositorio de Ondřej Surý (un héroe sin capa en el mundo PHP).
Primero, actualizamos la lista de paquetes y preparamos el terreno:
Bash
sudo apt update
sudo apt install -y ca-certificates apt-transport-https lsb-release curl gnupg2
Ahora, le decimos a nuestro sistema que confíe en los paquetes de Surý y agregamos su «provedor» de software:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://packages.sury.org/php/apt.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/sury-php.gpg
echo "deb [signed-by=/etc/apt/keyrings/sury-php.gpg] https://packages.sury.org/php/ $(ls_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list
sudo apt update
¡Es hora de instalar PHP 8.5 y sus extensiones! Laravel necesita varias piezas para funcionar (como la de bases de datos, manejo de imágenes o strings):
sudo apt install -y php8.5 php8.5-cli php8.5-common php8.5-fpm php8.5-zip php8.5-curl php8.5-xml php8.5-mysql php8.5-pdo php8.5-gd php8.5-mbstring php8.5-intl php8.5-bcmath php8.5-opcache php8.5-redis php8.5-sqlite3
Tip: Si usas PostgreSQL en lugar de MySQL, solo cambia php8.5-mysql por php8.5-pgsql.
2. Los básicos: Git y Composer
Sin esto no vamos a ningún lado. Git para bajar tu código y Composer para instalar las librerías de Laravel.
sudo apt install curl git unzip -y
# Instalamos Composer de forma global
cd ~
curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php
sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
3. Redis: El turbo para tu app
Redis sirve para que Laravel guarde cosas rápido (caché) o maneje filas de trabajo (queues). Se instala volando:
sudo apt install redis-server -y
# Para checar si vive, corre: redis-cli ping (debe responder PONG)
4. Nginx: El mesero de tu servidor
Nginx es quien recibe las visitas y las pasa a PHP. Instalémoslo y configuremos el sitio.
sudo apt install nginx -y
sudo nano /etc/nginx/sites-available/mi-app
Pega esto (ajusta tu dominio y la ruta de tu carpeta):
Nginx
server {
listen 80;
server_name mi-app.com; # Tu dominio aquí
root /var/www/mi-app/public; # IMPORTANTE: apunta a la carpeta /public
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.5-fpm.sock; # Conexión con PHP 8.5
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Luego, activamos el sitio y damos permisos para que Nginx pueda leer los archivos:
sudo ln -s /etc/nginx/sites-available/mi-app /etc/nginx/sites-enabled/
sudo chown -R www-data:www-data /var/www/mi-app
sudo service nginx restart
5. Seguridad: Certbot (SSL Gratis)
Hoy en día, un sitio sin candadito verde se ve mal. Vamos a usar Let’s Encrypt para tener HTTPS gratis:
Bash
sudo apt install snapd -y
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot
sudo certbot --nginx
Sigue las instrucciones, di que sí a todo, y ¡listo! Tu sitio ya es seguro.
6. El motor bajo el capó: Supervisor y Cron
Laravel necesita hacer tareas en «segundo plano» (como mandar correos) y tareas programadas.
Supervisor se encarga de que tus procesos de cola nunca se mueran:
sudo apt install supervisor -y
sudo nano /etc/supervisor/conf.d/laravel-worker.conf
Pega esto (cambiando la ruta a tu proyecto):
[program:laravel-worker]
command=php /var/www/mi-app/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=www-data
numprocs=4
stdout_logfile=/var/log/worker.log
Actualiza Supervisor:
sudo supervisorctl reread && sudo supervisorctl update
Cron es para el calendario de tareas. Solo corre crontab -e y pega esta línea al final:
* * * * * php /var/www/mi-app/artisan schedule:run >> /dev/null 2>&1
7. Toque final: Optimización de PHP
Para que tu app vuele, vamos a activar el OPcache (que guarda el código PHP ya «masticado» en memoria).
Edita el archivo: sudo nano /etc/php/8.5/fpm/conf.d/10-opcache.ini y asegúrate de que tenga esto:
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=30000
opcache.validate_timestamps=0 # En producción esto da mucha velocidad
Un último consejo de amigos
Si estás en AWS y ves que Nginx no arranca porque ya hay algo ahí, es probable que Apache venga instalado por defecto. Quítalo sin miedo:
sudo apt purge apache2* -y
Y ya que estás ahí, instala htop. Es una pantallita a color que te dice si tu servidor está sufriendo o está relajado. ¡Suerte con el despliegue!