El despliegue de aplicaciones web Symfony

2021-03-06 - Categorías: Symfony
Symfony, el despliegue en producción

He recibido una consulta a la web sobre este tema, sobre el cómo pasar aplicaciones Symfony a producción. Así que por aquí estoy de nuevo dejando algunos tips, o cosas a tener en cuenta. Esto es un resumen, un codekata o howto, para desplegar aplicaciones web Symfony.

El despliegue de estas aplicaciones puede volverse realmente elaborado, dependiendo de hasta donde queramos automatizar. Es importante porque podemos querer actualizar producción varias veces al día.

En un post anterior estuve escribiendo sobre cómo programar despliegues automáticos con Git. Usar Git es la opción que yo prefiero. Voy a tratar de centrarme en lo especial que tiene Symfony. La documentación oficial está muy bien, con muchos detalles, y muy extendida. Luega dejo enlace para el que quiera seguir avanzando.

Al grano..

Puntos clave a tener en cuenta en el despliegue

Desde mi punto de vista, me suelo fijar en:

  • /public en las últimas versiones Symfony este directorio es donde debe apuntar el directorio raiz del proyecto en el servidor web, ya sea Apache, Nginx, etc.. Se pueden añadir todos los subdirectorios de assets a Git, para facilitar el despliegue evitando comandos de despliegue luego.
  • PHP conviene tener la misma versión en local y en el servidor.
  • /vendor este directorio lo podemos automatizar para que se regenere con cada despliegue. Lo ideal es usar Composer en el servidor optimizando los vendors (composer install –optimize-autoloader). Otra forma es meter todos estos ficheros en Git, o subirlo al servidor de la forma que hayamos decidido.
  • Actualizaciones de la BD: conviene preparar las migraciones de Doctrine en local, probarlas bien reseteando todo antes de subirlas a producción. Lo ideal es sólo tener que lanzar ‘php bin/console doctrine:migrations:migrate -n’ de forma automatizada en el servidor.
  • .env.local este fichero es el fichero de configuraciones. Se pueden crear variables de entorno en el servidor y otras virguerías, pero lo más sencillo es subir un fichero .env.local al servidor con las configuraciones de producción. Es necesario cambiar el APP_ENV=prod, APP_SECRET, DATABASE_URL y las demás configuraciones necesarias.
  • Si usamos Apache conviene instalar con Composer el symfony/apache-pack.
  • /config hay que revisar el directorio de configuraciones para producción. Dentro de este directorio /config, hay subdirectorios como por ejemplo /config/packages/prod/, en donde podemos definir configuraciones distintas de producción.
  • Hay que limpiar la caché, archivos temporales, instalar los assets si no están en Git, etc.. en el momento del despliegue.

Un Shell Script de pruebas para despliegue de Symfony con SSH

Comparto un Shell Script de un proyecto mascota de esos que todos tenemos para juguetear con las cosas 😉 Despliega automáticamente una aplicación Symfony desde local. Es decir, que simplemente se conecta al servidor, lanza los comandos en el servidor, y luego cierra la conexión. Lo mismo sería si desplegamos manualmente con SSH:

ssh -i /directorio/de/la/clave/de/acceso.pem ubuntu@tuhostdeproduccion.com <<EOSCRIPT
sudo su - webuser
cd /home/webuser/public_html
git checkout master
git fetch --all
git reset --hard origin/master
composer install --no-interaction --optimize-autoloader
rm -rf var/cache/*
rm -rf var/log/*
php7.2 bin/console doctrine:migrations:migrate -n
php7.2 bin/console ckeditor:install -n
php7.2 bin/console assets:install public
mkdir /home/webuser/public_html/var/cache/
mkdir /home/webuser/public_html/var/cache/prod/
touch /home/webuser/public_html/var/log/prod.log
rm -rf /var/cache/mod_pagespeed/*
echo Finished wit DB update..
exit
EOSCRIPT

Si el proyecto es muy muy sencillo, igual se puede cambiar la línea de las migraciones de Doctrine por:

php7.2 bin/console doctrine:schema:update --dump-sql --force

Otra cosa a cambiar puede ser la rama de producción de Git. En este script está en master producción.

Despliegue de Symfony con FTP

Para esto hay varias utilidades por internet que te permiten conectar automáticamente a un FTP remoto, en donde esté alojado el proyecto en producción, y hacer el despliegue:
https://github.com/dg/ftp-deployment

Con JavaScript mediante NPM hay varios paquetes con este objetivo:
https://www.npmjs.com/search?q=ftp%20deploy

Despliegue de Symfony con Git

A día de hoy cada vez se usa más Git como sistema de control de versiones. Yo prefiero esta última forma, me remito al un post anterior sobre esto:
https://jnjsite.com/scripts-y-tecnicas-de-despliegue-continuo-para-una-web-con-git/

En ese post traté varias opciones que tenemos con Cpanel, Plesk, GitLab, Virtualmin, etc..

Terminando y otras consideraciones

Para terminar sólo me queda remitirte a la documentación oficial por si quieres seguir avanzando con el tema:
https://symfony.com/doc/current/deployment.html

Ahora mismo no se me ocurren otras opciones, pero te invito a dejar un comentario aquí abajo con otras alternativas..

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

© 2021 JnjSite.com - MIT license

Sitio hecho con WordPress, diseño y programación del tema por Jnj.