Config Serveur API


Le serveur API Bencher nécessite une configuration JSON au démarrage. La configuration peut être fournie de trois manières :

  • Variable d’environnement BENCHER_CONFIG : La valeur doit être définie sur la configuration JSON
  • Variable d’environnement BENCHER_CONFIG_PATH : La valeur doit être définie sur le chemin d’un fichier contenant la configuration JSON
  • Fichier /etc/bencher/bencher.json : Un fichier à cet emplacement contenant la configuration JSON

Si aucune configuration n’est trouvée, une configuration par défaut est chargée.

Pour mettre à jour la configuration pendant que le serveur est en cours d’exécution, un administrateur peut utiliser la commande CLI bencher server config update qui sollicite le point de terminaison PUT /v0/server/config. Toutes les configurations mises à jour sont enregistrées dans la variable d’environnement BENCHER_CONFIG et sur le disque à BENCHER_CONFIG_PATH.

Exemple de configuration JSON :

{
"console": {
"url": "https://bencher.example.com"
},
"security": {
"issuer": "https://api.bencher.example.com",
"secret_key": "UJu7Cpxb-zFaJYqXD-3mDDSDyj-ZvfxZFZs-X58xjxPy"
},
"server": {
"bind_address": "0.0.0.0:61016",
"request_body_max_bytes": 1048576,
"tls": {
"type": "as_file",
"cert_file": "/path/to/cert.pem",
"key_file": "/path/to/key.pem"
}
},
"logging": {
"name": "Bencher API",
"log": {
"stderr_terminal": {
"level": "info"
}
},
},
"database": {
"file": "/var/lib/bencher/data/bencher.db",
"data_store": {
"service": "aws_s3"
"access_key_id": "ABC123DoRemMiABC123",
"secret_access_key": "AA3Chr-JSF5sUQqKwayx-FvCfZKsMev-5BqPpcFC3m7",
"access_point": "arn:aws:s3:some-region-1:123456789:accesspoint/my-bucket/path/to/backup/dir"
}
},
"smtp": {
"hostname": "mailbonobo.com",
"port": 587,
"starttls": true,
"username": "bencher",
"secret": "WM3F2u9cqSNdBPLfy9sJ5kk9",
"from_name": "Bencher",
"from_email": "info@bencher.example.com"
},
"plus": {
"disaster_recovery": {
"busy_timeout": 5000,
"replicas": [
{
"scheme": "s3",
"bucket": "my-bucket",
"path": "path/to/replicate",
"access_key_id": "ABC123DoRemMiABC123",
"secret_access_key": "AA3Chr-JSF5sUQqKwayx-FvCfZKsMev-5BqPpcFC3m7"
}
]
},
"stats": {
"offset": 11242,
"enabled": true
}
}
}

console

NomExemplePar DéfautObligatoireDescription
urlhttps://bencher.example.comhttp://localhost:3000OuiSpécifie l’URL de l’hôte de la console UI Bencher.

security

NomExemplePar DéfautObligatoireDescription
issuerhttps://api.bencher.example.com“bencher.dev”NonSpécifie l’émetteur du Jeton Web JSON (JWT). AVERTISSEMENT Modifier cette valeur fera en sorte que tous les JWT précédemment générés ne soient plus valides.
secret_key“UJu7Cpxb-zFaJYqXD-3mDDSDyj-ZvfxZFZs-X58xjxPy”UUID v4 aléatoireOuiSpécifie la clé utilisée pour générer tous les tokens. CELA DOIT ÊTRE TRÈS SÉCURISÉ ! La valeur par défaut est un UUID v4 aléatoirement généré. Lorsqu’il est connecté, il apparaîtra obscurci comme ************.

server

Cette section se base sur la configuration du serveur Dropshot.

NomExemplePar DéfautObligatoireDescription
bind_address“0.0.0.0:61016”“0.0.0.0:61016”OuiSpécifie que le serveur doit se lier à l’adresse IP et au port TCP donnés. En général, les serveurs peuvent se lier à plus d’une adresse IP et à un port, mais ce n’est pas (encore ?) pris en charge.
request_body_max_bytes10485761048576OuiSpécifie le nombre maximum d’octets autorisés dans un corps de requête. Les requêtes plus grandes recevront une erreur 400.
tls.type“as_file”---NonSpécifie si et comment les informations de certificat et de clé TLS sont fournies. Les valeurs valides incluent “as_file” et “as_bytes”.
tls.cert_file“/path/to/cert.pem”---Seulement si tls.type = as_fileSpécifie le chemin vers un fichier PEM contenant une chaîne de certificats permettant au serveur de s’identifier. Le premier certificat est le certificat final, et le reste sont des certificats intermédiaires menant à une CA de confiance. Si spécifié, le serveur écoutera uniquement pour les connexions TLS.
tls.key_file“/path/to/key.pem”---Seulement si tls.type = as_fileSpécifie le chemin vers un fichier PKCS #8 encodé en PEM contenant la clé privée que le serveur utilisera. Si spécifié, le serveur écoutera uniquement pour les connexions TLS.
tls.certs------Seulement si tls.type = as_bytesIdentique à tls.cert_file, mais fourni sous la forme d’un tableau d’octets de données de certificat.
tls.key------Seulement si tls.type = as_bytesIdentique à tls.key_file, mais fourni sous la forme d’un tableau d’octets de données clés.

