Docs développeurs
Français

Exploitation du serveur

Administration et paramètres

Page d'administration, envoi des codes d'inscription (SMS et e-mail), valeurs de configuration du serveur, sauvegardes et sécurité : la référence de l'opérateur.

Le serveur intègre une page d'administration qui s'ouvre dans un navigateur. Elle permet de consulter l'état du serveur, de choisir comment les codes d'inscription et de connexion sont remis, et de gérer les utilisateurs et les bots. Cette page réunit en un seul endroit la référence de la page d'administration et des valeurs de configuration du serveur. Si vous devez d'abord installer le serveur, consultez Installation du serveur. L'interface de la page d'administration est en coréen : les libellés coréens des onglets, boutons et réglages sont indiqués ici entre parenthèses.

Ouvrir la page d'administration

La page d'administration se trouve à l'adresse /admin/ du port HTTP d'administration (8080 dans la configuration de production) et ne s'ouvre que depuis le serveur lui-même (127.0.0.1). L'opérateur y accède par un tunnel SSH.

# Sur votre ordinateur (laissez la commande tourner)
ssh -N -L 8080:127.0.0.1:8080 <utilisateur>@<serveur>
# Navigateur : http://localhost:8080/admin/

# Le jeton (sur le serveur)
sudo cat /srv/pabal/pabal_server/data/admin-token

Saisissez le jeton, puis Ouvrir (열기). Le navigateur mémorise le jeton ; pour l'effacer, utilisez Effacer le jeton (토큰 지우기) en haut à droite. Pour choisir vous-même le jeton, définissez TELEGRAM_ADMIN_TOKEN (16 caractères minimum) : aucun fichier n'est alors écrit.

Contenu de chaque onglet

