Ir al contenido

Secretos de Docker

solyto usa secretos de Docker para gestionar credenciales sensibles. Las contraseñas, claves de API y tokens se almacenan como archivos en el directorio ./secrets/ y se montan en los contenedores en tiempo de ejecución. Esto mantiene los secretos fuera de las variables de entorno y del control de versiones.

Cada secreto es un archivo de texto plano en ./secrets/. El nombre del archivo es el nombre del secreto:

secrets/
app_key
db_user
db_password
ai_api_key
...

Laravel y otros servicios leen los secretos usando la convención del sufijo _FILE. Por ejemplo, DB_PASSWORD_FILE=/run/secrets/db_password le indica a Laravel que lea la contraseña de la base de datos desde ese archivo en lugar de desde una variable de entorno.

Docker Compose monta estos archivos como solo lectura dentro de los contenedores, en /run/secrets/.

Estos 7 secretos deben estar presentes para que solyto se inicie:

SecretoDescripciónUsado por
app_keyClave de cifrado de Laravel (formato: base64:...)api, queue
db_userUsuario de la aplicación en MariaDBapi, queue, mariadb
db_passwordContraseña de la aplicación en MariaDBapi, queue, mariadb
dav_db_userUsuario de PostgreSQL para DAVdav, postgres
dav_db_passwordContraseña de PostgreSQL para DAVdav, postgres
mariadb_root_passwordContraseña de root de MariaDBmariadb
postgres_root_passwordContraseña de superusuario de PostgreSQLpostgres

El usuario y la contraseña de MariaDB se proporcionan mediante db_user / db_password (las mismas credenciales que usa la API).

Estos 11 secretos habilitan funciones opcionales. Crea archivos vacíos u omítelos si no los necesitas:

SecretoDescripciónHabilita
solyto_bot_webhook_tokenToken del webhook del bot de TelegramBot de Telegram
solyto_bot_telegram_tokenToken de la API del bot de TelegramBot de Telegram
hardcover_api_keyClave de API de libros de HardcoverImportaciones de metadatos de libros
ai_api_keyClave de API del proveedor de IARecomendaciones de biblioteca
mailgun_secretClave de API de MailgunNotificaciones por correo
vapid_public_keyClave pública de Web PushNotificaciones push del navegador
vapid_private_keyClave privada de Web PushNotificaciones push del navegador
bgg_api_keyClave de API de BoardGameGeekMetadatos de juegos
tmdb_access_tokenToken de acceso a la API de TMDBMetadatos de películas
imgproxy_keyClave de autenticación de ImgproxyProcesamiento de imágenes vía imgproxy
imgproxy_saltSalt de firma de URL de ImgproxyProcesamiento de imágenes vía imgproxy

El script de configuración genera todos los secretos obligatorios automáticamente:

Ventana de terminal
curl -fsSL "https://raw.githubusercontent.com/solyto/selfhosted/main/setup.sh?$(date +%s)" | bash

Si necesitas regenerar un secreto manualmente:

Ventana de terminal
# Contraseña hexadecimal aleatoria (32 bytes)
openssl rand -hex 32 > secrets/db_password
# Clave de aplicación de Laravel
echo "base64:$(openssl rand -base64 32)" > secrets/app_key
# Nombre de usuario simple
echo "solyto" > secrets/db_user
# Clave de API (pega la tuya)
echo "sk-your-openai-key-here" > secrets/ai_api_key
  • Nunca subas los secretos al control de versiones — el directorio secrets/ debería estar en .gitignore
  • Permisos de archivo — restringe el acceso a los archivos de secretos: chmod 600 secrets/*
  • Copias de seguridad — respalda tu directorio secrets/ de forma segura. Si pierdes estos archivos, es posible que tengas que restablecer las credenciales de la base de datos
  • Rotación — para rotar un secreto, actualiza el archivo y reinicia los servicios afectados con docker compose up -d

Si un servicio no arranca, comprueba que los archivos de secretos obligatorios existan y sean legibles:

Ventana de terminal
ls -la secrets/
docker compose logs api

Los problemas más comunes son archivos que faltan, archivos vacíos o saltos de línea finales en los archivos de secretos.