logging

Cette section est basée sur la configuration de logging Dropshot.

NomExemplePar défautRequisDescription
name“Bencher API”“Bencher API”OuiSpécifie le nom du logger.
log.mode“stderr_terminal”“stderr_terminal”OuiContrôle où le logging du serveur sera envoyé. Les modes valides sont “stderr-terminal” et “file”. Si le mode est “stderr-terminal”, la sortie lisible par l’homme, avec couleurs et autres formatages de terminal si possible, sera envoyée à stderr. Si le mode est “file”, la sortie au format Bunyan sera envoyée au chemin du système de fichiers indiqué par log.path. Voir aussi log.if_exists, qui contrôle le comportement si le chemin de destination existe déjà.
log.level“info”“info”OuiSpécifie le niveau de gravité des messages de log qui doivent être inclus dans le log. Les valeurs valides comprennent “trace”, “debug”, “info”, “warn”, “error” et “critical”, qui sont en ordre croissant de gravité. Les messages de log au niveau spécifié et aux niveaux plus graves seront inclus dans le log.
log.path------Seulement si log.mode = “file”Si log.mode est “file”, cette propriété détermine le chemin vers le fichier de log. Voir aussi log.if_exists.
log.if_exists------Seulement si log.mode = “file”Si log.mode est “file”, cette propriété spécifie ce que l’on doit faire si le fichier de log de destination existe déjà. Les valeurs valides incluent “append” (qui ajoute à la fin du fichier existant), “truncate” (qui tronque le fichier existant puis l’utilise comme s’il venait d’être créé), et “fail” (qui provoque la sortie immédiate du serveur avec une erreur).

database

NomExemplePar défautRequisDescription
file“path/to/database.db”“/var/lib/bencher/data/bencher.db”OuiContrôle où la base de données du serveur sera envoyée.
data_store.service“aws_s3”---NonSpécifie le service de stockage de données à distance. Les valeurs valides sont “aws_s3”.
data_store.access_key_id“ABC123DoRemMiABC123”---Seulement si data_store.service = “aws_s3”Si data_store.service = “aws_s3”, cette propriété spécifie l’ID de la clé d’accès AWS. Voir aussi data_store.service.
data_store.secret_access_key“AA3Chr-JSF5sUQqKwayx-FvCfZKsMev-5BqPpcFC3m7”---Seulement si data_store.service = “aws_s3”Si data_store.service = “aws_s3”, cette propriété spécifie la clé d’accès secrète AWS. Voir aussi data_store.service. Lorsqu’elle est enregistrée, elle apparaîtra sous forme obfusquée, c’est-à-dire ************.
data_store.access_point“arn:aws:s3:some-region-1:123456789:accesspoint/my-bucket/path/to/backup/dir”---Seulement si data_store.service = “aws_s3”Si data_store.service = “aws_s3”, cette propriété spécifie le point d’accès AWS S3. Voir aussi data_store.service.

smtp

Cette section spécifie une configuration de service SMTP. La section entière est facultative. Si elle n’est pas spécifiée, tous les messages seront envoyés à logging .

NomExemplePar défautRequisDescription
hostname“mailbonobo.com”---OuiSpécifie le nom d’hôte SMTP.
port587587NonSpécifie le port SMTP.
starttlstruetrueNonContrôle si la connexion SMTP utilise le protocole STARTTLS.
username“bencher”---OuiSpécifie le nom d’utilisateur sur l’hôte SMTP.
secret“WM3F2u9cqSNdBPLfy9sJ5kk9”---OuiSpécifie le secret pour le nom d’utilisateur sur l’hôte SMTP. Lorsqu’il est enregistré, il apparaîtra sous forme obfusquée, c’est-à-dire ************.
from_name“Bencher”---OuiSpécifie le nom qui apparaîtra dans la section d’envoi de tous les emails.
from_emailinfo@bencher.example.com---OuiSpécifie l’email qui apparaîtra dans la section d’envoi de tous les emails.

plus

Cette section concerne les fonctionnalités couvertes par la Licence Bencher Plus.

plus.github

Cette section spécifie la configuration pour une application GitHub utilisée pour l’authentification OAuth2. Vous devez avoir une licence Bencher Plus Enterprise valide pour au moins une organisation sur le serveur. La totalité de la section est optionnelle. Si elle n’est pas spécifiée, alors l’authentification avec GitHub ne sera pas activée.

