Despliegue del Backend de PHP + BBDD

Sitio: Campus virtual DAW - damiansu
Curso: Despliegue de Aplicaciones Web
Libro: Despliegue del Backend de PHP + BBDD
Imprimido por: Invitado
Día: miércoles, 22 de abril de 2026, 10:05

1. Despliegue: manual

Los pasos que vamos a seguir son los siguientes:

  1. Preparar servidor
  2. Crear base de datos
  3. Subir backend PHP
  4. Importar base de datos
  5. Configurar conexión
  6. Probar

Local
   ↓
Export SQL
   ↓
FTP código
   ↓
Import SQL
   ↓
Configurar conexión

1.1. Backend php

Estructura del proyecto

config/db.php (conexión a base de datos)

<?php

class Database
{
    private $host = "localhost";
    private $db_name = "miapp";
    private $username = "usuarioapp";
    private $password = "passwordseguro";

    public $conn;

    public function getConnection()
    {
        $this->conn = null;

        try {

            $this->conn = new PDO(
                "mysql:host=" . $this->host . ";dbname=" . $this->db_name . ";charset=utf8mb4",
                $this->username,
                $this->password
            );

            // Configuración recomendada
            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $this->conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

        } catch (PDOException $exception) {

            echo "Error de conexión: " . $exception->getMessage();
        }

        return $this->conn;
    }
}

?>

Con RDS

<?php

class Database
{
    private $host = 'database-cms.caswdttygyxp.us-east-1.rds.amazonaws.com';
    private $port = 3306;
    private $db = 'miapp';
    private $user = 'admin';
    private $password = 'ChuckNorris2026';


    public $conn;

    public function getConnection()
    {
        $this->conn = null;
        try {
            $conn = mysqli_init();
            mysqli_ssl_set($conn, NULL, NULL, "./global-bundle.pem", NULL, NULL);
            if (!mysqli_real_connect($conn, $this->host, $this->user, $this->password, $this->db, $this->port, NULL, MYSQLI_CLIENT_SSL)) {
                throw new Exception("Connection failed: " . mysqli_connect_error());
            }
            $r = mysqli_query($conn, "SELECT VERSION()");
            if (!$r) {
                throw new Exception("Query failed: " . mysqli_error($conn));
            }
            $row = mysqli_fetch_row($r);
            echo $row[0], "\n";
        } catch (Exception $e) {
            echo "Database error: " . $e->getMessage() . "\n";
        } finally {
            if ($conn) {
                mysqli_close($conn);
            }
        }

    }
}

?>

index.php (backend básico)

<?php

require_once "config/db.php";

header("Content-Type: application/json; charset=UTF-8");

$database = new Database();
$db = $database->getConnection();

if (!$db) {
    echo json_encode(["error" => "No se pudo conectar a la base de datos"]);
    exit;
}

try {

    $query = "SELECT id, nombre, email FROM usuarios";

    $stmt = $db->prepare($query);
    $stmt->execute();

    $usuarios = $stmt->fetchAll();

    echo json_encode([
        "status" => "ok",
        "total" => count($usuarios),
        "data" => $usuarios
    ]);

} catch (PDOException $e) {

    echo json_encode([
        "status" => "error",
        "mensaje" => $e->getMessage()
    ]);
}

?>

1.2. Preparar el servidor

LAMP

Apache

sudo apt update
sudo apt install apache2 php php-mysql mariadb-server php-mysqli
sudo apt install composer

1.3. Crear la base de datos

Podemos trabajar con phpMyAdmin o bien desde linea de comandos

sudo mysql

Dentro de mariadb:

CREATE DATABASE miapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'usuarioapp'@'localhost' IDENTIFIED BY 'passwordseguro';
GRANT ALL PRIVILEGES ON miapp.* TO 'usuarioapp'@'localhost';
FLUSH PRIVILEGES;

Tabla de ejemplo en MySQL

USE miapp;
CREATE TABLE usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100),
    email VARCHAR(100)
);
INSERT INTO usuarios (nombre,email) VALUES
("Ana","ana@test.com"),
("Carlos","carlos@test.com"),
("Lucia","lucia@test.com");

Salimos de mariadb

EXIT;

Comprobar la conexión a MySQL

Desde el servidor:

mysql -u usuarioapp -p miapp
SELECT * FROM usuarios;

1.4. Subir el backend PHP al servidor

Con FTP / SFTP / SCP

El directorio es /var/www/html o trabajamos con virtual host.

Desde nuestro ordenador donde estamos desarrollando (Windows/Mac/Ubuntu), subimos los archivos directamente utilizando scp (ssh). Pero podríamos utilizar ftp y apuntando a esa carpeta o bien sftp. Eso sí, el usuario tiene que tener permisos.

scp -r backend/ root@IP_SERVIDOR:/var/www/html/

Elimina el archivo index.html o bien cambia el orden de ejecución de los archivos por defecto (dir.conf)

rm /var/www/html/index.html 

Nos sale la página en formato json:

1.5. Mejoras genéricas

Ocultar errores en producción

// Configuración de errores (producción)
ini_set('display_errors', 0);
error_reporting(E_ALL);

Ver logs si algo falla

sudo tail -f /var/log/apache2/error.log

Probar desde terminal

curl http://IP_SERVIDOR/index.php
curl desplegando123.com

2. Despliegue: git

Con git es semimanual

Tu ordenador
   ↓
git push
   ↓
Repositorio GitHub
   ↓
Entrar al servidor
   ↓
git pull

2.1. Preparar el proyecto local

Creamos el repositorio en local

git init

Creamos el .gitignore para no publicar elementos en el repositorio

# Sistema / editor
.DS_Store
Thumbs.db

# Configuración sensible del proyecto (ya lo hemos subido antes)
config/db.php
.env

# Base de datos / backups
*.sql
*.dump

# Subidas de usuarios
uploads/

# Logs
*.log


#Archivos temporales
*.tmp
*.swp

# Dependencias (composer)
vendor/

# GitHub y CI
.github/

# Test o basura
tests/
node_modules/

Añadimos todos los archivos

git add .

Primer commit

git commit -m "Primer deploy backend PHP"

2.2. Crear repositorio en GitHub

2.3. Preparar el servidor

En el servidor necesitas git instalado:

sudo apt install git

2.4. Clonar el proyecto en el servidor

Ve al directorio web:

cd /var/www/html

Clona el repo:

sudo git clone https://github.com/TU_USUARIO/backend-php.git

Te crea:

/var/www/html/backend-php

Ajustamos permisos

sudo chown -R www-data:www-data /var/www/html/backend-php
sudo chmod -R 755 /var/www/html/backend-php

Copio el archivo de configuración que tenía en el anterior 

cp -R /var/www/html/config/  .

2.5. Verificación

Haces un cambio en local (Visual Studio)

echo "Nueva versión funcionando";

Subes cambios

git add .
git commit -m "Cambio en index"
git push

Entras al servidor (VPS)

ssh usuario@IP_SERVIDOR

Actualizas

cd /var/www/html/backend-php
git pull

A lo mejor no se fía

git config --global --add safe.directory /var/www/html/backend001

3. CI/CD

CI/CD 

Tu ordenador
   ↓
git push
   ↓
GitHub
   ↓
GitHub Actions
   ↓
Servidor (deploy automático)

4. Despliegue: Contenedores

Contenedores

Docker
Docker Compose