Flag of Ukraine
SymfonyCasts stands united with the people of Ukraine

Despliegue en Platform.sh

Keep on Learning!

If you liked what you've learned so far, dive in!
Subscribe to get access to this tutorial plus
video, code and script downloads.

Start your All-Access Pass
Buy just this tutorial for $12.00

With a Subscription, click any sentence in the script to jump to that part of the video!

Login Subscribe

Tengo una idea descabellada. Despleguemos este sitio de verdad.

Requisitos para el despliegue de AssetMapper

Puedes desplegar tu código como quieras... utilizando cualquier servicio o servidor web. No importa con AssetMapper. El único requisito es que tu servidor web soporte HTTP/2 para que nuestros activos -los archivos JavaScript y CSS- puedan descargarse en paralelo superrápido. HTTP/2 es la razón por la que no es tan importante que nuestros archivos no se combinen para minimizar las peticiones.

Todos los servidores web - nginx, Caddy, lo que sea - soportan HTTP/2. O podrías añadir Cloudflare o un servicio similar delante de tu sitio, que te proporciona esto gratis... junto con algunas otras ventajas.

configuración del archivo de configuración platform.sh

De todos modos, vamos a desplegar con Platform.sh, que es una "Plataforma como Servicio", lo que significa que podemos desplegar simplemente creando unos cuantos archivos de configuración. Y esta primera sección trata sobre cómo configurarlos. Una vez que hayamos terminado, hablaremos de algunos aspectos específicos del despliegue con AssetMapper.

Así que, ¡empecemos! Vamos a hacer la mayor parte de esto en la línea de comandos con el binario Symfony. Empieza ejecutando:

symfony project:init

Esto arranca unos cuantos archivos platform.sh, que puedes ver aquí..platform.app.yaml contiene instrucciones sobre cómo desplegar - como qué comandos ejecutar, qué versión de PHP utilizar, la configuración del servidor web y más. services.yaml es donde configuras los servicios que necesitas -como bases de datos, colas, etc.- yroutes.yaml configura tus dominios, y es un poco menos importante. Ah, y también puedes añadir cualquier configuración personalizada de php.ini con este archivo.

He ido registrando mis progresos a lo largo del proceso. Así que cuando ejecuto

git status

sólo muestra estos nuevos archivos. Vamos a confirmarlos y... ¡genial!

Registrando el proyecto platform.sh

Ahora que tenemos esos archivos locales, tenemos que llamar a la gente de platform.sh y decirles que queremos crear un nuevo proyecto. Lo haremos con

symfony cloud:project:create

Ya tengo algunos proyectos en Platform.sh...., lo que significa que ya tengo una organización... y ya tiene mi tarjeta de crédito. ¡Ladrones! Si es la primera vez que haces esto, tendrás que seguir unos pasos adicionales.

Dale un título a tu proyecto, selecciona una región -yo estoy utilizando "eu-5"- y luego te pregunta qué rama será tu entorno de producción. Yo estoy utilizando la rama por defecto main.

A continuación, nos pregunta si queremos establecer "Mixed Vinyl" como remoto para este repositorio. Esto es bastante guay porque expone cómo funciona platform.sh. Para desplegar con platform.sh, en realidad empujamos nuestro repositorio git a un repositorio remoto en sus servicios. Ellos lo ven, cogen el código y lo despliegan

De todos modos, voy a decir "no", pero tú puedes decir "sí". Como voy a decir "no", me verás hacerlo manualmente en un minuto - y te explicaré más sobre ello.

Por último, te pide que confirmes el precio. Estos 12 USD al mes son la tarifa de desarrollador que puedes pagar para jugar con las cosas. Será más cara cuando decidas poner tu sitio en producción de verdad. Me encanta platform.sh por lo fácil que me hace la vida, pero hay opciones más baratas.

Tardarás uno o dos minutos en configurarlo todo entre bastidores. Cuando termine... ¡ding! Obtenemos algo de información, incluido el nuevo ID del Proyecto.

Nota al margen: También hay una interfaz web en Platform.sh, así que no todo tiene que hacerse a través de la línea de comandos. Pero, ya sabes, los empollones como yo preferimos la línea de comandos.

Vincular el código local al proyecto remoto

Copia el ID del Proyecto. Llegados a este punto, tenemos algunos archivos de configuración locales -como.platform.app.yaml - y hemos creado un nuevo "proyecto" en plataforma.sh. Pero aún no están vinculados: nuestro código local no sabe que "pertenece" a este proyecto en plataforma.sh.

