CursosEmpresasBlogLiveConfPrecios

Despliegue de Aplicaciones Symfony en Producción

Clase 15 de 17 • Curso de Symfony Framework

Contenido del curso

Symfony Framework

  • 1
    Crea una bolsa de empleo con Symfony

    Crea una bolsa de empleo con Symfony

    01:00 min
  • 2
    Autenticación y Gestión de Ofertas en Symfony

    Autenticación y Gestión de Ofertas en Symfony

    10:12 min
  • 3
    Desarrollo de Bolsa de Empleo con Symfony en PHP

    Desarrollo de Bolsa de Empleo con Symfony en PHP

    02:42 min
  • 4
    Modelo de Datos para Bolsa de Empleo: Entidades y Relaciones

    Modelo de Datos para Bolsa de Empleo: Entidades y Relaciones

    02:17 min
  • 5
    Virtualización y configuración de entornos de desarrollo con Homestead

    Virtualización y configuración de entornos de desarrollo con Homestead

    04:07 min
  • 6
    Creación y Configuración de un Proyecto Symfony con Homestead

    Creación y Configuración de un Proyecto Symfony con Homestead

    02:44 min
  • 7
    Creación de Entidades y Migraciones en Symfony

    Creación de Entidades y Migraciones en Symfony

    04:04 min
  • 8
    Creación de Controladores y Rutas en Symfony

    Creación de Controladores y Rutas en Symfony

    04:14 min
  • 9
    Listado y Creación de Empresas en Symfony

    Listado y Creación de Empresas en Symfony

    03:44 min
  • 10
    Control de Acceso y Creación de Usuarios en Symfony

    Control de Acceso y Creación de Usuarios en Symfony

    06:12 min
  • 11
    Creación de usuarios en Symfony para administradores

    Creación de usuarios en Symfony para administradores

    02:41 min
  • 12
    Listado y Postulación a Ofertas de Trabajo en Symfony

    Listado y Postulación a Ofertas de Trabajo en Symfony

    07:08 min
  • 13
    Layouts y herencia de templates en Twig

    Layouts y herencia de templates en Twig

    03:06 min
  • 14
    Envío de Correos en Symfony con Mailer y Transport

    Envío de Correos en Symfony con Mailer y Transport

    02:01 min
  • 15
    Despliegue de Aplicaciones Symfony en Producción

    Despliegue de Aplicaciones Symfony en Producción

    Viendo ahora
  • 16
    Comparativa de Frameworks PHP: Symfony, Laravel y Más

    Comparativa de Frameworks PHP: Symfony, Laravel y Más

    02:08 min
  • 17
    Symfony proyecto terminado: certifica y planifica

    Symfony proyecto terminado: certifica y planifica

    00:38 min
