Una vez que tienes Yii instalado en tu sistema, el siguiente paso es realizar una configuración básica para iniciar un proyecto simple. Este proceso no solo te enseñará a configurar los elementos iniciales, sino que también te orientará sobre cómo gestionar el crecimiento de tu proyecto agregando módulos y software de terceros de forma eficiente.
¿Cómo configurar la base de datos?
El primer paso esencial es configurar tu base de datos. Esto se logra a través del archivo db.php, que es el núcleo de la configuración de la base de datos. Aquí encontrarás un arreglo que define las propiedades clave del sistema, como la clase que se necesita, el DSN (Data Source Name), el host, nombre de la base, usuario, contraseña y charset. Aunque puedes tener múltiples bases de datos, para este ejercicio nos centraremos en una sola.
Las variables de entorno ofrecen una forma profesional y segura para manejar información sensible como contraseñas. Crear un archivo de configuración de shell, como variables.local.sh, permite definir variables que el sistema operativo gestiona. Estas variables no se incluyen en el repositorio, lo que asegura que información crítica no quede expuesta.
Este enfoque facilita una ejecución segura y controlada de tu entorno.
¿Cómo ejecutar variables de entorno?
Para utilizar las variables definidas, se procede a ejecutarlas en la terminal. En sistemas Mac y Linux, el comando source permite que estas variables queden disponibles en el entorno operativo. Una vez invocadas, cualquier programa ejecutado en esa terminal podrá acceder a las variables.
source variables.local.sh
echo$DB_HOST
Al ejecutar estos comandos, confirmas que las variables están asignadas y listas para ser utilizadas por aplicaciones que necesiten dicha información.
¿Cómo asegurar y formatear la entrada de datos?
Dos funciones claves en PHP son getenv y sprintf. getenv se emplea para capturar el valor de una variable de entorno, mientras que sprintf formatea cadenas, asegurándose de que datos inesperados no alteren el sistema:
Estas funciones no solo aseguran un formato correcto, sino que también protegen contra el ingreso de código malicioso.
¿Qué más debemos considerar en la configuración?
Además del archivo db.php, hay otros archivos de configuración como params.php, que contiene configuraciones generales, y composer.json, que gestiona las dependencias del sistema. params.php puede almacenar aspectos generales como el remitente de correos o preferencias de paginación, mientras que composer.json te permite manejar las versiones de librerías y dependencias, asegurando compatibilidad y coherencia en el desarrollo.
Con la configuración adecuada, tu proyecto en Yii estará listo para crecer de manera organizada y segura. La clave está en la utilización eficiente de las herramientas y prácticas disponibles, asegurando que las configuraciones sean claras y estandarizadas para facilitar el mantenimiento futuro.
Configuración Básica de Proyectos en Yii con Variables de Entorno
Esta parte de la configuracion se siente un poco como un hack. Pero se entiende que es lo que el profesor quiere lograr y eso aporta a la seguridad de la aplicacion.
<u>Otra opcion seria usar un archivo .env como en otros frameworks.</u>
Ok para windows users, quiero explicar para que puedan hacer el ejercicio de manera facil usando la terminal cmd:
renombrar el archivo como .bat (local_variables.bat)
@echo off
set db_host=localhost
set db_name=2024_yii_thebookclub
set db_user=root
set db_pass=set db_port=set salt=OgdPR2kjToN3T7wB6ydEVDT0ne1KDM88```OJO: antes de ejecutar el servidor de yii, ejecutar ese archivo .bat para que las variables de ambiente cargen dentro de la sesion de ese terminal.Hecho eso ejecutar el servidor yii, ahora ya se puede seguir con la clase y modificar db.php
Si, solamente basta con ejecutarlo una vez.
Se ejecuta una sola vez por sesion del terminal. Si se cierra la terminal la sesion termina y las variables se pierden.
De la misma forma si se abre una nueva pestana (esto es una nueva sesion) entonces el .bat se debe ejecutar de nuevo en esa terminal, para cargar alli las variables de sesion.
Hello, a nivel de industria utilizar variables de entorno puede tener problemas. Por ejemplo, que pasa si tenemos varios proyectos que requieren de distintas bases de datos?, que pasa si requerimos conectarnos a una base en entorno local y a otra en producción?
En fin, para todos estos casos hay soluciones, pero quiero comentarles como se maneja a nivel profesional.
Si bien en otros framworks como Laravel se usa en archivo .env y ya está. En la industria, depnde de la empresa de nube que utilices para despliegue, pero es muy común usar AWS, utilizamos AWS secret manager o AWS parameter store para guardar las variables criticas.
Posteriormente, conectamos el equipo que va a desplegar la aplicación con el entorno de aws que necesitamos, y mediante la libreria de AWS para php, obtenemos esos secretos, así, no están como tal en ninguna máquina, sino en la nube, y son fácilmente accesibles por el equipo de trabajo.
Quizas al final de este curso deje un tutorial de como conectar Yii con AWS.
Excelente aporte, gracias.
Amazon Web Services es otro tema para continuar aprendiendo. 🤯
Hace falta mejorar el audio de esta clase. Tienen un bajo volumen
Creo con otra buena opción para el manejo de variables de entorno es usar una herramienta externa como dotenv (.env) es muy común este tipo de archivos en diferentes lenguajes y frameworks.
Para Yii2 encontré este paquete que pueden implementar muy fácil solo ejecutan:
composer require yiithings/yii2-dotenv
Una vez instalado el paquete, crean en la raíz del proyecto un archivo .env (Este archivo lo agregams al .gitignore) y ahí colocan las variables, así luce mi .env.
Y finalmente en cualquier parte del codigo lo pueden usar llamando la función env("NOMBRE_VARIABLE").
Así quedo mi archivo db.php:
Me parece que los .env son un estándar y muy comunes y muchos frameworks ya lo implementan por defecto.
muy buena aportación!!
No entendí nada después de las variables de entorno. :C
Como lo hago en Windows?
Aqui te lo explica mejor.
Hasta cierto punto entiendo la parte de configuración de variables de entorno para una mayor seguridad pero me queda la duda en un ambiente de producción cómo aplicaría el caso. ¿También debemos crear esas variables? ¿Si le dan mantenimiento a mi a mi hosting seguira funcionando?
Es una muy buena pregunta. Si las variables no están en un script que se ejecute cada vez que el servidor pasa por boot (inicio) no se registrarán, pero con casi todos los servicios de hosting que he trabajado tienen esta función: ejecutar un script en el momento de levantar.
Realice mi configuracion con el archivo .env en ubuntu