Para vincularlos, ejecuta

symfony project:set-remote

y pega el ID del proyecto.

Nuestro primer despliegue

¡Listo! ¿Listo para desplegar? Hazlo con:

symfony deploy

Actualmente estamos en la rama "principal", por lo que se está desplegando a, básicamente, nuestra máquina de "producción", lo que se llama un entorno. Una de las partes más interesantes de platform.sh es que desplegarás tu rama main en el entorno de "producción", pero también puedes desplegar otras ramas git en otros entornos platform.sh, en los que puedes pensar como otros servidores platform.sh.

De todos modos, como he mencionado, entre bastidores, este comando es sólo un atajo paragit push nuestra rama a un remoto git en los servidores platform.sh. Y al hacerlo, ¡se inicia el despliegue!

Oooh, esto parece elegante y friki. Aquí hay un montón de detalles, incluida una advertencia sobre el uso de una versión antigua de Composer. Lo arreglaremos en un minuto. Aquí abajo, vemos que se está ejecutando symfony composer install y realizando algunos otros pasos: todas las cosas básicas que necesitas para desplegar cualquier aplicación Symfony.

En la parte inferior, nos da un certificado SSL, y si seguimos desplazándonos... oooh, ¡tenemos un mensaje sobre un error en la base de datos! Ignóralo por ahora porque... cuando termina, ¡nos da una URL!

Como no hemos configurado ningún dominio para el sitio, nos da una URL temporal. Cópiala, gira y... ¡nuestro sitio está vivo! No tiene ningún estilo... ya que no hemos hablado de AssetMapper, ¡pero al menos funciona!

¿Pero cómo? ¿Cómo ha sabido ejecutar composer install y esas otras cosas? ¿Y la advertencia de Composer y el error de la base de datos? Vamos a profundizar en todo eso a continuación.

Leave a comment!

0
Login or Register to join the conversation
Cat in space

"Houston: no signs of life"
Start the conversation!

What PHP libraries does this tutorial use?

// composer.json
{
    "require": {
        "php": ">=8.1",
        "ext-ctype": "*",
        "ext-iconv": "*",
        "babdev/pagerfanta-bundle": "^4.0", // v4.2.0
        "doctrine/doctrine-bundle": "^2.7", // 2.10.0
        "doctrine/doctrine-migrations-bundle": "^3.2", // 3.2.4
        "doctrine/orm": "^2.12", // 2.15.2
        "knplabs/knp-time-bundle": "^1.18", // v1.20.0
        "pagerfanta/doctrine-orm-adapter": "^4.0", // v4.1.0
        "pagerfanta/twig": "^4.0", // v4.1.0
        "stof/doctrine-extensions-bundle": "^1.7", // v1.7.1
        "symfony/asset": "6.3.*", // v6.3.0
        "symfony/asset-mapper": "6.3.*", // v6.3.0
        "symfony/console": "6.3.*", // v6.3.0
        "symfony/dotenv": "6.3.*", // v6.3.0
        "symfony/flex": "^2", // v2.3.1
        "symfony/framework-bundle": "6.3.*", // v6.3.0
        "symfony/http-client": "6.3.*", // v6.3.0
        "symfony/monolog-bundle": "^3.0", // v3.8.0
        "symfony/proxy-manager-bridge": "6.3.*", // v6.3.0
        "symfony/runtime": "6.3.*", // v6.3.0
        "symfony/stimulus-bundle": "^2.9", // v2.9.1
        "symfony/twig-bundle": "6.3.*", // v6.3.0
        "symfony/ux-turbo": "^2.9", // v2.9.1
        "symfony/web-link": "6.3.*", // v6.3.0
        "symfony/yaml": "6.3.*", // v6.3.0
        "twig/extra-bundle": "^2.12|^3.0", // v3.6.1
        "twig/twig": "^2.12|^3.0" // v3.6.1
    },
    "require-dev": {
        "doctrine/doctrine-fixtures-bundle": "^3.4", // 3.4.4
        "symfony/debug-bundle": "6.3.*", // v6.3.0
        "symfony/maker-bundle": "^1.41", // v1.49.0
        "symfony/stopwatch": "6.3.*", // v6.3.0
        "symfony/web-profiler-bundle": "6.3.*", // v6.3.0
        "zenstruck/foundry": "^1.21" // v1.33.0
    }
}
userVoice