Tomar examen

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads

      Despliegue

      ¡Muy bien! ¡Ha llegado el momento de la verdad! La aplicación está lista y el cliente ansioso por cortar la cinta roja.

      Mano con tijeras cortando una cinta roja

      Es claro que, para que eso suceda el código debe, de alguna forma, llegar al servidor de Producción.

      Si bien en teoría puede tratarse de cualquier combinación de hardware/sistema operativo, lo más conveniente es que sea lo más parecido posible a tu máquina virtual.

      Ahora, antes de abrir el cliente de FTP, hay algunas consideraciones a tener en cuenta.

      Los entornos

      Symfony, como cualquier otro framework profesional, tiene muy incorporada la noción de entorno.

      Hasta ahora, siempre trabajamos en un ambiente controlado, el entorno de desarrollo (dev).

      En este contexto es perfectamente razonable (¡y útil!) ver cada tanto alguna pantalla similar a:

      Con un precioso volcado de la pila de llamadas y demás.

      Claro que, si esto llegara a los ojos de un usuario final sería… incómodo por decirlo de algún modo.

      Y si llegara a los ojos de un atacante sería realmente problemático.

      De ahí que ciertos comportamientos de la aplicación deben variar según el ambiente donde el código esté ejecutándose.

      Una forma de lograr esto sería llenar el código de sentencias if… claramente algo que NO haremos (Entre otros, si hiciéramos eso sería muy difícil confiar en las pruebas que realizamos localmente).

      Es aquí donde empiezan a jugar los archivos de configuración.

      Los archivos de configuración

      Desde los inicios de Symfony esta fue una preocupación: ¿cómo usar un mismo código en diferentes ambientes?

      Las versiones iniciales lo resolvían usando un punto de entrada diferente según el ambiente: había un archivo index.php y un app_dev.php (El primero para el ambiente productivo y el segundo para el de desarrollo).

      Si bien esto funcionaba, traía una serie de problemas aparejados que complicaban la subida a producción (Había que usar diferentes configuraciones para el webserver y ser cuidadoso con no llevar a producción el archivo app_dev entre otras).

      Actualmente se utiliza un esquema bastante mejor: la configuración de entorno.

      Todo el modelo se basa en que las diferencias entre lo que sucede en producción y cualquier otro ambiente deberían ser mínimas: sólo algunas configuraciones.

      Por ejemplo, es esperable que el servidor donde está la base de datos productiva y el de desarrollo no sean el mismo, lo mismo sucede con el usuario y contraseña.

      El sistema de configuración de Symfony es ciertamente complejo (aunque ha ido simplificándose a lo largo del tiempo).

      Por un lado tenemos la configuración específica de los paquetes que instalamos: todo lo que está dentro del directorio config/packages.

      En este directorio encontrarás un archivo .yaml por cada paquete.

      La modificación de estos archivos tiene un impacto directo en cómo estos paquetes realizan su tarea.

      Si miras dentro de este directorio encontrarás, al menos, tres más: dev, prod y test.

      En estos directorios puedes encontrar archivos con el mismo nombre que alguno que encuentres en el directorio padre.

      Cuando esto sucede lo que hace el framework es sobre-escribir la configuración padre con la que figura en el archivo hijo (solo en aquellas claves que están definidas).

      También puede ocurrir que sólo existan los archivos hijo. Esto puede deberse a que cada entorno requiere su propia configuración para un determinado paquete o bien a que cierto paquete sólo está disponible en un entorno determinado (Ejemplo: web_profiler.yaml).

      Si miras el archivo config/packages/dev/monolog.yaml y lo comparas con config/packages/prod/monolog.yaml notarás que existen muchas diferencias.

      En este caso, lo que ocurre es que el tratamiento de errores en producción será bastante diferente a aquel de desarrollo.

      Hasta aquí hemos visto las configuraciones que hacen al comportamiento.

      Luego están las configuraciones que tienen información específica del entorno.

      El principal archivo de configuración es .env.

      La configuración que no puede faltar es aquella que indique en qué entorno está ejecutando la aplicación.

      Al comienzo Symfony creará un archivo .env para nosotros y colocará allí la siguiente definición:

      APP_ENV=dev

      De este modo estamos indicando que las configuraciones que deben utilizarse son aquellas que estén en el directorio config/packages/dev

      Y luego tenemos algunas otras definiciones propias del entorno, como por ejemplo:

      DATABASE_URL=mysql://homestead:homestead@127.0.0.1:3396/homestead?serverVersion=5.7

      ¿Te suena familiar?

      En la clase 5 editaste este archivo… ahora entiendes por qué :)

      En cada computadora en que debe correr tu aplicación debe existir un archivo .env que defina, al menos, a qué entorno de trabajo pertenece.

      Luego existen escenarios algo más complejos donde, por ejemplo, dos servidores productivos podrían apuntar a bases de datos diferentes.

      En tal caso podrías crear un nuevo archivo .env.local donde definir únicamente la clave DATABASE_URL (Todo lo demás sería heredado de .env).

      Para nuestro ejemplo será suficiente con tener un archivo .env en nuestra computadora y uno similar pero diferente en el servidor de producción.

      El despliegue

      Antes de realizar el despliegue de nuestra aplicación será necesario:

      1. Contar con un servidor dónde realizar dicho despliegue
      2. Definir una estrategia para realizar dicho despliegue

      El punto 1 es bastante simple: se trata de contratar algún servicio de hosting que soporte PHP.

      Mi recomendación en este punto es usar algún VPS.

      Como hemos visto, trabajar con Symfony implica usar bastante la terminal y los hosting compartidos no suelen ser muy amigos de esta práctica, además de tener que luchar con versiones incompatibles de php… pero bueno, si no queda otra, será cuestión de adaptar nuestro Homestead a las posibilidades.

      Respecto del punto 2, las opciones son realmente muchas.

      La que yo suelo utilizar es la de apoyarme en Git.

      De modo que mi típico primer deployment es algo como:

      1. Realizar un push al servidor remoto (GitHub o BitBucket suelen ser mis elegidos).
      2. Realizar un pull desde mi servidor de producción.
      3. Instalar las dependencias via composer.
      4. Crear el archivo .env.
      5. Cambiar la configuración APP_ENV=dev por APP_ENV=prod.
      6. Correr las migraciones de la base de datos.
      7. Limpiar la cache.
      8. Apuntar el webserver al directorio public de mi aplicación.

      Respecto del punto de la caché, Symfony se apoya mucho en el uso de este mecanismo para acelerar la ejecución de las aplicaciones.

      Especialmente cuando se trata del entorno de producción y, más aún, si la cantidad de usuarios es grande, la diferencia entre servir contenido pre-generado o generado en el momento puede ser importante.

      Para limpiar la caché se utiliza el comando php bin/console cache:clear

      Claro que los siguientes despliegues son algo más sencillos:

      1. Realizar un push al servidor remoto.
      2. Realizar un pull desde mi servidor de producción.
      3. Instalar las dependencias vía composer.
      4. Correr las migraciones de la base de datos.
      5. Limpiar la cache.

      Cuando el proyecto esté desplegado en el servidor podrás ver esto al ingresar al sitio:

      Nota como ha desaparecido la barra inferior:

      Eso es natural: esa barra contiene información muy útil para tí cuando estás desarrollando, pero definitivamente no quieres que esté disponible para cualquier visitante!

      Este es uno de los efectos de cambiar la definición de APP_ENV de dev a prod.

      Otra diferencia que notarás es que, si se produce un error, la pantalla que verás será bastante más escueta, algo como:

      Oops! An Error Occured

      Nuevamente, esto tiene que ver con hacer tu aplicación algo más segura.

      Despliegues más complejos

      Dependiendo de las características particulares de nuestra aplicación y el hosting que tengamos puede que necesitemos alguna estrategia de deploy algo más compleja.

      En esos casos recomiendo utilizar alguna herramienta de automatización como puede ser scripts de bash o algún paquete propio de Symfony como EasyDeployBundle

      Bien, con esto tienes lo necesario para crear tus aplicaciones Symfony y desplegarlas en un servidor de producción. ¡¡Viva!!

      Ahora quiero invitarte a conversar sobre algunos otros frameworks que existen aparte de Symfony. ¡Acompáñame!

      Comentarios

      Mauricio Hernan Cabrera

      Mauricio Hernan Cabrera

      student•
      hace 6 años
      Sergio Andrés Barragan

      Sergio Andrés Barragan

      student•
      hace 5 años
      JUAN EMANUELL PAREDES MAAS

      JUAN EMANUELL PAREDES MAAS

      student•
      hace 5 años
      Kenet Andrés Chungandro Montenegro

      Kenet Andrés Chungandro Montenegro

      student•
      hace 6 años
      Juan David Rueda Quiroga

      Juan David Rueda Quiroga

      student•
      hace 6 años
      Jimmy Buriticá Londoño

      Jimmy Buriticá Londoño

      student•
      hace 5 años
      Nilson Reyes Sigua

      Nilson Reyes Sigua

      student•
      hace 5 años
      Carlos Eduardo Gomez García

      Carlos Eduardo Gomez García

      teacher•
      hace 5 años

      donde puedo ver el codigo del proyecto terminado? no me mas aparece en las clases

      Me sumo a la opinión de mis compañeros, seria muy bueno contar con el código del proyecto desarrollado en el curso.

      Esperaba ver en algun aparte los pasos para deployar, y solo existe un pequeña lista de una receta, en serio que es algo decepcionante este curso.

      Sería bastante bueno que se comparta el código del curso.

      Comparto la idea de mis compañeros, sería bueno un repositorio con el código para facilitar la depuración de errores

      Hoy en día uso Hostinger y me ha funcionado bien.

      Me hubiera gustado que se compartiera el código para comparar, y mucho más aún que se realizara este procedimiento en vídeo. Se me complicó el despliegue.

      En lo personal prefiero usar Digital Ocean para comprar mi VPS, es un buen servicio ^^