If you liked what you've learned so far, dive in!
Subscribe to get access to this tutorial plus
video, code and script downloads.
With a Subscription, click any sentence in the script to jump to that part of the video!
Login SubscribeTengo una idea descabellada. Despleguemos este sitio de verdad.
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.
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!
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.
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.
¡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.
"Houston: no signs of life"
Start the conversation!
// 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
}
}