Configura Django con variables de entorno

Resumen

Modificar archivos directamente en el servidor de producción funciona como prueba rápida, pero no es una práctica sostenible. La forma correcta es traer los cambios desde el repositorio y delegar la configuración sensible al archivo .env, una pieza clave para mantener tu aplicación Django segura, portable y fácil de mantener.

¿Por qué usar un archivo .env en Django?

Editar el código directamente en producción mezcla configuración con lógica y obliga a tocar archivos cada vez que cambia un valor. Con .env separas las claves, hosts y credenciales del código fuente, lo que te permite versionar tu aplicación sin exponer datos sensibles.

Al revisar el servidor con git status dentro de Server/Apps/Django, aparecen archivos modificados. Con git diff puedes ver los cambios manuales: el ajuste del ALLOW_HOSTS y la instalación de Sentry. Esos cambios son justo los que vamos a mover al .env [00:18].

¿Qué es un archivo .env? Es un archivo de texto plano donde defines variables de entorno como pares clave-valor. Tu aplicación las lee en tiempo de ejecución, sin tocar el código fuente.

¿Qué variables de entorno necesita un proyecto Django?

En la rama develop del repositorio existe una documentación que lista las variables configurables. Cada una cumple un rol específico dentro del proyecto.

  • SECRET_KEY: clave que Django usa para encriptar datos sensibles dentro del proyecto.
  • DEBUG: bandera que controla si los errores se muestran con detalle en el navegador.
  • SENTRY_DSN: clave que conecta tu aplicación con Sentry para que los errores lleguen a tu cuenta.
  • ALLOW_HOSTS: lista de dominios autorizados para acceder a tu aplicación, como deploywithpython.local o deploywithpython.com.
  • DATABASE_URL: cadena de conexión a la base de datos, que por defecto apunta a un archivo SQLite y más adelante apuntará a Postgres.

Cada variable evita que tengas que abrir Vim para tocar el código cuando cambia un dominio o una credencial.

¿Cómo crear el archivo .env en el servidor?

Dentro del servidor, abre el editor Vim y crea el archivo con el nombre .env. Es un archivo de texto plano donde defines una variable por línea [02:05].

Copia el valor de SENTRY_DSN que ya tenías configurado. Si lo perdiste, entra a tu panel de Sentry, ve a la sección de configuración y luego a Client Keys para copiar el DSN completo y pegarlo en tu .env.

Luego agrega ALLOW_HOSTS con el dominio deploywithpython. Recuerda que en esta variable solo va el dominio, sin protocolo http:// ni https:// adelante.

¿Por qué ALLOW_HOSTS no lleva protocolo? Porque Django valida únicamente el host de la petición, no la URL completa. Incluir http:// rompería la comparación.

¿Cómo aplicar los cambios del .env en uWSGI?

Guardar el archivo no basta. uWSGI carga las variables de entorno al arrancar, así que necesitas reiniciar el servicio para que lea los nuevos valores.

Ejecuta el comando:

bash sudo service uwsgi restart

Después recarga el sitio en el navegador. Si todo quedó bien, la aplicación sigue respondiendo igual, pero ahora la configuración vive fuera del código [02:55].

¿Cómo limpiar los cambios manuales del servidor?

Una vez que el .env toma el control, puedes eliminar las modificaciones que hiciste a mano. Al revisar settings.py, vas a ver que el inicializador de Sentry ya lee su DSN desde una variable de entorno, no desde un valor escrito directamente en el archivo.

Eso significa que el código en el servidor vuelve a quedar idéntico al del repositorio. Sin diferencias colgando en git diff, sin sorpresas en el próximo despliegue.

¿Qué pasa si no reinicio uWSGI tras editar el .env? La aplicación seguirá usando los valores antiguos en memoria. El reinicio fuerza a uWSGI a releer el entorno y aplicar las nuevas variables.

¿Qué viene después con la base de datos?

El .env ya tiene espacio reservado para DATABASE_URL, que hoy apunta a SQLite con un archivo local. Ese formato de URL es justo lo que necesitas para cambiar de motor sin tocar el código.

En las siguientes clases vas a crear un motor de base de datos en la consola de AWS y conectarlo desde el servidor cambiando solo esa variable. Cuéntame en los comentarios qué motor planeas usar y por qué.

      Configura Django con variables de entorno