This course is still being released! Check back later for more chapters.
Configuración de la base de datos y Docker
Muy bien, ¡ya tenemos Doctrine instalado! Pero ahora necesitamos, ya sabes, poner en marcha un servidor de base de datos.
DATABASE_URL
Variable de entorno
Echa un vistazo a nuestro archivo .env
. Cuando instalamos Doctrine, la receta Flex añadió esta sección doctrine-bundle. La variable de entornoDATABASE_URL
es donde le decimos a Doctrine cómo conectarse a nuestra base de datos. Es una cadena especial con aspecto de URL llamada DSN, si quieres un poco de terminología friki.
Contiene el tipo de base de datos a la que nos estamos conectando -mysql
, postgres
, sqlite
, borgsql
, etc, un nombre de usuario, contraseña, host, puerto y el nombre de la base de datos. Cualquier parámetro de consulta es una configuración extra.
Por defecto, DATABASE_URL
está configurado para conectarse a una base de datos Postgres y eso es lo que utilizaremos. Lo pondremos en marcha muy fácilmente con Docker.
Si no quieres utilizar Docker, ¡no hay problema! Comenta esta línea y descomenta la desqlite
. SQLite no requiere un servidor: es sólo un archivo en tu sistema de archivos. Como Doctrine abstrae la capa de base de datos, en su mayor parte, el código que escribamos funcionará con cualquier tipo de base de datos. ¡Genial!
Recuerda, no guardes ninguna información sensible en este archivo: está comprometido en tu repositorio. Si tienes tu propio servidor de base de datos localmente, crea un archivo .env.local
(Git lo ignora), y establece allí tu propio DATABASE_URL
.
Iniciar un contenedor Postgres con Docker
Vale, ¿cómo podemos poner en marcha un servidor de base de datos Postgres?
Echa un vistazo a compose.yaml
. Lo ha añadido una receta de Flex y contiene la configuración de Docker, incluido este servicio database
para poner en marcha un contenedor Postgres ¡Fantástico! Puedes hacer lo que quieras, pero nosotros sólo vamos a utilizar Docker como una forma cómoda de ejecutar localmente un servidor de base de datos. El propio PHP está instalado normalmente en mi máquina.
Abre tu terminal y ejecuta:
docker compose up -d
Esto inicia los contenedores Docker y -d
le dice a Docker que lo haga todo en segundo plano.
Pero, ¿dónde se ejecuta el servidor de bases de datos? ¿En qué puerto? ¿No necesitamos saberlo para poder actualizar DATABASE_URL
para que apunte a él?
¡La CLI de Symfony es genial!
No! El binario CLI de symfony
que está ejecutando el servidor web tiene algo de magia Docker! Salta y actualiza la aplicación. Aquí abajo, pasa el ratón sobre "Servidor". Contiene detalles sobre el servidor Symfony CLI. Esta parte significa que ha detectado automáticamente nuestros contenedores Docker y ha configurado las variables de entorno por nosotros
Tip
Para que la detección automática funcione, tu proyecto local tiene que ser un repositorio Git. Si sigues el código descargado, tendrás que inicializar uno con git init
.
Te lo mostraré. Ve a nuestro terminal y ejecuta:
symfony var:export --multiline
Esto nos muestra algunas variables de entorno adicionales que la CLI de Symfony está configurando para nosotros, además de las que aparecen en .env
.
Desplázate un poco hacia arriba para ver.... ¡Aquí está! DATABASE_URL
¡! Esto anula la que está en .env
y apunta a la base de datos Postgres que se ejecuta en Docker. Ese número de puerto cambiará aleatoriamente, pero la CLI de Symfony siempre utilizará el correcto.
symfony console
vs bin/console
Ahora, estamos acostumbrados a ejecutar los comandos de Symfony con bin/console
. Pero cuando utilizamos la CLI de Symfony con una base de datos Docker, necesitamos ejecutar los comandos específicos de la base de datos a través desymfony console
en su lugar. Es lo mismo que bin/console
, pero da a la CLI de Symfony la oportunidad de añadir las variables de entorno.
Crear la base de datos
Ya está El servidor de la base de datos se está ejecutando en un contenedor Docker y DATABASE_URL
está apuntando a él. Para crear la base de datos, ejecuta:
symfony console doctrine:database:create
¡Un error! ¡No te preocupes! El error nos está diciendo que la base de datos ya existe: aparentemente el servidor viene con una. Pero esto es bueno, ¡significa que nos estamos conectando a nuestro servidor de base de datos!
Bien, ya tenemos Doctrine y una base de datos. ¡Ahora necesitamos una tabla! Lo haremos a continuación saltando al mundo de las entidades y las migraciones.
So, I know that I should have followed the instructions exactly and checked the git diff, but I didn't think it would matter. In this case, it actually really does matter!
The automated detection of Docker was not working for me despite following the ticket mentioned in the other thread here in the comments. When I ran the
symfony var:export
command with the debug flag, it said it couldn't find my compose directory.The actual problem is that the compose directory is located by finding the
.git
directory that your terminal is currently inside of. When there is no git directory, it doesn't default to the directory you ran the command inside of or anything, it just doesn't know what directory to use. Because it doesn't know what directory to use, it can't look inside of Docker to see if there are any containers running.So, make sure you initialize a git repo if you download the source code and want to use the Docker compose project shown here 😅