Instalar Symfony en hosting compartido: guía paso a paso
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
- Inicia sesión en DirectAdmin
- Ve a Account Manager y después a SSH Keys
- Genera o sube tu clave SSH
- 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
- Ve a DirectAdmin
- Abre Account Manager y después MySQL Management
- Crea una nueva base de datos
- 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
- Comprueba que la carpeta var/ tiene permisos de escritura:
chmod -R 775 var
- 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
- Vacía la caché:
php bin/console cache:clear - Comprueba las rutas:
php bin/console debug:router - 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.
A 0 de 0 personas les ha resultado útil