OngletContenuActualisation
Tableau de bord (대시보드)Personnes, sessions et connexions actives en ce moment ; nombre de personnes, de bots, de groupes, de messages et de photos ; durée de fonctionnement, ports, base de données, JVM, contrôles de santé. Un bandeau d'avertissement s'affiche si les numéros de test sont activés5 s
Codes d'inscription (가입 코드)Codes en attente (numéro, mode de remise, état de l'envoi, code, temps restant, nombre de saisies erronées) et historique récent. Copier ou annuler un code3 s
Utilisateurs (사용자)Tous les comptes — numéro de téléphone, e-mail de connexion (modifiable), connecté ou non, nombre d'appareils connectés, nombre de messages. Déconnecter tous les appareils (모든 기기 로그아웃), Bloquer le numéro (번호 차단)10 s
Bots ()Bots créés avec BotFather — créateur, menu des commandes, mode de connexion (MTProto · polling HTTP · adresse du webhook et raison de l'échec), nombre de mises à jour en attente10 s
Paramètres (설정)Règles d'inscription et de connexion, SMS, e-mail (SMTP), blocage de numéros de téléphoneEnregistrement manuel
Stockage (저장소)Répertoire de données et adresse de la base de données (mot de passe masqué), nombre et volume des photos, nombre de flux stockés par type10 s

Les actions dangereuses (déconnexion, blocage, annulation d'un code) ne s'exécutent qu'après un second clic.

Codes d'inscription et de connexion

Quand une personne saisit son numéro de téléphone dans l'application, le serveur crée un code et l'envoie selon le mode choisi dans l'onglet Paramètres (설정).

Mode de remiseOù va le codeÉcrans de l'application
Page d'administration (관리 화면)Onglet Codes d'inscription (가입 코드). L'opérateur le copie et le communique lui-mêmeNuméro → « code envoyé » → code (et nom pour un nouveau numéro)
SMSTexto via Twilio, Solapi ou un webhookComme pour la page d'administration
E-mail (이메일)Courriel via SMTPNuméro → saisie de l'e-mail → « code envoyé par e-mail » → code
  • En mode e-mail, une nouvelle inscription peut utiliser n'importe quelle adresse, qui devient l'e-mail de connexion du compte. Un compte existant ne reçoit le code qu'à son e-mail de connexion enregistré : on empêche ainsi quelqu'un d'entrer en saisissant sa propre adresse avec le numéro d'une autre personne. Pour un compte existant sans e-mail de connexion, le code est envoyé à la place par SMS (s'il est configuré) ou via la page d'administration. Vous pouvez renseigner l'e-mail de connexion depuis l'onglet Utilisateurs (사용자).
  • L'envoi se fait en arrière-plan : l'application passe aussitôt à l'écran du code. Le résultat de l'envoi (succès ou échec, avec la raison) s'affiche dans l'onglet Codes d'inscription.
  • L'inscription (saisie du nom) n'est possible qu'après avoir saisi le bon code. Les codes erronés ne sont acceptés qu'un nombre limité de fois ; au-delà, même le bon code est refusé.

Paramètres — inscription et connexion

ÉlémentSignificationDéfaut
Autoriser les nouvelles inscriptions (새 가입 허용)Désactivé : seuls les comptes existants peuvent se connecter. Les nouveaux numéros sont refusés comme « numéro invalide »Activé
Mode de remise des codes (코드 전달 방식)Page d'administration / SMS / e-mailPage d'administration
Afficher les codes dans la page d'administration (관리 화면에 코드 표시)Même en mode SMS ou e-mail, affiche le code dans l'onglet Codes d'inscription (au cas où l'envoi échoue)Activé
Numéros de test (+99966…) (테스트 번호)Selon la configuration du serveur / activer / désactiver. À désactiver en productionSelon la configuration du serveur
Nombre de chiffres · durée de validité du code (코드 자릿수 · 코드 유효 시간)5 à 6 chiffres · 1 à 60 minutes5 chiffres · 5 minutes
Intervalle entre deux demandes · maximum par jour (재요청 간격 · 번호당 하루 최대 요청)Secondes avant qu'un même numéro puisse recevoir un nouveau code (0 à 3600) · nombre maximal de demandes sur 24 heures (1 à 1000)60 secondes · 10 fois
Saisies erronées autorisées (틀린 입력 허용 횟수)Au-delà, le code est verrouillé (1 à 20)5 fois

Paramètres — SMS

FournisseurValeurs à saisirRemarques
Webhook (웹훅)Adresse de réception (https://…), en-tête Authorization (facultatif)Le serveur envoie POST {"phone":"+8210…","code":"12345","text":"…"}. Une réponse 2xx vaut succès. Pour vous brancher sur votre propre serveur de SMS ou sur un autre service
TwilioAccount SID, Auth Token, numéro d'expéditeur ou Messaging Service SIDPartout dans le monde, numéros étrangers compris
Solapi (ex-CoolSMS)API Key, API Secret, numéro d'expéditeurSMS en Corée. Le numéro d'expéditeur doit être préalablement enregistré chez Solapi. Les numéros +82 sont envoyés au format 010…

Le texte peut contenir {code} (le code) et {minutes} (la durée de validité). Valeur par défaut : [파발] 인증 코드: {code} (« [Pabal] Code de vérification : {code} »). Après l'enregistrement, vérifiez avec Envoi de test (테스트 발송).

Paramètres — e-mail (SMTP)

ServiceServeur · port · sécuritéNom d'utilisateur · mot de passe
Gmailsmtp.gmail.com · 587 · STARTTLSAdresse Gmail · mot de passe d'application (Compte Google → Sécurité → Validation en deux étapes → Mots de passe des applications)
Naversmtp.naver.com · 587 · STARTTLSIdentifiant · mot de passe (activez POP3/SMTP dans les réglages de Naver Mail)
Relais de messagerie interneAdresse du relais · 25 · aucuneLaisser vide

L'adresse d'expédition doit être une adresse depuis laquelle le compte SMTP a le droit d'envoyer. L'objet et le corps acceptent eux aussi {code} et {minutes}.

Gestion des utilisateurs

  • Déconnecter tous les appareils (모든 기기 로그아웃) : coupe toutes les connexions (clés d'autorisation) du compte. À utiliser pour un utilisateur qui a perdu un appareil.
  • Bloquer le numéro (번호 차단) : ce numéro ne peut plus recevoir de code, et le compte correspondant est aussitôt déconnecté de tous ses appareils. Revient au même que la liste de blocage des numéros de téléphone de l'onglet Paramètres (설정).
  • E-mail de connexion (로그인 이메일) : nécessaire, en mode e-mail, pour qu'un compte existant puisse se connecter par e-mail.
  • @BotFather est un bot intégré au serveur : il ne peut pas être déconnecté.

Gestion des bots

L'onglet Bots () affiche le mode de connexion de chaque bot : s'il est connecté en MTProto, s'il a appelé getUpdates en HTTP au cours de la dernière minute, quelle est l'adresse de son webhook et si celui-ci est actuellement en échec (avec la raison). Si le nombre de mises à jour en attente ne cesse d'augmenter, le programme du bot est arrêté ou son webhook échoue. La suppression d'un bot et l'émission d'un nouveau jeton se font par le créateur du bot, auprès de @BotFather.

Variables d'environnement

Le serveur lit le fichier de configuration (server-config.json), puis le surcharge avec les variables d'environnement. Le fichier compose de production définit les valeurs ci-dessous : en général, il suffit de modifier .env.

VariableSignificationValeur dans le compose de production
TELEGRAM_PORTPort MTProtoMTPROTO_PORT (8443)
TELEGRAM_HOSTAdresse d'écoute de MTProto0.0.0.0
TELEGRAM_PUBLIC_HOSTAdresse du serveur communiquée à l'application (help.getConfig)PUBLIC_IP
TELEGRAM_WEB_PORTPort du site web, de la documentation, de la Bot API et de la page d'administration8080
TELEGRAM_WEB_HOSTAdresse d'écoute de ce port. 127.0.0.1 par défaut0.0.0.0 (dans le conteneur ; publié sur l'hôte uniquement sur 127.0.0.1)
TELEGRAM_PUBLIC_URLAdresse du site web. Liens (me_url_prefix), liens d'invitation, exemples de la documentation, images d'aperçuhttps://DOMAIN/
TELEGRAM_DATA_DIREmplacement des photos, d'admin-token et d'operations.json/app/data
TELEGRAM_RSA_KEYChemin de la clé privée RSA du serveur (créée au premier démarrage si elle n'existe pas ; clé publique dans .pub)/app/keys/private.pem
TELEGRAM_DC_IDNuméro de DC de ce serveur(1 par défaut dans l'image)
TELEGRAM_DB_TYPEmemory · h2 · postgresqlpostgresql
TELEGRAM_DB_URL, TELEGRAM_DB_USERNAME, TELEGRAM_DB_PASSWORDConnexion JDBCjdbc:postgresql://pabal-postgres:5432/pabal, pabal, POSTGRES_PASSWORD
TELEGRAM_DB_MAX_POOL_SIZENombre de connexions à la base de données20
TELEGRAM_ADMIN_TOKENJeton de la page d'administration (vide : créé dans data/admin-token)ADMIN_TOKEN
TELEGRAM_TEST_NUMBERSNuméros de test +99966…. Développement uniquementfalse
TELEGRAM_WEBHOOK_ALLOW_LOCALAutorise les webhooks de bots en http:// et vers des adresses internes. Développement uniquement(non défini = false)
JAVA_OPTSOptions de la JVM (mémoire)La valeur de .env

Fichiers de données

FichierContenuPermissions
keys/private.pemClé privée RSA du serveur. Ne la sortez jamais du serveur600
keys/private.pem.pubClé publique. Utilisée pour compiler l'application et pour /docs/server-key.pem
data/admin-tokenJeton de la page d'administration600
data/operations.jsonValeurs de l'onglet Paramètres — règles d'inscription, secrets SMS et SMTP, numéros bloqués600
data/media/Photos originales
Table events de PostgreSQLComptes, conversations, messages, connexions, bots, configuration des webhooks — l'historique de toutes les modifications

Notes de sécurité

  • N'exposez pas directement le port d'administration sur Internet. Dans la configuration de production, Caddy bloque avec un 404 les chemins d'administration comme /admin, /health et /metrics.
  • Toutes les requêtes de données d'administration exigent Authorization: Bearer <jeton>, et les pages d'autres sites ne peuvent pas les lire.
  • Les secrets SMS et SMTP se trouvent uniquement dans operations.json ; l'interface et l'API indiquent seulement « enregistré » (저장됨). Si vous enregistrez en laissant un champ secret vide, la valeur existante est conservée.
  • Jetons et secrets n'apparaissent pas dans les journaux, et les numéros de téléphone y sont masqués. Les adresses de la Bot API (qui contiennent le jeton) ne sont pas non plus journalisées.
  • Les clés d'autorisation étant stockées dans la base de données, quiconque y a accès peut déchiffrer le trafic des utilisateurs. Protégez la base de données et les sauvegardes aussi soigneusement que la clé RSA.

Limites

  • Les codes en attente et l'historique récent sont en mémoire et disparaissent au redémarrage du serveur (il suffit de redemander un code depuis l'application).
  • L'envoi réel par un fournisseur de SMS doit être vérifié avec votre propre compte chez ce fournisseur. Le serveur construit les requêtes conformément à la documentation de chaque fournisseur.
  • Pas encore disponible : suppression de comptes, suppression forcée de bots, consultation des messages, affichage des journaux, graphiques.