Symfony es la opción favorita de los desarrolladores de PHP para crear aplicaciones de pequeña a gran escala. Con cada nuevo lanzamiento, Symfony se convierte en un mejor conjunto de herramientas para desarrolladores. Symfony permite procesos rápidos de desarrollo de aplicaciones para que los desarrolladores puedan crear API a gran escala, plataformas de comercio electrónico, fintech y aplicaciones de contabilidad, etc. En el otro lado del espectro, los desarrolladores pueden crear sitios web simples con la ayuda del motor de plantillas Twig.
Symfony 4 tiene un sistema de recetas inteligente y una estructura de directorios simplificada que no sobrecarga los archivos de código de tu proyecto. Symfony Flex está ahí para instalar bibliotecas con nombres de alias y registrarlas automáticamente en las configuraciones del paquete. La nueva versión también presenta un sistema de enrutamiento ultrarrápido que utiliza búsquedas de mapas hash para rutas estáticas y expresiones regulares combinadas para rutas con marcadores de posición.
Dada la popularidad de Symfony 4, decidí configurar y configurar esta versión en una máquina Debian 9. En este artículo, te mostraré cómo puedes configurar una pila Symfony completa para ejecutar aplicaciones Symfony. El proceso incluye pasos relacionados con permisos, webroots y servidor web.
Crear un servidor DigitalOcean
Hoy en día, puede encontrar varios proveedores de alojamiento en la nube en el mercado y la elección realmente se reduce a su combinación de requisitos de rendimiento y presupuesto.
A los efectos de este artículo, optaré por DigitalOcean, un proveedor de alojamiento en la nube muy apreciado por los desarrolladores. Puede registrarse fácilmente para obtener una cuenta de DigitalOcean y elegir su distribución, tamaño y el centro de datos de su servidor, como se muestra en el siguiente GIF:
Ahora, el siguiente paso es lanzar la terminal SSH. Si es un usuario de Linux o Mac, lo obtiene de forma predeterminada en su máquina. Si es usuario de Windows, debe descargar PuTTY. La buena noticia es que Windows 10 viene con su propio PowerShell que puede usar para los fines de este artículo.
Después de iniciar el droplet, necesita los siguientes tres elementos para iniciar sesión en el terminal SSH:
-
Dirección IP del servidor
-
Nombre de usuario
-
Contraseña o clave SSH
Como estoy usando Windows, usaré PuTTY para todas las actividades relacionadas con SSH. Anote los elementos anteriores del droplet e inicie sesión en el terminal SSH. En PuTTY, cuando ingresas la dirección IP y presionas Enter, el servidor te preguntará sobre el almacenamiento en caché de la clave. Pulsa simplemente Sí.
A continuación, ingrese las credenciales e iniciará sesión en su droplet de DigitalOcean con acceso raíz.
La pila LAMP de Symfony
Symfony se basa en una pila LAMP típica que comprende PHP, Apache/Nginx, MySQL y una distribución de Linux. Primero debe instalar todos estos componentes de software y luego configurar Apache/Nginx de acuerdo con los requisitos de Symfony. Afortunadamente, todos los componentes para crear la pila de Symfony son de código abierto, por lo que solo necesitas ejecutar los comandos e instalarlos a través de SSH en tu servidor.
Symfony también definió la configuración del servidor web para Nginx y Apache en su documentación, por lo que cubriré la configuración principal aquí y puedes leer el resto allí.
Actualizar los paquetes en Debian
El primer elemento de acción en la lista es actualizar los paquetes en la máquina Debian.
Comience por verificar la versión de Debian en el servidor ejecutando el siguiente comando:
cat /etc/debian_version
Así que tengo Debian 9.4 en mi servidor DigitalOcean.
A continuación, ejecute los siguientes comandos para actualizar los paquetes a través de SSH:
apt-get update
apt-get upgrade
apt-get dist-upgrade
Una vez que todo se ha actualizado, estoy listo para instalar el servidor web.
Instalar Apache2 para Symfony 4
Vaya a la terminal SSH e instale primero Apache2 con el siguiente comando:
apt-get install apache2 -y
Una vez finalice el comando accede a la IP de tu servidor y verás la página de bienvenida de Apache:
Próximo. vaya a la estructura de subdirectorios con el comando:
cd /etc/apache2/sites-available/
Habilite rápidamente la opción mod_rewrite primero con este comando:
a2enmod rewrite
Ahora abre 000-default.conf y agregue lo siguiente para configurar el host web en Apache 2:
<VirtualHost *:80>
ServerName domain.tld
ServerAlias www.domain.tld
DocumentRoot /var/www/html/symfony4/public
<Directory /var/www/html/symfony4/public>
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from All
</Directory>
# uncomment the following lines if you install assets as symlinks
# or run into problems when compiling LESS/Sass/CoffeeScript assets
# <Directory /var/www/html>
# Options FollowSymlinks
# </Directory>
ErrorLog /var/log/apache2/project_error.log
CustomLog /var/log/apache2/projec_access.log combined
</VirtualHost>
Ahora, Apache2 está configurado para ejecutar el proyecto desde /var/www/html carpeta. Pero también puedes ampliar la configuración con algunas opciones más que mejor se adapten a Symfony 4. Aquí tienes un ejemplo:
<VirtualHost *:80>
ServerName domain.tld
ServerAlias www.domain.tld
DocumentRoot /var/www/html/symfony4/public
<Directory /var/www/html/symfony4/public>
AllowOverride None
Require all granted
Allow from All
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
</Directory>
# uncomment the following lines if you install assets as symlinks
# or run into problems when compiling LESS/Sass/CoffeeScript assets
# <Directory /var/www/crvfakeexample.com>
# Options FollowSymlinks
# </Directory>
# optionally disable the RewriteEngine for the asset directories
# which will allow apache to simply reply with a 404 when files are
# not found instead of passing the request into the full symfony stack
<Directory /var/www/crvfakeexample.com/public/bundles>
<IfModule mod_rewrite.c>
RewriteEngine Off
</IfModule>
</Directory>
ErrorLog /var/log/apache2/crvfakeexample.com_error.log
CustomLog /var/log/apache2/crvfakeexample.com_access.log combined
# optionally set the value of the environment variables used in the application
#SetEnv APP_ENV prod
#SetEnv APP_SECRET <app-secret-id>
#SetEnv DATABASE_URL "mysql://db_user:[email protected]:3306/db_name"
</VirtualHost>
También puede usar las opciones más recientes de Apache, como Requerir todo otorgado y configure las variables de entorno en los ajustes anteriores. Ahora vuelva a cargar el servidor Apache con el siguiente comando para que la nueva configuración surta efecto:
service apache2 reload
Instalar Nginx para Symfony 4
Si no desea utilizar Apache, Nginx es una excelente opción para un servidor web. El proceso es bastante similar.
Comience instalando Nginx con el siguiente comando:
apt-get update
apt-get install nginx -y
Ahora ejecute cd /etc/nginx/conf.d y configure el archivo como:
server {
server_name domain.tld www.domain.tld;
root /var/www/html/symfony4/public;
location / {
# try to serve file directly, fallback to index.php
try_files $uri /index.php$is_args$args;
}
location ~ ^/index\.php(/|$) {
fastcgi_pass unix:/var/run/php7.1-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
# optionally set the value of the environment variables used in the application
# fastcgi_param APP_ENV prod;
# fastcgi_param APP_SECRET <app-secret-id>;
# fastcgi_param DATABASE_URL "mysql://db_user:[email protected]:3306/db_name";
# When you are using symlinks to link the document root to the
# current version of your application, you should pass the real
# application path instead of the path to the symlink to PHP
# FPM.
# Otherwise, PHP's OPcache may not properly detect changes to
# your PHP files (see https://github.com/zendtech/ZendOptimizerPlus/issues/126
# for more information).
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
# Prevents URIs that include the front controller. This will 404:
# http://domain.tld/index.php/some-path
# Remove the internal directive to allow URIs like this
internal;
}
# return 404 for all other php files not matching the front controller
# this prevents access to other php files you don't want to be accessible.
location ~ \.php$ {
return 404;
}
error_log /var/log/nginx/project_error.log;
access_log /var/log/nginx/project_access.log;
}
Ahora recarga el servidor ejecutando el siguiente comando:
service nginx reload
Instalar PHP 7.2 para Symfony 4
Una dependencia importante de Symfony 4 es PHP 7.1.3 (o superior) en el servidor. Para instalar la versión requerida, necesito actualizar/instalar algunos paquetes en Debian 9 para instalar PHP 7.2. Vaya a la terminal SSH (y asegúrese de estar en la raíz) y ejecute los siguientes comandos:
sudo apt install ca-certificates apt-transport-https
wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
sudo echo "deb https://packages.sury.org/php/ stretch main" | tee /etc/apt/sources.list.d/php.list
Ahora, en el siguiente paso, ejecute estos comandos:
sudo apt update
sudo apt install php7.2
Después de una instalación exitosa, verifique la versión de PHP:
php -v
También necesito instalar algunas bibliotecas más para asegurarme de que PHP 7.2 funcione correctamente en el servidor. Ejecute el siguiente comando para instalar las bibliotecas necesarias:
sudo apt install php7.2-cli php7.2-common php7.2-curl php7.2-gd php7.2-json php7.2-mbstring php7.2-mysql php7.2-xml libapache2-mod-php7.2
Las bibliotecas se instalarán y PHP 7.2 se configurará correctamente para Symfony 4.
Instalar MySQL para configurar bases de datos
Instalemos rápidamente la base de datos MySQL.
Comience ejecutando el siguiente comando:
apt-get install mysql-server
El proceso se detendrá para pedir su permiso. Tipo (y ) y presione Entrar. En la siguiente ventana, establezca la contraseña para el usuario root de MySQL.
El proceso finaliza en cuestión de minutos.
A continuación, configuraré MySQL de acuerdo con los requisitos de la pila LAMP. Para esto, ingrese el siguiente comando:
mysql_secure_installation
En este punto, la configuración del servidor está completa según los requisitos de Symfony 4. Ahora me concentraré en instalar el marco en sí.
Instalar Composer en Debian 9
Instalar Composer globalmente es una buena idea porque de esta manera, todos los usuarios pueden usarlo fácilmente. Entonces, lo instalaré en /user/local/bin directorio.
Primero copiemos el instalador en /tmp directorio:
php -r "copy('https://getcomposer.org/installer', '/tmp/composer-setup.php');"
A continuación, ejecute el siguiente comando para ejecutar el archivo Composer e instalarlo globalmente:
sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
Ahora que Composer está instalado, continuaré con la instalación real de Symfony 4.
Finalmente, instale Symfony 4 en el servidor Debian 9
En este punto, configuré el servidor Apache para webroot proporcionando la URL:/var/www/html/symfony4/public.
Entra en el html y ejecuta el siguiente comando de Composer para instalar Symfony 4:
composer create-project symfony/skeleton symfony4
El marco se instalará en unos segundos. Debido a que Symfony 4 está muy optimizado con una base de código pequeña y dependencias, no solicitará ninguna credencial durante la instalación. Una vez hecho esto, debe configurar la base de datos.
Una vez finalice el proceso accede a la IP de tu servidor y verás la página de bienvenida:
A continuación, agregaré las credenciales de la base de datos a .env archivo de Symfony.
###> doctrine/doctrine-bundle ###
APP_ENV=dev
APP_DEBUG=1
APP_SECRET=bd4d4fxxxx035a97fxxxed13f18646f
# customize this line!
DATABASE_URL="mysql://db_user:[email protected]:3306/db_name"
###< doctrine/doctrine-bundle ###
Palabras Finales
Symfony 4 ha sido ampliamente adoptado y apreciado por los desarrolladores de PHP y ya se ha descargado por millones. También puedes usar las versiones estándar de Symfony 3.x (solo necesitas actualizar el comando para instalar la versión específica):
Para Symfony 3.0:
composer create-project symfony/framework-standard-edition your_project_name "3.0.*"
Para Symfony 3.1:
composer create-project symfony/framework-standard-edition your_project_name "3.1.*"
Si necesita ayuda para instalar y configurar Symfony 4 en una máquina Debian 9, hágamelo saber en los comentarios.