Cómo desplegar Symfony en tu hosting con PHP Composer de Plesk, sin SSH

Sube tu proyecto Symfony sin vendor, instala las dependencias desde PHP Composer en el panel, apunta la raíz del documento a public y sírvelo en producción.

Symfony no necesita nada especial del servidor: PHP, una carpeta public como raíz de la web y sus dependencias instaladas con Composer. Lo que sí necesita es ejecutar composer install en el servidor, y en un hosting sin SSH eso lo hace la extensión PHP Composer de Plesk, que está en todos los planes. Esta guía sigue un despliegue real de Symfony 8.1 en un subdominio; si usas Laravel, tienes su propio camino en Cómo instalar Laravel en tu hosting con Laravel Toolkit.

Antes de empezar

Paso a paso

  1. Sube el proyecto sin las carpetas vendor ni var a la carpeta symfony: un zip desde Archivos y Extraer archivos (Cómo publicar una web Astro en tu hosting sin Node en el servidor), o tu repositorio Git (Cómo desplegar tu web desde GitHub, GitLab o Bitbucket). Borra el index.html de bienvenida de Plesk. Al terminar, composer.json tiene que estar directamente en symfony, no en una subcarpeta.

  2. En Archivos, dentro de symfony, crea el archivo .env.local con el entorno de producción y una clave propia de 32 caracteres hexadecimales:

APP_ENV=prod
APP_SECRET=cambia-esto-por-32-caracteres-hex

El .env que viene en el proyecto se queda en dev; .env.local lo sobrescribe solo en el servidor y no viaja con el código.

  1. En la ficha del subdominio, pulsa PHP Composer y después Analizar. La extensión busca composer.json en la raíz del documento y en sus subcarpetas, y enseña las dependencias de tu proyecto, todas en No instalado. Comprueba que arriba pone Modo: Producción: es el que instala sin los paquetes de desarrollo.
Pantalla PHP Composer del subdominio con la carpeta /symfony, el modo Producción y las dependencias de Symfony en estado No instalado
  1. Pulsa Instalar. Composer descarga los paquetes del composer.lock y ejecuta los scripts de Symfony Flex; tarda un minuto. Al terminar, cada dependencia pasa a Actualizado con su versión.
PHP Composer con las seis dependencias de Symfony instaladas, todas en estado Actualizado y con su versión
  1. Cambia la raíz del documento: en la ficha del subdominio, Configuración de hosting, pon Raíz del documento en symfony/public y guarda. A partir de ahí el servidor sirve solo la carpeta public; el código, vendor y .env.local quedan fuera del alcance del navegador.
Configuración de hosting del subdominio con la Raíz del documento en symfony/public y el certificado Let's Encrypt seleccionado
  1. Si no subiste el .htaccess de apache-pack, créalo en symfony/public con este contenido. Sin él, solo responde la página principal y cualquier otra ruta da 404:
DirectoryIndex index.php
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI}::$0 ^(/.+)/(.*)::\2$
    RewriteRule .* - [E=BASE:%1]
    RewriteCond %{HTTP:Authorization} .+
    RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0]
    RewriteCond %{ENV:REDIRECT_STATUS} =""
    RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ - [L]
    RewriteRule ^ %{ENV:BASE}/index.php [L]
</IfModule>
  1. Abre https://symfony.tudominio.es. La primera petición tarda un par de segundos: Symfony compila su caché en var/cache/prod. Las siguientes salen al momento.
Página generada por Symfony 8.1 en el hosting con la hora del servidor pintada en cada petición
  1. Para actualizar: sube el código nuevo y, si cambió composer.lock, vuelve a PHP ComposerInstalar. Cuando cambies configuración o rutas, borra la carpeta var/cache desde Archivos para que Symfony la regenere.

Cómo comprobar que ha funcionado

La página principal responde, y una ruta distinta de / también (una que exista en tus controladores): eso prueba el .htaccess. En PHP Composer, todas las dependencias están en Actualizado. Y https://symfony.tudominio.es/.env.local da 404: la raíz del documento está en public.

Si algo falla

  • Analizar no encuentra nada: composer.json no está en la raíz del documento. Si extrajiste un zip que traía la carpeta del proyecto dentro, mueve su contenido a symfony.
  • Instalar falla por la versión de PHP («your php version does not satisfy that requirement»): el subdominio corre una versión más baja de la que pide composer.json. Cámbiala en PHP (Cómo cambiar la versión de PHP de tu web) y repite.
  • Error 500 al abrir la web: mira el registro de errores del subdominio en Registros (Cómo leer los registros de tu web para encontrar un error); si tu proyecto lleva Monolog, también en var/log/prod.log. Lo más habitual es que falte .env.local (Symfony arranca en dev y busca paquetes que el modo Producción no instaló) o que APP_SECRET esté vacío.
  • La portada funciona y el resto de rutas dan 404: falta el .htaccess del paso 6 en symfony/public.
  • Tu aplicación usa base de datos: crea una en Bases de datos (Cómo gestionar tu base de datos) y pon el DATABASE_URL en .env.local, con el formato mysql://usuario:contraseña@localhost:3306/nombre. Las migraciones se lanzan con bin/console desde una tarea programada de tipo Ejecutar un script PHP (Cómo crear tareas programadas en tu hosting y dispararlas desde fuera).
  • Tus assets van con Webpack Encore: construye en tu ordenador y sube public/build ya hecho; el Composer del panel no ejecuta npm.
  • Cualquier otra cosa: abre un ticket desde tu área de cliente (Cómo abrir un ticket de soporte y que se resuelva a la primera) con el error de PHP Composer o las últimas líneas del registro de errores.

Relacionados

  • 0 Los Usuarios han Encontrado Esto Útil
¿Fue útil la respuesta?

Artículos Relacionados

Cómo publicar una aplicación Node.js en tu hosting

Crea tu app.js y tu package.json, actívalos con Node.js Toolkit y deja la raíz del documento en...

Cómo desplegar tu web desde GitHub, GitLab o Bitbucket

Conecta un repositorio Git de GitHub, GitLab o Bitbucket a tu subdominio, elige el modo de...

Cómo instalar Laravel en tu hosting con Laravel Toolkit

Instala el esqueleto de Laravel en tu subdominio con Laravel Toolkit y entérate de por qué la web...

Cómo conectar Laravel a una base de datos MariaDB

Crea la base de datos MariaDB, edita el archivo .env y ejecuta las migraciones para que tu...

Cómo ejecutar Artisan, Composer y npm desde el panel

Lanza comandos habituales de Artisan, Composer y npm en tu aplicación Laravel sin acceso SSH,...