Aller au contenu principal

Installation

De l'achat au premier SMS : acheter, copier votre clé, installer la passerelle en une commande, créer l'administrateur, activer la licence et appairer un téléphone. Puis les commandes du quotidien, le dépannage et les réglages.

Cette page vous mène de l'achat à un téléphone appairé qui envoie son premier SMS. Elle ne suppose aucune connaissance préalable du produit. Comptez environ un quart d'heure, dont la moitié en téléchargement.

L'installation tient en une commande. Un script installe Docker s'il manque, télécharge les fichiers de la dernière version, vérifie qu'ils n'ont pas été altérés, écrit la configuration, démarre la passerelle et installe une commande d'exploitation, sms-gateway. Vous n'avez rien à compiler et aucune adresse de serveur à saisir.

Ce que vous installez

La passerelle est un seul programme, qui écoute sur un seul port et range tout dans un seul dossier de données (un volume Docker). Elle tourne dans un conteneur Docker, sur votre machine.

Vous n'avez pas besoin Pourquoi
D'un serveur de base de données La base est un simple fichier dans le dossier de données, créé au premier démarrage
D'un serveur web séparé pour le tableau de bord Le tableau de bord est intégré à la passerelle et servi sur le même port que l'API
D'aucun service tiers La passerelle ne contacte personne, sauf notre serveur de licences et les webhooks que vous configurez vous-même. Vos SMS, contacts et journaux ne quittent jamais votre machine

Conséquence pratique : sauvegarder le dossier de données sauvegarde toute l'installation, et le déplacer déplace la passerelle (voir Sauvegarde et restauration et Changer de serveur).

Ce qu'il vous faut

Élément Détail
Une machine Linux amd64 ou arm64 (VPS, instance Oracle Cloud gratuite, serveur ou mini-PC dans vos locaux, Raspberry Pi 64 bits), ou un ordinateur Windows ou macOS avec Docker Desktop
Un accès administrateur root ou sudo sous Linux, PowerShell ouvert en administrateur sous Windows
Un accès internet sortant Pour télécharger Docker et la passerelle, et pour activer la licence. Voir Accès réseau
Pour le mode domaine Un nom de domaine dont l'enregistrement A (ou AAAA) pointe vers la machine, et les ports 80 et 443 joignables depuis internet
Pour le mode réseau local Des téléphones connectés au même réseau que la machine
Un téléphone Android Android 8 ou plus récent, avec une SIM active et un forfait SMS, gardé en charge
Votre clé de licence Affichée dans votre espace client après l'achat

Rien n'est compilé sur votre machine : la passerelle est publiée prête à l'emploi pour les processeurs amd64 et arm64, et Docker choisit la bonne. Une petite machine suffit : la passerelle consomme très peu de mémoire, et la plus petite offre de la plupart des hébergeurs suffit pour démarrer.

Le parcours en cinq étapes

Étape 1 : créer votre compte et acheter

Rendez-vous sur sms-gateway.araylab.com. Le bouton Acheter vous demande d'abord de vous connecter : saisissez votre adresse e-mail et vous recevez un lien de connexion. Aucun mot de passe à retenir. Vous arrivez dans votre espace client, vide pour l'instant.

Le paiement est géré par Gumroad, qui émet aussi la facture et s'occupe de la TVA. À Madagascar, le paiement par Mobile Money (MVola, Orange Money, Airtel Money) est validé à la main : la licence apparaît après cette validation, pas instantanément.

Une fois le paiement confirmé, vous recevez un e-mail annonçant que la licence est prête. Pour votre sécurité, cet e-mail ne contient pas la clé : il vous renvoie vers votre espace client.

Étape 2 : copier votre clé de licence

Dans l'espace client, la licence affiche sa clé, au format XXXX-XXXX-XXXX-XXXX, avec un bouton pour la copier. Les instructions d'installation et le lien de téléchargement de l'application Android y apparaissent aussi, dès que la licence est active.

Vous pouvez revenir à tout moment afficher la clé, et la régénérer si elle a fuité (voir Régénérer la clé).

Étape 3 : lancer la commande d'installation

Sur la machine qui hébergera la passerelle, dans un terminal.

Linux (VPS, Oracle Cloud, serveur local, Raspberry Pi) :

curl -fsSL https://sms-gateway.araylab.com/install.sh | sudo bash

Sans option, le script vous pose deux questions : s'il peut installer Docker s'il manque, et si vos téléphones joindront la passerelle par un nom de domaine ou sur le réseau local (voir Choisir le mode). Pour tout répondre d'avance :

# Avec un nom de domaine : HTTPS automatique (recommandé)
curl -fsSL https://sms-gateway.araylab.com/install.sh | sudo bash -s -- --domain sms.example.com --yes

# Sur le réseau local, sans nom de domaine
curl -fsSL https://sms-gateway.araylab.com/install.sh | sudo bash -s -- --lan --yes

macOS : la même commande, avec Docker Desktop installé et démarré au préalable. L'installation va dans ~/sms-gateway, et la commande sms-gateway est placée dans ce dossier.

