Python: Gestión de secretos (variables de entorno)

Esta documentación forma parte de la guía Usos avanzados. Consulte la guía completa aquí: Avanzando con tus despliegues de Python.

👋 ¡Bienvenido a la documentación de Stackhero!

Stackhero ofrece una solución nube de Python lista para usar que proporciona una serie de beneficios, incluyendo:

  • Despliegue su aplicación en segundos con un simple git push.
  • Use su propio nombre de dominio y benefíciese de la configuración automática de certificados HTTPS para una mayor seguridad.
  • Disfrute de la tranquilidad con copias de seguridad automáticas, actualizaciones con un clic, y precios sencillos, transparentes y predecibles.
  • Obtenga un rendimiento óptimo y una seguridad robusta gracias a una VM privada y dedicada.

Ahorre tiempo y simplifique su vida: solo toma 5 minutos probar la solución de alojamiento en la nube de Python de Stackhero.

En algún momento, necesitarás almacenar secretos como tokens y contraseñas para bases de datos o servicios de terceros. Es importante almacenarlos de manera segura. Evita incrustarlos directamente en tu repositorio o código ya que esto crea un riesgo de seguridad significativo.

Usar variables de entorno ofrece dos beneficios clave:

  1. Tus secretos nunca se almacenan en tu repositorio Git, reduciendo el riesgo de acceso no autorizado.
  2. Puedes usar credenciales diferentes para varios entornos, como usar una base de datos de producción en producción y una base de datos de desarrollo durante el desarrollo.

En un entorno de desarrollo, crea un archivo .env en la raíz de tu proyecto. Este archivo debe estar excluido de Git para asegurar que nunca se confirme.

Para leer automáticamente el archivo .env, puedes usar el módulo python-dotenv:

pip install python-dotenv
pip freeze > requirements.txt

Luego, crea un archivo .env en la raíz de tu proyecto y añade tus variables:

ENV="development"
DATABASE_PASSWORD="secretPassword"
THIRD_API_PRIVATE_KEY="secretKey"
# ...

Finalmente, asegúrate de que el archivo .env esté excluido de Git añadiéndolo a tu .gitignore:

echo ".env" >> .gitignore

El archivo .env no es lo suficientemente seguro para los entornos de staging y producción. En su lugar, Stackhero te permite almacenar de manera segura tus variables de entorno directamente en la configuración de tu servicio Python.

Puedes establecer estas variables en el panel de Stackhero seleccionando tu servicio Python y luego haciendo clic en el botón "Configurar".

Variables de entorno de Python en StackheroVariables de entorno de Python en Stackhero

Acceder a variables de entorno en Python es sencillo. Simplemente usa os.environ.get() como se muestra a continuación:

import os

print(os.environ.get('ENV'))

Por ejemplo, conectarse a un servidor Redis usando una variable de entorno se puede hacer así:

import os
import redis

r = redis.from_url(os.environ.get("REDIS_URL"))

En un entorno de desarrollo, establece REDIS_URL en tu archivo .env de la siguiente manera:

REDIS_URL="redis://localhost:6379"

Para producción y staging, define REDIS_URL en el panel de Stackhero bajo la configuración del servicio Python:

REDIS_URL="rediss://default:<yourPassword>@<XXXXXX>.stackhero-network.com:6380"