Aller au contenu

Chaînes de connexion base de données

Patrons de chaînes de connexion pour connecter une application à une base de données sur Stack Harbor PaaS — JDBC Java, PHP, points de terminaison ProxySQL pour topologies en grappe et encodage UTF-8.

Stack Harbor PaaS exécute applications et bases de données comme des conteneurs distincts dans le même environnement. Pour ouvrir une connexion, l’application doit référencer la base par nom d’hôte — localhost ne fonctionne pas, parce que l’application n’est pas sur le même conteneur que la base.

Cette page couvre les patrons de chaînes de connexion pour les trois options disponibles — CNAME du nœud, IP privée, IP publique — et le code spécifique au moteur pour JDBC Java et PHP.

Trois options d’hôte

Depuis tout conteneur applicatif à l’intérieur de l’environnement, la base est joignable via :

  • CNAME du nœud base de données — node{node_id}-{environment_name}.{domain} (la forme canonique).
  • IP privée — utile pour les topologies fixes ; l’IP reste stable pour la durée de vie de l’environnement.
  • IP publique — uniquement disponible quand un point de terminaison public est attaché au nœud base de données.

Pour une topologie MySQL/MariaDB/Percona en grappe, les applications se connectent à un point de terminaison ProxySQL (proxy.{environment_name}.{domain}) plutôt qu’à un nœud précis. ProxySQL gère le routage, donc un basculement de nœud n’exige pas de redémarrer l’application.

Connexion Java (JDBC)

MoteurURL JDBC
MySQL / MariaDBjdbc:mysql://node{node_id}-{environment_name}.{domain}/{dbname}
MySQL auto-clusterjdbc:mysql://proxy.{environment_name}.{domain}:3306/{dbname}
MariaDB auto-clusterjdbc:mariadb://proxy.{environment_name}.{domain}:3306/{dbname}?usePipelineAuth=false
PostgreSQLjdbc:postgresql://node{node_id}-{environment_name}.{domain}/{dbname}

Ouvrez la connexion avec DriverManager.getConnection(URL, user, password) sur une de ces URL. Les URL en grappe passent par les répartiteurs ProxySQL — la grappe peut basculer sans redémarrage applicatif.

Pour l’encodage UTF-8, ajoutez les paramètres d’encodage standards :

jdbc:{dbtype}://{host}/{dbname}?useUnicode=yes&characterEncoding=UTF-8

Connexion PHP

Pour MySQL et MariaDB, les patrons MySQLi ou PDO standards s’appliquent :

$conn = mysqli_connect('node{node_id}-{environment_name}.{domain}', 'user', 'password', 'dbname');

Pour PostgreSQL, utiliser la chaîne de connexion libpq :

$conn = pg_connect("host=node{node_id}-{environment_name}.{domain} port=5432 dbname=postgres user=webadmin password=password");

La chaîne d’hôte ne doit pas inclure http:// — la base n’est pas un point HTTP. Les identifiants sont envoyés par courriel par la plateforme à la création du conteneur.

Python et Node.js

Python (psycopg, mysqlclient, pymongo) et Node.js (mysql2, pg, mongodb) suivent le même patron d’hôte. Passez le CNAME (ou l’IP privée) du nœud base de données comme hôte. Pour une topologie MySQL en grappe, pointez sur le point de terminaison ProxySQL.

Ce qui ne fonctionne pas

  • localhost — application et base sont sur des conteneurs distincts, donc la loopback n’est pas la base.
  • Un nom de service nu sans suffixe d’environnement — le CNAME inclut le nom d’environnement, pas seulement l’id du nœud.
  • Une IP publique sans point de terminaison public attaché — le conteneur base de données n’en a pas par défaut.

Voir aussi