Windows (Docker Desktop requis), dans PowerShell ouvert en administrateur :

irm https://sms-gateway.araylab.com/install.ps1 | iex

Sous Windows, le script ne pose aucune question sur le mode : il installe en mode réseau local par défaut. Pour changer cela, définissez ces variables dans la même fenêtre PowerShell avant de lancer la commande :

Variable Valeur par défaut Effet
$env:SMSGW_DOMAIN vide : mode réseau local Installe en mode domaine, avec HTTPS automatique sur ce nom. Sur une installation existante, la bascule en mode domaine
$env:SMSGW_PORT 8080 Port de la passerelle. Pris en compte à la première installation seulement
$env:SMSGW_VERSION la dernière version publiée Installe cette version précise X.Y.Z
$env:SMSGW_DOMAIN = "sms.example.com"
irm https://sms-gateway.araylab.com/install.ps1 | iex

Si Docker Desktop manque, le script Windows propose de l'installer avec winget, puis s'arrête et vous demande de redémarrer Windows, de lancer Docker Desktop une fois, et de relancer la commande. Il installe dans %ProgramData%\SmsGateway, ouvre le port 8080 dans le pare-feu Windows pour les réseaux privés en mode réseau local, puis ouvre le tableau de bord dans votre navigateur.

À la fin, chaque script affiche l'adresse du tableau de bord et le code d'installation qui sert à créer le compte administrateur (étape 4). Sous Linux et macOS, sms-gateway url réaffiche l'adresse et sms-gateway setup-code réaffiche le code, tant qu'aucun compte n'existe.

Vous préférez lire le script d'abord ? Envoyer un script téléchargé directement dans bash, c'est lui faire confiance. Vous pouvez le télécharger, le lire, puis le lancer :

curl -fsSL https://sms-gateway.araylab.com/install.sh -o install.sh
less install.sh
sudo bash install.sh --domain sms.example.com

Le script, lui, vérifie tout ce qu'il télécharge ensuite avec une empreinte SHA-256 publiée : un fichier qui ne correspond pas arrête l'installation avant que quoi que ce soit ne soit installé.

Ce que fait le script, dans l'ordre

  1. Il vérifie qu'il tourne en root sur une machine Linux amd64 ou arm64 (ou sur macOS).
  2. Il installe Docker s'il manque, par le script officiel de Docker, après vous l'avoir demandé (ou sans demander avec --yes).
  3. Il trouve la dernière version publiée (ou celle donnée par --version), télécharge ses fichiers et vérifie leur empreinte.
  4. Il demande le mode si aucune option ne l'a fixé. En mode domaine, il vérifie que le domaine pointe vers cette machine et que les ports 80 et 443 sont libres. Un problème donne un avertissement et une question, pas un arrêt net : vous pouvez corriger le DNS ensuite.
  5. En mode réseau local, il installe avahi-daemon, qui rend le nom <nom-de-la-machine>.local résolvable sur votre réseau.
  6. Il écrit la configuration dans /opt/sms-gateway/.env, lisible par root seulement. Une configuration existante est conservée : relancer la commande met la passerelle à jour sans effacer vos réglages.
  7. Il télécharge la passerelle, la démarre et attend qu'elle réponde (deux minutes au plus).
  8. Il installe la commande sms-gateway et affiche l'adresse du tableau de bord, le code d'installation et les étapes suivantes.

Les options (Linux et macOS)

Option Valeur par défaut Effet
--domain <nom> aucune : le script demande Mode domaine : HTTPS sur ce nom, certificat obtenu automatiquement. Les ports 80 et 443 doivent être joignables. Fixe l'adresse publique à https://<nom>
--lan aucune : le script demande Mode réseau local : la passerelle est servie en HTTP sur http://<nom-de-la-machine>.local:<port>, à tous les appareils du réseau local
--port <n> 8080 Port de la passerelle sur la machine. En mode réseau local, il fait partie de l'adresse inscrite dans les QR codes
--dir <chemin> /opt/sms-gateway (~/sms-gateway sur macOS) Dossier d'installation, où vit la configuration. Les dossiers système sont refusés
--version <X.Y.Z> la dernière version publiée Installe cette version précise, par exemple pour rester sur une version que vous avez testée
--yes désactivée Ne pose aucune question : accepte l'installation de Docker et passe outre les avertissements (DNS, ports occupés)
--no-docker-install désactivée N'installe jamais Docker. S'il manque, le script s'arrête et le dit
--help - Affiche l'aide et ne fait rien d'autre

