Chaînes de connexion
Connectez vos applications aux bases de données avec des variables d'environnement auto-injectées. sh0 gère le réseau interne pour que votre application puisse atteindre sa base de données par nom d'hôte.
Trouver les chaînes de connexion
Chaque base de données créée dans sh0 dispose de ses informations de connexion dans le tableau de bord. Accédez à la page de détail de la base de données et cliquez sur l'onglet Connexion pour voir toutes les informations de connexion.
L'onglet connexion affiche :
- URL de connexion complète -- Prête à copier-coller dans la configuration de votre application.
- Champs individuels -- Hôte, port, nom d'utilisateur, mot de passe et nom de la base de données en tant que valeurs séparées.
- Commande de connexion -- Une commande CLI pour se connecter directement (par ex.,
psql,mysql).
Par exemple, une chaîne de connexion PostgreSQL ressemble à :
postgresql://myuser:secretpass@mydb:5432/myappVariables d'environnement auto-injectées
Lorsque vous créez une base de données dans un stack, sh0 injecte automatiquement les variables d'environnement de connexion dans tous les services applicatifs du même stack. Votre application peut lire ces variables à l'exécution sans aucune configuration manuelle.
Convention de nommage des variables
Les variables auto-injectées suivent un schéma de nommage cohérent basé sur le nom de la base de données et le moteur :
DATABASE_URL=postgresql://sh0:generated_pass@mydb:5432/sh0
MYDB_HOST=mydb
MYDB_PORT=5432
MYDB_USER=sh0
MYDB_PASSWORD=generated_pass
MYDB_DATABASE=sh0DATABASE_URL=mysql://sh0:generated_pass@maindb:3306/sh0
MAINDB_HOST=maindb
MAINDB_PORT=3306
MAINDB_USER=sh0
MAINDB_PASSWORD=generated_pass
MAINDB_DATABASE=sh0REDIS_URL=redis://:generated_pass@cache:6379
CACHE_HOST=cache
CACHE_PORT=6379
CACHE_PASSWORD=generated_passMONGO_URL=mongodb://sh0:generated_pass@docs:27017/sh0
DOCS_HOST=docs
DOCS_PORT=27017
DOCS_USER=sh0
DOCS_PASSWORD=generated_pass
DOCS_DATABASE=sh0DATABASE_URL (ou REDIS_URL / MONGO_URL) par commodité. Si vous avez plusieurs bases de données du même moteur, utilisez les variables préfixées par le nom pour éviter les conflits.Connexion depuis le même stack
Les services au sein du même stack partagent un réseau Docker. Cela signifie que votre application peut se connecter à la base de données en utilisant le nom du conteneur de la base de données comme nom d'hôte. Pas d'adresses IP, pas de mappage de port -- juste le nom du conteneur.
// The DATABASE_URL is auto-injected by sh0
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
});# settings.py
import dj_database_url
DATABASES = {
'default': dj_database_url.config(
default=os.environ['DATABASE_URL']
)
}Accès externe
Par défaut, les bases de données ne sont accessibles que depuis le réseau du stack. Pour vous connecter depuis votre machine locale (par exemple, en utilisant un outil graphique comme pgAdmin, TablePlus ou DBeaver), vous devez activer l'accès externe.
- Ouvrez les paramètres de la base de données.
- Activez Accès public.
- sh0 mappe le port du conteneur sur un port haut aléatoire de l'hôte (par ex.,
54321). - Connectez-vous en utilisant
votre-ip-serveur:54321avec vos identifiants de base de données.
Pooling de connexions
La plupart des bases de données ont une limite sur le nombre de connexions simultanées. Le pooling de connexions vous aide à rester dans ces limites tout en servant de nombreuses requêtes.
Bonnes pratiques pour le pooling de connexions dans sh0 :
- Utilisez le pool intégré de votre framework -- La plupart des ORM et pilotes de base de données prennent en charge le pooling de connexions. Configurez la taille du pool en fonction des limites de votre base de données.
- Adaptez la taille du pool aux connexions disponibles -- PostgreSQL a par défaut 100 connexions maximum. Si vous avez 3 réplicas d'application, définissez chaque pool à environ 30 connexions.
- Définissez des délais de connexion -- Configurez des délais d'expiration pour les connexions inactives afin d'éviter que des connexions obsolètes ne consomment des emplacements.
- Surveillez le nombre de connexions -- Utilisez le tableau de bord des métriques de la base de données pour suivre les connexions actives au fil du temps.
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
max: 20, // Maximum connections in the pool
idleTimeoutMillis: 30000, // Close idle connections after 30s
connectionTimeoutMillis: 5000, // Fail if connection takes > 5s
});Exemples pour les frameworks courants
Voici des exemples de connexion pour les frameworks populaires. Tous utilisent la variable d'environnement DATABASE_URL que sh0 injecte automatiquement.
production:
url: <%= ENV['DATABASE_URL'] %>DB_CONNECTION=pgsql
DB_HOST=${{ MYDB_HOST }}
DB_PORT=${{ MYDB_PORT }}
DB_DATABASE=${{ MYDB_DATABASE }}
DB_USERNAME=${{ MYDB_USER }}
DB_PASSWORD=${{ MYDB_PASSWORD }}let pool = PgPoolOptions::new()
.max_connections(20)
.connect(&std::env::var("DATABASE_URL")?)
.await?;pool, err := pgxpool.New(ctx, os.Getenv("DATABASE_URL"))DATABASE_URL. Si le vôtre le fait, vous n'avez rien à configurer -- déployez simplement sur sh0 et ça fonctionne immédiatement.