Skip to content

🚀 Desplegament de Laravel amb PHP-FPM, MySQL i NGINX en una màquina remota

Aquesta guia explica com desplegar manualment una aplicació Laravel en un entorn real (sense Docker) en una màquina remota, utilitzant PHP-FPM, MySQL i NGINX. El projecte Laravel es clona a /var/www/html.

1️⃣ Preparació Inicial

🔐 Accedir a la màquina remota

ssh usuari@ip-del-servidor

📦 Instal·lació de paquets bàsics

apk add --no-cache nodejs npm nano curl bash git

2️⃣ Clonar el projecte Laravel

cd /var/www/html
git clone https://github.com/usuari/pablo-app.git
cd pablo-app

3️⃣ Instal·lació de PHP i PHP-FPM

🔧 Instal·lar PHP 8.4 i components

/bin/bash -c "$(curl -fsSL https://php.new/install/linux/8.4)"
apk add --no-cache php84-fpm php84-mysqli php84-pdo php84-pdo_mysql php84-openssl php84-tokenizer

👤 Crear usuari per executar PHP

addgroup -S www-data
adduser -S -G www-data www-data

🔐 Permisos per a Laravel

chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache

⚙️ Fitxer .env

Edita .env per configurar la base de dades:

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=root
DB_PASSWORD=

4️⃣ Instal·lació de Composer i dependències Laravel

composer install
composer require laravel/breeze --dev
php artisan breeze:install
npm install && npm run build
composer dump-autoload
php artisan config:clear
php artisan cache:clear

5️⃣ Configuració de PHP-FPM

📂 Crear directori per al socket

sudo mkdir -p /run/php
chown -R www-data:www-data /run/php
chmod 755 /run/php

📝 Editar /etc/php84/php-fpm.d/www.conf

Assegura’t que conté:

listen = /run/php/php8.4-fpm.sock
user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data

▶️ Iniciar PHP-FPM

php-fpm84

6️⃣ Instal·lació i configuració de MariaDB

apk add mariadb mariadb-client
mkdir -p /run/mysqld
chown -R mysql:mysql /run/mysqld /var/lib/mysql
mysql_install_db --user=mysql --datadir=/var/lib/mysql
mysqld --user=mysql &

🛠️ Crear base de dades

mariadb
> CREATE DATABASE laravel_db;
> USE laravel_db;
> SHOW TABLES;

7️⃣ Configuració de NGINX

apk add --no-cache nginx
mkdir -p /etc/nginx/sites-available /etc/nginx/sites-enabled

📝 Exemple complet de fitxer /etc/nginx/sites-available/laravel.conf

server {
    listen 80;
    server_name localhost;

    # Definim el directori del projecte Laravel
    root /var/www/html/netflix/public;

    index index.php index.html index.htm;

    # Habilitar la gestio  d'errors
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    # Gestio d'errors amb htmls personalitzats
    error_page 401 403 404 /40x.html;
    error_page 500 501 502 503 /50x.html;

    location = /40x.html {
        root /var/www/html/errors;
    }
    location = /50x.html {
        root /var/www/html/errors;
    }

    # Configurar el maneig de les sol·licituds PHP
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # Prevenir l'accés a fitxers sensibles
    location ~ /\.ht {
        deny all;
    }
}

🔗 Enllaç simbòlic per activar el lloc

ln -s /etc/nginx/sites-available/laravel.conf /etc/nginx/sites-enabled/

📝 Editar /etc/nginx/nginx.conf per incloure els llocs disponibles

nano /etc/nginx/nginx.conf

Dins del bloc http, afegeix si no hi és:

include /etc/nginx/sites-enabled/*.conf;

✅ Verificació Final

🌍 Accedir a Laravel

Visita http://ip-del-servidor des del navegador.

📋 Comprovar logs d'errors

cat /var/log/nginx/error.log

🔁 Ordres útils

# Aturar serveis
pkill php-fpm84
pkill mysqld
nginx -s stop

# Reiniciar serveis
php-fpm84
mysqld --user=mysql &
nginx