Comment les options interagissent :

  • Sans --domain ni --lan, le script demande. Avec --yes et aucun mode lors d'une première installation, il s'arrête : il n'y a pas de mode par défaut, parce que le mauvais donne des téléphones qui ne se connectent jamais.
  • Lors d'une nouvelle exécution sur une installation existante, le mode et le port déjà enregistrés sont conservés. Redonner --domain ou --lan change de mode : l'adresse publique change, et les téléphones déjà appairés doivent être appairés à nouveau.
  • --port n'est pris en compte qu'à la première installation. Ensuite, le port enregistré dans la configuration l'emporte ; modifiez plutôt GATEWAY_PORT dans le fichier .env (voir Les réglages modifiables).
  • --yes répond aussi oui aux avertissements. En mode domaine, une installation avec un DNS faux ou des ports 80/443 occupés continue quand même : la passerelle fonctionne, mais le HTTPS ne fonctionnera pas tant que vous n'aurez pas corrigé la cause.

Étape 4 : ouvrir le tableau de bord, créer l'administrateur, coller la clé

Ouvrez l'adresse affichée par le script. Une installation neuve ouvre l'écran Créer le premier compte : Jeton d'installation, nom, adresse e-mail, mot de passe. Le mot de passe doit faire au moins 12 caractères. Ce premier compte est le superadministrateur, et l'écran qui le crée se ferme définitivement dès qu'un compte existe.

Le jeton d'installation est le code d'installation affiché à la fin du script. Il prouve que la personne qui crée le compte a accès à la machine : sans lui, le premier inconnu tombant sur une passerelle fraîchement installée sur internet pourrait s'en faire l'administrateur. Si vous ne l'avez plus sous les yeux :

Commande
Linux, macOS sms-gateway setup-code
Windows docker compose exec gateway /usr/local/bin/gateway setup-token, depuis %ProgramData%\SmsGateway

Le code disparaît dès que le compte est créé : les commandes ci-dessus répondent alors qu'il n'y en a plus, et c'est normal.

La création du compte ne vous connecte pas : l'écran confirme la création, puis vous envoie vers l'écran de connexion, où vous saisissez l'adresse e-mail et le mot de passe que vous venez de choisir.

Une fois connecté, une fenêtre Activer cette passerelle apparaît. Collez la clé copiée à l'étape 2. Les espaces, les tirets et les minuscules sont acceptés. Il n'y a rien d'autre à saisir : la passerelle sait déjà joindre notre serveur de licences.

Si notre serveur ne répond pas à ce moment-là, la fenêtre indique Notre serveur ne répond pas. Votre clé est quand même enregistrée et rien n'est suspendu : la passerelle envoie normalement et retente l'activation d'elle-même. Une panne de notre côté n'est jamais traitée comme une licence invalide. Détails dans Licence.

Étape 5 : installer l'application Android et appairer le téléphone

  1. Téléchargez l'application depuis votre espace client, sur le téléphone lui-même ou sur un ordinateur puis copiée sur le téléphone. L'application n'est pas sur le Play Store : le lien n'est donné qu'aux détenteurs d'une licence.
  2. Installez-la. Android vous demande d'autoriser l'installation depuis la source utilisée (navigateur ou gestionnaire de fichiers). Autorisez-la pour cette installation.
  3. Dans le tableau de bord, ouvrez Appareils et cliquez sur Appairer un appareil. Un QR code apparaît, avec un code de secours pour un téléphone dont l'appareil photo ne fonctionne pas. Il est valable cinq minutes et ne sert qu'une fois ; Générer un nouveau code vous en donne un autre.
  4. Dans l'application, scannez le QR code. Le téléphone se connecte à la passerelle et apparaît en ligne dans Appareils, avec ses cartes SIM.
  5. Envoyez un SMS de test depuis Envoi rapide, puis répondez-y depuis un autre téléphone : la réponse apparaît dans Conversations.

L'application demande à être exemptée de l'optimisation de la batterie et affiche une notification permanente : c'est ce qui la maintient active en arrière-plan. Gardez le téléphone en charge. Tout ce qui concerne les téléphones (SIM, quota journalier, maintien en éveil) est dans Appareils.

Si vous saisissez l'adresse à la main au lieu de scanner, saisissez-la en entier, avec https:// ou http:// (https://sms.example.com ou http://server.local:8080). Sans cela, l'application suppose une connexion HTTPS, ce qui échoue sur une installation en réseau local.

Choisir le mode : domaine ou réseau local

C'est le seul vrai choix de l'installation, et il décide de l'adresse que composent les téléphones. Cette adresse est inscrite dans chaque QR code d'appairage, puis conservée par le téléphone. Une mauvaise adresse donne un QR code qui se scanne parfaitement et un téléphone qui n'atteint jamais rien.

