Variables d'environnement

Application, Serveur & Base de données

Application

VariableDéfautDescription
DEBUGfalseInterrupteur global dev/prod — lu une seule fois au démarrage via LazyLock. Active : niveau de log debug, pages d'erreur détaillées, hot reload templates admin. En production (false) : niveau warn, erreurs génériques.
BASE_DIR.Répertoire racine de l'application
TZUTCFuseau horaire IANA de l'application (ex : Europe/Paris, America/New_York). Accessible via config.timezone — à parser avec chrono-tz dans le projet.
LANGlocale systèmeLangue de la CLI (fr, en, de, es, it, pt, ja, zh, ru). Priorité : .env > locale système (LC_ALL, LC_MESSAGES) > en

Serveur

VariableDéfautDescription
IP_SERVER127.0.0.1Adresse IP d'écoute
PORT3000Port d'écoute
SECRET_KEYdefault_secret_keyClé secrète (CSRF, signatures) — à changer en production

Base de données

Connexion

VariableDéfautDescription
DATABASE_URLURL complète (prioritaire sur toutes les variables composantes)
DB_ENGINEsqliteMoteur : postgres, mysql, mariadb, sqlite
DB_USERUtilisateur (requis sauf SQLite)
DB_PASSWORDMot de passe (requis sauf SQLite)
DB_HOSTlocalhostHost
DB_PORT5432 / 3306Port (défaut selon le moteur)
DB_NAMElocal_base.sqliteNom de la base de données

Pool de connexions

VariableDéfautDescription
DB_MAX_CONNECTIONS100Taille maximale du pool
DB_MIN_CONNECTIONS20Taille minimale du pool

Timeouts

VariableDéfautUnitéDescription
DB_CONNECT_TIMEOUT2secondesTimeout d'établissement de connexion
DB_ACQUIRE_TIMEOUT500millisecondesTimeout d'acquisition depuis le pool
DB_IDLE_TIMEOUT300secondesDurée d'inactivité avant fermeture
DB_MAX_LIFETIME3600secondesDurée de vie maximale d'une connexion

Logging SQL

VariableDéfautDescription
DB_LOGGINGfalseActive les logs SQL (true, 1, yes)

Connexions secondaires — `with_custom_db`

Pour attacher une connexion additionnelle (pool Redis, PostgreSQL secondaire, client MongoDB, etc.), utilisez .with_custom_db() sur le builder. La valeur est accessible dans les handlers via Extension<T> d'Axum.

// main.rs
let redis = redis::Client::open("redis://127.0.0.1/")?;

RuniqueAppBuilder::new(config)
    .with_database().await
    .with_custom_db(redis)   // T: Any + Send + Sync + 'static
    .routes(url::urlpatterns())
    .build().await?
    .run().await
// handler
use axum::Extension;
use redis::Client;

pub async fn mon_handler(
    Extension(redis): Extension<Client>,
    mut req: Request,
) -> AppResult<Response> {
    let mut conn = redis.get_async_connection().await?;
    // ...
}

Tout type implémentant Any + Send + Sync + 'static est accepté. Plusieurs connexions secondaires de types différents peuvent être enregistrées avec des appels .with_custom_db() répétés.