Instalar Symfony en hosting compartido: guía paso a paso

Symfony es un framework PHP profesional que funciona muy bien en hosting compartido. En esta guía aprenderás a instalar y configurar Symfony y a dejarlo listo para producción en el hosting de Theory7.

Requisitos de Symfony

Comprueba que tu hosting cumple los requisitos.

Requisitos de PHP

Symfony 7 requiere:

  • PHP 8.2 o superior
  • Extensión PHP JSON
  • Extensión PHP Ctype
  • Extensión PHP Tokenizer
  • Extensión PHP PCRE
  • Extensión PHP Session
  • Extensión PHP SimpleXML

Otros requisitos

  • Acceso SSH para Composer
  • Base de datos MySQL, PostgreSQL o SQLite
  • Espacio en disco suficiente (como mínimo 50MB)
  • Composer disponible En el hosting de Theory7, todos los requisitos están disponibles de serie.

Activar el acceso SSH

Para instalar Symfony necesitas SSH.

Configurar SSH

  1. Inicia sesión en DirectAdmin
  2. Ve a Account Manager y después a SSH Keys
  3. Genera o sube tu clave SSH
  4. Activa el acceso SSH Consulta también: Activar el acceso SSH

Establecer la conexión

ssh gebruikersnaam@example.nl

Instalar Symfony

Hay varias formas de instalar Symfony.

Website skeleton (recomendado para aplicaciones web)

cd ~/domains/example.nl
# Crea un nuevo proyecto Symfony
composer create-project symfony/skeleton myproject
# Ve al proyecto
cd myproject
# Añade el bundle webapp
composer require webapp

El bundle webapp instala todo lo necesario para una aplicación web completa.

Instalación mínima

Para API o microservicios:

composer create-project symfony/skeleton myproject
cd myproject
# Solo lo que necesitas
composer require symfony/http-foundation
composer require symfony/routing

Verificar la instalación

# Comprueba la versión de Symfony
php bin/console --version
# Salida: Symfony 7.x.x

Configurar la raíz del documento

El hosting compartido requiere una configuración especial.

Crear un enlace simbólico public_html

La carpeta public de Symfony debe ser la raíz del documento:

cd ~/domains/example.nl
# Copia de seguridad del public_html antiguo
mv public_html public_html_backup
# Crea un enlace simbólico a public de Symfony
ln -s myproject/public public_html

Alternativa: redirección con .htaccess

# En el .htaccess de la raíz
RewriteEngine On
RewriteRule ^(.*)$ myproject/public/$1 [L]

Configurar el entorno

Symfony usa .env para la configuración.

Editar el archivo .env

cd myproject
nano .env

Ajusta los siguientes valores:

# Entorno de la aplicación
APP_ENV=prod
APP_SECRET=genereer-een-lange-geheime-string
# Debug desactivado en producción
APP_DEBUG=0
# URL de la base de datos
DATABASE_URL="mysql://user:password@localhost:3306/database?serverVersion=10.6&charset=utf8mb4"

Generar APP_SECRET

# Genera un secreto aleatorio
php -r "echo bin2hex(random_bytes(16));"

Usa este valor para APP_SECRET.

.env.local para producción

Crea un archivo .env.local para los ajustes específicos del servidor:

nano .env.local
APP_ENV=prod
APP_DEBUG=0
DATABASE_URL="mysql://productie_user:wachtwoord@localhost:3306/productie_db"

Este archivo tiene prioridad sobre .env y no se incluye en Git.

Configurar la base de datos

Configura la conexión con la base de datos.

Crear la base de datos

  1. Ve a DirectAdmin
  2. Abre Account Manager y después MySQL Management
  3. Crea una nueva base de datos
  4. Anota el nombre de la base de datos, el usuario y la contraseña

Instalar Doctrine ORM

composer require symfony/orm-pack

Crear el esquema de la base de datos

# Crea las tablas de la base de datos
php bin/console doctrine:schema:create
# O con migraciones
php bin/console doctrine:migrations:migrate

Caché y optimización

Optimiza para producción.

Vaciar y precalentar la caché

# Vacía la caché
php bin/console cache:clear --env=prod
# Precalienta la caché
php bin/console cache:warmup --env=prod

Instalar los assets

Si tienes assets de frontend:

php bin/console assets:install public

Optimizar el autoloader

composer install --no-dev --optimize-autoloader

Enrutamiento y controladores

Configura el enrutamiento básico.

Crear el primer controlador

# Con el maker bundle (desarrollo)
php bin/console make:controller HomeController

O manualmente, creando src/Controller/HomeController.php con este contenido:

<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class HomeController extends AbstractController
{
    #[Route('/', name: 'home')]
    public function index(): Response
    {
        return new Response('Hello Symfony!');
    }
}

Ver las rutas

php bin/console debug:router

Configurar los registros

Configura los registros para producción.

Editar monolog.yaml

Ajusta config/packages/prod/monolog.yaml con este contenido:

monolog:
    handlers:
        main:
            type: fingers_crossed
            action_level: error
            handler: nested
        nested:
            type: stream
            path: "%kernel.logs_dir%/%kernel.environment%.log"
            level: debug

Ver los registros

tail -f var/log/prod.log

Problemas frecuentes

Error 500 tras la instalación

  1. Comprueba que la carpeta var/ tiene permisos de escritura:
chmod -R 775 var
  1. Revisa los registros:
cat var/log/prod.log

Cache permission denied

# Restablece los permisos
rm -rf var/cache/*
chmod -R 775 var

Ruta no encontrada

  1. Vacía la caché: php bin/console cache:clear
  2. Comprueba las rutas: php bin/console debug:router
  3. Revisa las anotaciones de los controladores

Error de memoria de Composer

php -d memory_limit=512M composer install

Configurar la seguridad

Configura la seguridad básica.

Instalar el bundle de seguridad

composer require symfony/security-bundle

Forzar HTTPS

Añade en .htaccess estas líneas:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Flujo de despliegue

Un despliegue típico:

# 1. Actualizar el código (git pull o subida)
# 2. Instalar las dependencias
composer install --no-dev --optimize-autoloader
# 3. Migraciones de la base de datos
php bin/console doctrine:migrations:migrate --no-interaction
# 4. Vaciar y precalentar la caché
php bin/console cache:clear --env=prod
php bin/console cache:warmup --env=prod
# 5. Instalar los assets
php bin/console assets:install public

Buenas prácticas

Para desarrollo

  • Usa APP_ENV=dev
  • Instala el profiler: composer require --dev symfony/profiler-pack
  • Barra de depuración visible

Para producción

  • APP_ENV=prod y APP_DEBUG=0
  • Caché precalentada
  • Sin dependencias de desarrollo
  • Registros en archivos

¿Necesitas ayuda?

Estamos a tu disposición. ¿Te has topado con algún problema o tienes preguntas? Nuestro equipo de soporte te ayuda personalmente. Envíanos un mensaje a través del sistema de tickets: solemos responder en unas pocas horas y buscamos la solución contigo.

¿Buscas un nombre de dominio? Consulta nuestra oferta.