Question Mode domaine (--domain) Mode réseau local (--lan)
Pour qui VPS, Oracle Cloud, tout serveur joignable depuis internet Un serveur ou un ordinateur dans vos locaux, non exposé
Adresse du tableau de bord https://sms.example.com http://<nom-de-la-machine>.local:8080
Chiffrement HTTPS, certificat obtenu et renouvelé automatiquement (Let's Encrypt) Aucun : HTTP simple sur votre réseau local
Où peuvent être les téléphones Partout, 4G comprise Seulement sur le même réseau que la machine
Ce que la machine expose Les ports 80 et 443. La passerelle elle-même reste privée Le port 8080, à tous les appareils du réseau local
Prérequis DNS pointant vers la machine, ports 80 et 443 ouverts Le nom .local doit être résolu sur votre réseau (le script installe le nécessaire sous Linux)

Choisissez le mode domaine dès que vous le pouvez : il n'a aucune des réserves ci-dessous.

Ce qu'implique le mode réseau local

  • L'application Android n'accepte de connexion non chiffrée que vers un nom .local. Une adresse IP simple comme http://192.168.1.20:8080 est refusée par le téléphone. C'est pourquoi l'installeur utilise http://<nom-de-la-machine>.local:8080.
  • Vérifiez que le téléphone résout ce nom avant d'aller plus loin : ouvrez http://<nom-de-la-machine>.local:8080/health dans le navigateur du téléphone, connecté au même wifi. Une réponse {"status":"ok",...} signifie que l'appairage peut fonctionner.
  • La session du tableau de bord circule en clair sur votre réseau. L'installeur définit GATEWAY_INSECURE_COOKIES=true, sinon les navigateurs refuseraient de vous garder connecté en HTTP simple. Acceptable sur un réseau d'entreprise que vous maîtrisez, pas sur un wifi partagé.
  • Le nom de la machine ne doit pas changer, puisqu'il est inscrit dans les QR codes. Le renommer oblige à appairer de nouveau les téléphones.
  • Un wifi invité isole souvent ses appareils : le téléphone voit internet mais pas la machine. Le test /health ci-dessus le révèle. Placez les téléphones sur le réseau interne.

Tout ce qui est propre à ce parcours (adresse fixe, wifi invité, accès depuis l'extérieur) est dans Serveur local.

Ce qu'implique le mode domaine

  • Le DNS doit pointer vers la machine avant que le certificat puisse être obtenu. Le script vous prévient si ce n'est pas le cas ; le certificat est obtenu automatiquement dès que le DNS est bon.
  • Les ports 80 et 443 doivent être joignables depuis internet, le port 80 compris : il sert à prouver que vous possédez le domaine. Ouvrez-les dans le pare-feu de la machine et chez votre hébergeur, qui filtre souvent lui aussi.
  • Rien d'autre n'est exposé : un petit serveur web (Caddy) gère le HTTPS devant la passerelle, qui elle-même n'écoute que sur la machine.
  • Si un proxy comme Cloudflare est placé devant le domaine, désactivez-le le temps d'obtenir le certificat.

La commande sms-gateway

Installée sous Linux et macOS, elle se lance en root (ou avec sudo) depuis n'importe quel dossier.

Commande Ce qu'elle fait
sms-gateway status État de la passerelle (et du serveur HTTPS en mode domaine)
sms-gateway logs Journaux de la passerelle, en continu. Ctrl+C pour sortir
sms-gateway url Affiche l'adresse du tableau de bord
sms-gateway setup-code Affiche le code d'installation, tant qu'aucun compte n'existe
sms-gateway update [X.Y.Z] Passe à la dernière version, ou à celle indiquée. Les données et la configuration sont conservées
sms-gateway restart Redémarre la passerelle, et applique une modification du fichier .env
sms-gateway stop / start Arrête ou redémarre la passerelle sans rien supprimer
sms-gateway backup Écrit une archive de tout le dossier de données dans le dossier courant (voir Sauvegarde)
sms-gateway uninstall Supprime la passerelle et la commande. Les données sont conservées
sms-gateway uninstall --purge Supprime aussi les données : tout est perdu, messages, contacts, comptes et clé maîtresse

Relancer la commande d'installation a le même effet que sms-gateway update.

Sous Windows, il n'y a pas de commande sms-gateway. Ouvrez PowerShell dans %ProgramData%\SmsGateway et utilisez directement Docker Compose :

Pour Commande
Voir l'état docker compose ps
Lire les journaux docker compose logs -f gateway
Redémarrer docker compose restart gateway
Mettre à jour Relancer la commande d'installation
Relire le code d'installation docker compose exec gateway /usr/local/bin/gateway setup-token

Gardez l'ordinateur allumé et Docker Desktop réglé pour démarrer avec Windows : la passerelle ne tourne que lorsque Docker Desktop tourne.

Arrêter ou redémarrer ne fait rien perdre. Pendant que la passerelle est arrêtée, les téléphones gardent les messages sortants et entrants dans leur propre file et les transmettent à son retour.

Régénérer la clé

Dans l'espace client, Régénérer la clé remplace votre clé de licence par une nouvelle. Faites-le si la clé a fuité (un ticket de support, une capture d'écran, un ancien prestataire), ou pour libérer la licence avant d'installer sur une autre machine.

Ce qui change Ce qui ne change pas
L'ancienne clé est refusée immédiatement pour activer ou renouveler Votre licence : palier, ligne de version, date d'achat
Plus aucune machine n'est rattachée à la licence La passerelle déjà installée continue de fonctionner et d'envoyer

La passerelle installée ne s'arrête pas. En revanche, elle ne peut plus renouveler son activation tant qu'elle porte l'ancienne clé : ouvrez Licence dans le tableau de bord et saisissez-y la nouvelle clé. Deux régénérations doivent être espacées d'au moins une minute.

Dépannage

Commencez toujours par sms-gateway status, puis sms-gateway logs.

Symptôme Cause probable et solution
Avertissement : ports 80 ou 443 déjà utilisés Un autre serveur web (Apache, Nginx, un panneau d'hébergement) les occupe. sudo ss -ltnp 'sport = :80' le nomme. Arrêtez-le, utilisez une autre machine, ou voir VPS (serveur web existant). Continuer quand même vous laisse sans HTTPS
Le démarrage échoue car le port 8080 est occupé Définissez GATEWAY_PORT=8090 (ou un autre port libre) dans /opt/sms-gateway/.env, puis relancez la commande d'installation. En mode réseau local, ajoutez --lan pour que l'adresse des QR codes prenne le nouveau port
Avertissement : le domaine ne pointe pas vers cette machine Corrigez l'enregistrement A chez votre registraire, attendez la propagation (dig +short sms.example.com), puis sms-gateway restart
Le navigateur signale un certificat invalide Le certificat n'a pas encore été obtenu : DNS pas encore propagé, ou port 80 fermé chez l'hébergeur. sms-gateway logs caddy dit pourquoi
Le script dit que Docker manque et s'arrête Vous avez utilisé --no-docker-install, ou refusé l'installation. Installez Docker avec son extension compose, ou relancez sans cette option
Windows : Docker Desktop ne démarre pas Docker Desktop exige la virtualisation activée dans le BIOS et WSL 2. Lancez-le une fois à la main, puis relancez la commande
Le script attend, puis dit que la passerelle ne répond pas Les dernières lignes du journal sont affichées. Voir Quand la passerelle refuse de démarrer
Le tableau de bord s'affiche mais la connexion échoue sans message Vous utilisez du HTTP simple sur une autre adresse que celle mise en place par l'installeur. Utilisez l'adresse affichée par sms-gateway url
Le jeton d'installation est refusé Il a été mal recopié, ou il appartient à une autre installation. Relisez-le avec sms-gateway setup-code et collez-le tel quel
sms-gateway setup-code répond qu'il n'y a pas de jeton Un compte existe déjà. Connectez-vous avec. Si personne chez vous ne l'a créé, réinstallez de zéro avec sms-gateway uninstall --purge puis la commande d'installation
Le téléphone ne s'appaire pas : rien ne se passe après le scan Le téléphone ne joint pas l'adresse du QR code. Ouvrez https://sms.example.com/health (ou http://<nom>.local:8080/health) dans le navigateur du téléphone. En cas d'échec : wifi invité, téléphone sur un autre réseau, nom .local non résolu, ports fermés
Le téléphone refuse l'adresse Une adresse http:// qui n'est pas un nom .local (une IP par exemple). Utilisez le nom .local, ou passez en mode domaine
Le QR code est refusé comme expiré Un QR code vit cinq minutes et ne sert qu'une fois. Cliquez sur Générer un nouveau code
Le QR code porte une mauvaise adresse Relancez la commande d'installation avec le bon --domain ou --lan, puis générez un nouveau QR code. Les codes déjà émis gardent l'ancienne adresse
La licence reste sur Jeton local à renouveler La machine ne joint pas notre serveur de licences (pare-feu sortant, proxy d'entreprise), ou la clé a été régénérée depuis. L'envoi n'est pas affecté. Voir Licence

Accès réseau

La machine a besoin d'un accès HTTPS sortant vers :

Adresse Pour quoi faire Quand
get.docker.com Installer Docker Seulement si Docker manque
ghcr.io Télécharger la passerelle Installation et mises à jour
bck2.araylab.com Télécharger les fichiers d'installation d'une version Installation et mises à jour
bck1.araylab.com Activation de la licence et renouvellement périodique Tant que la passerelle tourne
api.ipify.org Comparer l'adresse publique de la machine avec le DNS Installation en mode domaine

Si bck1.araylab.com est bloqué, rien ne cesse de fonctionner, mais l'écran de licence continuera d'indiquer que notre serveur ne répond pas.

Les réglages modifiables

L'installeur écrit la configuration dans /opt/sms-gateway/.env (lisible par root seulement ; sous Windows, %ProgramData%\SmsGateway\.env). Pour une installation standard, vous n'avez rien à ajouter. Tout ce que vous ajustez au quotidien (fenêtre d'envoi, nouvelles tentatives, fuseau horaire, notifications, règles de routage...) se règle dans le tableau de bord, dans Paramètres et les écrans associés, pas ici : voir Paramètres. Aucun réglage du tableau de bord n'a de variable équivalente, et aucune variable ci-dessous ne se modifie depuis le tableau de bord.

Après avoir modifié le fichier .env, appliquez le changement avec sms-gateway restart (sous Windows : docker compose up -d dans le dossier d'installation). Une mise à jour ou une nouvelle exécution de l'installeur conserve le fichier ; elle ne réécrit que la version et, si vous redonnez --domain ou --lan, les lignes du mode.

Dans le fichier .env

Ces lignes sont écrites par l'installeur. Vous pouvez les modifier, en sachant ce que chacune commande.

Variable Valeur par défaut (écrite par l'installeur) Effet
SMSGW_MODE domain ou lan, selon votre choix Mémorise le mode, pour qu'une mise à jour le conserve. Lue par l'installeur seulement
GATEWAY_PUBLIC_URL https://<domaine> ou http://<machine>.local:<port> L'adresse qu'utilisent les téléphones et les navigateurs. Inscrite dans chaque QR code d'appairage (https:// donne une liaison chiffrée avec le téléphone, http:// une liaison en clair) et utilisée comme base des liens courts. Lue au démarrage seulement
GATEWAY_DOMAIN votre domaine, ou localhost en mode local Le nom pour lequel le certificat HTTPS est demandé. Doit être l'hôte de GATEWAY_PUBLIC_URL
COMPOSE_PROFILES tls en mode domaine, vide en mode local tls démarre le serveur HTTPS (Caddy) devant la passerelle, sur les ports 80 et 443. Vide : pas de serveur HTTPS
GATEWAY_PORT 8080 (ou --port) Port de la passerelle sur la machine. En mode local, il doit correspondre au port de GATEWAY_PUBLIC_URL
GATEWAY_BIND 127.0.0.1 en mode domaine, 0.0.0.0 en mode local L'interface réseau sur laquelle le port écoute. 127.0.0.1 : la machine elle-même seulement (le serveur HTTPS relaie le reste). 0.0.0.0 : tous les appareils du réseau, en HTTP simple
GATEWAY_INSECURE_COOKIES false en mode domaine, true en mode local true permet aux navigateurs de vous garder connecté en HTTP simple, au prix d'une session qui circule en clair. Ne change rien d'autre
GATEWAY_VERSION la version installée La version qui démarre. Préférez sms-gateway update X.Y.Z, qui télécharge aussi les fichiers correspondants
GATEWAY_IMAGE ghcr.io/andritianaa/sms-gateway L'endroit d'où la passerelle est téléchargée. Ne pas modifier

Le fichier liste aussi, en commentaire, les réglages ci-dessous (une mise à jour ajoute cette liste une fois à un .env écrit par une version antérieure). Retirez le # devant une ligne pour l'utiliser, puis redémarrez. Le docker-compose.yml fourni transmet chacun d'eux à la passerelle ; absent ou vide, la passerelle applique sa valeur par défaut. Comme ils vivent dans .env et non dans docker-compose.yml, une mise à jour les conserve.

Variable Valeur par défaut Effet
GATEWAY_LOG_LEVEL info Niveau de détail des journaux techniques (sms-gateway logs et la vue technique du Journal) : debug, info, warn ou error. debug est bavard ; aucun niveau n'écrit jamais le texte d'un SMS ni un numéro de téléphone complet
GATEWAY_TRUSTED_PROXIES 172.31.254.2/32, l'adresse du serveur HTTPS intégré Les proxys inverses autorisés à indiquer la vraie adresse IP du visiteur, séparés par des virgules (adresses ou blocs CIDR). La passerelle se sert de cette IP pour le blocage après échecs de connexion et les limites de débit. Ne la modifiez que si vous placez votre propre proxy devant : voir VPS (serveur web existant)
GATEWAY_LOG_RETENTION_DAYS 30 Nombre de jours pendant lesquels une entrée du Journal est conservée avant d'être supprimée, de 1 à 3650. Une rétention plus longue fait grossir la base ; les entrées plus anciennes que la nouvelle valeur sont supprimées au nettoyage suivant. Voir Journal
GATEWAY_UPTIME_RETENTION_DAYS 90 Nombre de jours pendant lesquels l'historique de connexion des téléphones est conservé pour les graphiques de Disponibilité des appareils, de 90 à 3650. En dessous de 90 jours, le graphique de 90 jours perdrait ses plus anciennes barres, d'où ce plancher. L'historique plus ancien est supprimé au nettoyage horaire suivant. Voir Appareils
GATEWAY_ROUTING_MODE round_robin Comment les messages sont répartis entre les cartes SIM quand aucune règle de routage n'en choisit une : round_robin (à tour de rôle), quota (la SIM qui a le plus de marge dans son quota journalier) ou carrier (la SIM de l'opérateur du destinataire). Voir Routage
GATEWAY_CARRIER_PREFIXES vide Quels préfixes de numéro appartiennent à quel opérateur, au format Telma:+26134,+26138;Orange:+26132. Les noms d'opérateur doivent être écrits comme les cartes SIM les indiquent dans Appareils. Obligatoire en mode carrier, ignorée sinon. Un numéro qui ne correspond à aucun préfixe est envoyé comme en mode quota
GATEWAY_WEBHOOKS_ALLOW_PRIVATE_NETWORKS true Autorise les webhooks vers des adresses de votre réseau privé (un CRM sur le même réseau, par exemple). false les limite aux adresses publiques. Les adresses de la machine elle-même et les adresses de métadonnées cloud sont refusées dans tous les cas

Interactions à connaître :

  • Le mode tient en quatre lignes qui vont ensemble : GATEWAY_PUBLIC_URL, GATEWAY_DOMAIN, COMPOSE_PROFILES et GATEWAY_BIND (plus GATEWAY_INSECURE_COOKIES). En changer une sans les autres donne, par exemple, un site HTTPS qui fonctionne et des téléphones qui ne s'appairent pas. Pour changer de mode ou de domaine, relancez l'installeur avec --domain ou --lan : il les réécrit ensemble.
  • Changer GATEWAY_PUBLIC_URL ne met pas à jour les téléphones déjà appairés : ils gardent l'adresse de leur QR code. Appairez-les de nouveau après un tel changement.
  • Un GATEWAY_TRUSTED_PROXIES trop large (par exemple 0.0.0.0/0) permet à n'importe qui de se faire passer pour n'importe quelle adresse IP et de contourner le blocage après échecs de connexion. Laissé vide, la passerelle voit chaque visiteur avec l'adresse du proxy, et tous partagent les mêmes limites.

Réglages avancés

La passerelle lit aussi les deux variables ci-dessous. Elles ne figurent pas dans le fichier écrit par l'installeur, car une installation cliente en a rarement besoin.

Variable Valeur par défaut Effet
GATEWAY_SECRET_KEY générée au premier démarrage et conservée dans secret.key La clé maîtresse, 32 octets en base64, si vous préférez la garder dans un gestionnaire de secrets. Transmise depuis .env par le docker-compose.yml fourni. Quand elle est définie, elle remplace secret.key. Une clé différente de celle avec laquelle l'installation a démarré rend illisibles les téléphones appairés, les secrets des webhooks et la clé de licence enregistrée. Voir La clé maîtresse
GATEWAY_ENV_FILE gateway.env à côté du programme Un fichier clé=valeur lu avant tout le reste. Une variable déjà définie dans l'environnement l'emporte toujours sur le fichier. Fichier absent : ignoré. Fichier illisible : le démarrage est refusé. Non transmise par le docker-compose.yml fourni, dont le .env joue ce rôle

N'y touchez pas. Elles existent dans le programme, mais une installation cliente n'en a aucun usage :

Variable Valeur par défaut Pourquoi ne pas la définir
GATEWAY_DEV false Mode développement. Il retire la protection du cookie de session, accepte une adresse publique non chiffrée sur n'importe quel hôte, et permet de remplacer l'adresse et les clés du serveur de licences. Le docker-compose.yml fourni ne la transmet pas, volontairement
GATEWAY_LICENSE_SERVER_URL notre serveur de licences, intégré Ignorée sauf avec GATEWAY_DEV=true (un avertissement le signale dans les journaux). Doit être en https://
GATEWAY_LICENSE_PUBLIC_KEYS nos clés publiques, intégrées Même règle : ignorée sauf avec GATEWAY_DEV=true
GATEWAY_ADDR :8080 Port d'écoute à l'intérieur du conteneur. Modifiez plutôt GATEWAY_PORT ; changer celui-ci casse la vérification de santé
GATEWAY_DATA_DIR /data Dossier de données à l'intérieur du conteneur. Le changer sort les données du volume et change l'empreinte de la machine

Les sauvegardes n'ont aucune variable : la sauvegarde automatique se règle dans le tableau de bord, sous Paramètres > Sauvegarde et export. Voir Sauvegarde.

Deux règles s'appliquent à toutes les variables :

  • Une valeur vide compte comme absente : la valeur par défaut s'applique.
  • Une valeur invalide arrête la passerelle au démarrage, avec un message qui nomme la variable, plutôt que de tourner sur une valeur que vous n'avez pas choisie. Voir la section suivante.

Quand la passerelle refuse de démarrer

Le message se trouve dans sms-gateway logs, sur une ligne contenant gateway stopped. La passerelle redémarre en boucle jusqu'à ce que la cause soit corrigée.

Cause Ce que dit le journal
Niveau de journal inconnu GATEWAY_LOG_LEVEL: "..." is not one of debug, info, warn, error
Rétention du journal hors limites GATEWAY_LOG_RETENTION_DAYS: "..." is not a number of days between 1 and 3650
Rétention de l'historique de disponibilité hors limites GATEWAY_UPTIME_RETENTION_DAYS: "..." is not a number of days between 90 and 3650
Mode de routage inconnu GATEWAY_ROUTING_MODE: "..." is not one of round_robin, quota, carrier
Mode carrier sans table de préfixes GATEWAY_ROUTING_MODE=carrier requires GATEWAY_CARRIER_PREFIXES
Table de préfixes mal formée ... is not in the form Carrier:+prefix,+prefix
Un réglage oui/non avec une autre valeur <VARIABLE>: "..." is not a boolean (utilisez true ou false)
Adresse publique en http:// simple qui n'est ni un nom .local ni localhost GATEWAY_PUBLIC_URL: "..." is plain http on a non-local host; ...
Adresse de proxy illisible GATEWAY_TRUSTED_PROXIES: "..." is neither a CIDR block nor an address
Clé maîtresse de mauvaise taille key is N bytes, expected 32 ou key is not valid base64
Dossier de données inutilisable create data dir: ..., ou une erreur à l'ouverture de la base
GATEWAY_ENV_FILE (ou gateway.env) présent mais illisible read <path>: ...
Adresse du serveur de licences en http:// simple GATEWAY_LICENSE_SERVER_URL: "..." must use https ...

Pourquoi une adresse en http:// simple est refusée : en HTTP, la session du tableau de bord circulerait en clair sur internet. Seul un nom .local (mode réseau local) ou localhost est accepté sans HTTPS.

Pourquoi le mode carrier est refusé sans table : il n'acheminerait rien par opérateur, et vous croiriez payer le tarif intra-réseau alors que vous paieriez le tarif inter-réseaux.

Une restauration qui échoue (voir Sauvegarde et restauration) n'empêche jamais le démarrage : la passerelle démarre sur la base dont elle dispose, et journalise l'erreur.

La clé maîtresse

Au premier démarrage, la passerelle crée une clé maîtresse, secret.key, dans son dossier de données. Elle protège les secrets des téléphones appairés, les secrets des webhooks et votre clé de licence enregistrée dans la base, et elle identifie votre machine auprès de notre serveur de licences (seule une empreinte dérivée est envoyée, jamais la clé).

La perdre oblige à appairer de nouveau chaque téléphone et à saisir de nouveau la clé de licence. Elle vit à côté de la base, pas dedans : un export de la base seul ne la contient pas, alors que l'archive sms-gateway backup, qui copie tout le dossier de données, la contient.

Ce que contient le dossier de données

Fichier Rôle
gateway.db (et -wal, -shm) La base : messages, contacts, conversations, réglages, comptes
secret.key La clé maîtresse
setup.token Le code d'installation. Présent seulement tant qu'aucun compte n'existe
backups/ Les sauvegardes faites depuis le tableau de bord ou l'API
restore.pending.* Présents seulement pendant qu'une restauration attend le prochain redémarrage
gateway.db.pre-restore-... L'ancienne base, mise de côté après une restauration, conservée jusqu'à ce que vous la supprimiez

Le conteneur est verrouillé : il ne peut écrire nulle part ailleurs que dans ce dossier et dans un espace temporaire utilisé pour les exports de la base. Si vous remplacez le docker-compose.yml fourni par votre propre configuration, gardez la ligne hostname: sms-gateway (sans elle, chaque recréation du conteneur ressemble à un déménagement pour notre serveur de licences) et le montage /tmp (sans lui, l'export de la base échoue).

Sauvegarde

Toute l'installation vit dans le dossier de données. La sauvegarde la plus simple est :

sudo sms-gateway backup

Lancée depuis le dossier où vous voulez l'archive, elle arrête la passerelle le temps de la copie, quelques secondes (les téléphones gardent leurs messages pendant ce temps), écrit sms-gateway-backup-<date>.tar.gz dans le dossier courant, puis la redémarre et attend qu'elle réponde. Cette archive contient la clé maîtresse avec la base : rangez-la comme le document le plus sensible de l'installation, et pas sur la même machine.

La passerelle se sauvegarde aussi automatiquement, sans interrompre les envois : chaque jour à 03:00 dans le fuseau de la plateforme par défaut, sept copies conservées, dans le dossier de données. Changez l'heure, la fréquence et le nombre de copies, ou désactivez-la, dans Paramètres > Sauvegarde et export, qui liste et restaure aussi les sauvegardes et exporte vos données en CSV ou JSON. Ces copies restent sur la machine : téléchargez-en une, ou copiez une archive de sms-gateway backup, pour garder une copie ailleurs.

Tout est détaillé dans Sauvegarde et restauration.

Les guides d'hébergement

Cette page couvre l'installation elle-même. Ce qui est propre à chaque type de machine a son propre guide :

Ce qu'il ajoute
Oracle Cloud Always Free Créer l'instance gratuite et ouvrir les ports aux deux niveaux (Oracle et l'instance)
VPS Préparer un serveur loué : DNS, pare-feu, serveur web existant, démarrage automatique
Serveur local Le nom .local, le wifi invité, l'accès depuis l'extérieur et la disponibilité

Et ensuite

Vous voulez Allez à
Gérer vos téléphones et cartes SIM Appareils
Envoyer vos premiers messages Envoi
Envoyer par l'API API
Sauvegarder et restaurer Sauvegarde et restauration
Passer sur une autre machine Changer de serveur
Savoir ce qui protège vos données Sécurité

Rechercher dans la documentation

Saisissez quelques mots, puis choisissez une page.