NomExemplePar défautRequisDescription
client_idIv1.12864abcd1232048---OuiSpécifie l’ID client de votre application GitHub. L’ID client est différent de l’ID de l’application. Vous pouvez trouver l’ID client sur la page des paramètres de votre application. Pour plus d’informations sur la manière de naviguer vers la page des paramètres de votre application GitHub, consultez Modifiant une inscription d’application GitHub.
client_secret00000abcd12345wxyz123456789abcdefgh0000---OuiLe secret client de votre application GitHub. Vous pouvez générer un secret client sur la page des paramètres de votre application.

plus.disaster_recovery

Cette section spécifie la configuration de la récupération en cas de sinistre. Bencher prend en charge la réplication continue de tous les changements de base de données. Pour exécuter des sauvegardes à la demande ou programmées, consultez la section database.data_store de la configuration.

Il existe quatre schémas de réplication :

  • file: Répliquer vers un chemin de fichier local
    • path: Chemin de réplication
  • sftp: Répliquer via SFTP
    • host: Nom d’hôte du système cible
    • port: Numéro de port du système cible
    • user: Nom d’utilisateur sur le système cible
    • password: (Optionnel) Mot de passe sur le système cible
    • path: (Optionnel) Chemin sur le système cible
    • key_path: (Optionnel) Chemin vers la clé SSH
  • s3: Répliquer vers un stockage de blob compatible S3
    • bucket: Nom du bucket
    • path: (Optionnel) Chemin dans le bucket
    • endpoint: (AWS: Optionnel | Non-AWS: Requis) Point de terminaison de réplication
    • region: (Optionnel) Région du bucket
    • access_key_id: Clé d’accès S3
    • secret_access_key: Clé d’accès secret S3
  • abs: Répliquer vers Azure Blob Storage
    • account_name: Nom du compte
    • bucket: Nom du bucket
    • path: (Optionnel) Chemin dans le bucket
    • account_key: Clé de compte Azure
  • gcs: Répliquer vers Google Cloud Storage
    • bucket: Nom du bucket
    • path: (Optionnel) Chemin dans le bucket
    • GOOGLE_APPLICATION_CREDENTIALS: Variable d’environnement définie avec le chemin du fichier pointant vers les informations d’identification du compte de service

Les quatre schémas de réplique ont les options supplémentaires suivantes :

  • retention: (Optionnel) La durée pendant laquelle les fichiers snapshot & WAL seront conservés. Après la période de rétention, un nouveau snapshot sera créé et l’ancien sera supprimé. Les fichiers WAL existants avant le snapshot le plus ancien seront également supprimés. La valeur par défaut est 24h.
  • retention_check_interval: (Optionnel) Spécifie la fréquence à laquelle Bencher vérifiera si la rétention doit être appliquée. La valeur par défaut est 1h.
  • snapshot_interval: (Optionnel) Spécifie la fréquence de création des nouveaux snapshots. Cela permet de réduire le temps de restauration car les snapshots plus récents auront moins de trames WAL à appliquer. La rétention s’applique toujours à ces snapshots. Si vous ne définissez pas d’intervalle de snapshot, un nouveau snapshot sera créé chaque fois que la rétention sera effectuée. La rétention se produit toutes les 24 heures par défaut.
  • validation_interval: (Optionnel) Lorsqu’il est spécifié, Bencher restaurera automatiquement et validera que les données sur la réplique correspondent à la copie locale. Désactivé par défaut. Activer cela peut augmenter considérablement le coût d’exécution de Bencher car la plupart des services cloud facturent les téléchargements.
  • sync_interval: (Optionnel) Fréquence à laquelle les trames sont poussées vers la réplique. La valeur par défaut est 1s. Augmenter la fréquence peut augmenter considérablement les coûts de stockage cloud.
NomExemplesDéfautRequisDescription
busy_timeout50005000NonSpécifie le délai d’attente pour la base de données en millisecondes.
replicas[ … ]---OuiSpécifie un tableau de répliques.
replicas[replica]{ … }---OuiSpécifie un objet réplique.
replicas[replica].scheme“s3”---OuiSpécifie le schéma de réplication. Pour toutes les autres clés de replica, voir la liste ci-dessus.

plus.stats

Cette section spécifie si et quand les statistiques du serveur sont collectées. L’ensemble de la section est facultatif. Si non spécifié, les valeurs par défaut énumérées seront utilisées. C’est-à-dire que les statistiques du serveur sont opt-out. Mettez enabled sur false pour désactiver les statistiques du serveur.

NomExemplePar défautRequisDescription
offset1124211242NonSpécifie le décalage depuis minuit en secondes pour la collecte des statistiques du serveur. Par défaut, il s’éxécute à 03:07:22 UTC.
enabledtruetrueNonContrôle si les statistiques du serveur sont collectées. Mettez sur false pour opt-out.


Published: Fri, October 27, 2023 at 8:40:00 AM UTC | Last Updated: Fri, June 21, 2024 at 6:14:00 PM UTC