Journal des modifications
Toutes les évolutions notables de FRP Manager sont notées ici.
Le format suit Keep a Changelog et, depuis 0.1.0, les numéros suivent le versionnage sémantique : chaque version sort d'abord en pré-release, puis devient la release définitive avec le même numéro. Les versions antérieures à 0.0.51 sont décrites dans les notes de release GitHub.
Non publié
0.8.0 - 2026-10-28
L’adresse publique d’un tunnel (IP du serveur et port) se copie maintenant en un clic depuis la page Ports.
Pré-release.
Ajouté
- Ports : copier l'adresse publique en un clic : sur la page Ports, l'adresse publique d'un tunnel (« IP du serveur:port », ou son domaine quand il n'y en a qu'un) est désormais un bouton qui la copie dans le presse-papiers, accessible au clavier, avec une petite icône de copie. Les textes de remplacement (port attribué par le serveur pas encore connu, aucun domaine, privé seulement), les plages de ports et les listes de domaines ne sont pas copiables.
Modifié
- Docker :
docker-compose.host.ymlsupprimé : le fichier du mode hôte (packaging/docker/docker-compose.host.yml) n'est plus dans le dépôt. Une stack Portainer déployée depuis le dépôt avec ce compose path doit passer àdocker-compose.yml(mode autonome). Le guide d'installation précise désormais que les comptes et réglages d'une telle stack (/etc/frp-managerde l'hôte) et ses configurations frps/frpc (/etc/frp) ne sont pas repris dans le volume/data.
Corrigé
- Pare-feu sur écran étroit : à 320 px, le badge « frps introuvable » d'une règle n'est plus coupé : son texte revient à la ligne, et sur téléphone le nom de la règle prend toute la largeur, les boutons passant en dessous.
0.7.2 - 2026-10-27
Les écrans étroits ne défilent plus horizontalement à 320 px, et Docker ne propose plus que le mode autonome.
Pré-release.
Modifié
- Docker : seul le mode autonome est proposé : le guide d'installation, le README, la page Sécurité et le site ne présentent plus le mode hôte (
pid: host,privileged, socket Docker). Les installations déjà faites ainsi continuent de fonctionner ;docker-compose.yml(mode autonome) est la seule configuration à suivre pour une nouvelle installation.
Corrigé
- Écrans étroits : à 320 px, un nom d'instance long (37 caractères) ne fait plus défiler horizontalement les pages Pare-feu, Journaux, Ports et Réglages > Configuration : le sélecteur d'instance tient dans la largeur de la page et finit par « … ». Le tableau des ports du pare-feu tient aussi sans défiler sur les très petits écrans.
0.7.1 - 2026-10-27
La page Pare-feu garde visible et modifiable une règle dont le frps est supprimé, et le dépôt apt est maintenant servi par Cloudflare Pages.
Pré-release.
Modifié
- Dépôt apt sur Cloudflare Pages :
apt.frp-manager.orgest maintenant servi par Cloudflare Pages au lieu de GitHub Pages. L'adresse, la clé de signature et la lignedebne changent pas ;apt updateetapt installfonctionnent comme avant. Rien à faire pour les utilisateurs.
Corrigé
- Pare-feu : une règle liée à un frps supprimé ne disparaît plus : elle reste sur la page avec un badge « frps introuvable » tant que nftables l'applique. Son éditeur permet de la rattacher à un frps existant ou à tous, et le serveur refuse d'enregistrer une règle nouvelle ou modifiée dont le frps n'existe pas (une règle déjà enregistrée n'est pas touchée, le reste du pare-feu s'enregistre donc toujours).
- Pare-feu, pages par frps : le bouton « Pare-feu » d'une carte frps ouvre ce frps et non le premier ; la liste d'instance ne déborde plus en fenêtre étroite ; la boîte « Nouvelle règle » indique pour quel frps la règle est créée ; l'aide sous « Filtrer les connexions » suit son état ; la boîte « Nouvelle instance » nomme le bon fichier (
frpc-nom.tomloufrps-nom.toml).
0.7.0 - 2026-10-26
Une nouvelle instance frpc ou frps se crée désormais depuis le tableau de bord, une configuration déposée à la main sans service reçoit un bouton « Créer le service », et la page Pare-feu se règle frps par frps.
Pré-release.
Ajouté
- Nouvelle instance : un bouton « Nouvelle instance » sur le tableau de bord crée un frpc ou un frps de plus (
frpc-<nom>,frps-<nom>) avec son propre fichier de configuration, son propre journal et des ports d'écoute libres, à partir de la configuration par défaut ou en copie d'une instance existante (la copie d'un frpc garde le serveur et l'authentification, sans les tunnels, qui entreraient en conflit avec ceux de l'original). Avec systemd, une unité<nom>.serviceest créée arrêtée et non activée, comme avec le bouton de réinstallation ; en mode Docker autonome, le panel la lance comme les autres. Une nouvelle permissioninstances.create(sensible, accordée aux seuls administrateurs) la contrôle. - Configurations sans service : avec systemd, un fichier
frpc-*.tomloufrps-*.tomldéposé à la main dans/etc/frpet qu'aucun service ne lance n'est plus ignoré en silence : le tableau de bord le signale avec un bouton « Créer le service », qui crée son unité sans réécrire le fichier. Les conflits avec les autres instances (journal partagé, port déjà pris, tunnels de même nom vers le même serveur) sont listés avant, et une option corrige le journal et les ports. - Un pare-feu par frps : avec plusieurs frps, une liste en haut à droite de la page Pare-feu choisit le frps dont on voit les règles et les ports ; « tous les ports frp » d'une règle désigne alors ceux de ce frps. Le dernier choix est retenu. Les règles existantes ne changent pas et valent toujours pour les ports de tous les frps.
Corrigé
- Unités systemd à suffixe : les services nommés comme
frpc-maison.servicesont désormais détectés (seulsfrpc.service,frpc2.service… l'étaient), à condition qu'ils lancent vraimentfrpsoufrpc. Leur fichier de log est lu dans lelog.tode la configuration.
0.6.3 - 2026-10-26
Le dépôt est réorganisé, avec la documentation et les changelogs sortis du dépôt public, et un test instable est corrigé ; rien ne change pour le panel.
Pré-release.
Modifié
- Organisation du dépôt :
docker-compose.host.ymlest passé danspackaging/docker/et le paquet de filtrage des adresses danspanel/netaddr. Les consignes des agents ne sont plus dans le dépôt. Rien ne change pour les utilisateurs du panel ; les commandes de test du code Go sont désormaisgo test ./panel/... ./tools/.... - Construction du site hors de ce dépôt : le générateur vit maintenant dans un dépôt privé et le site est déployé sur Cloudflare Pages ; la branche
gh-pageset le workflowdemo.ymldisparaissent. Rien ne change pour le panel. - Plus de dossier
docs/dans le dépôt : le guide d'installation et les changelogs vivent maintenant dans le dépôt privé du site ; SECURITY, CONTRIBUTING et CODE_OF_CONDUCT sont passés dans.github/, et les captures du README dans.github/img/. Le README renvoie vers le site. Rien ne change pour le panel.
0.6.2 - 2026-10-26
Les pages de connexion et de configuration initiale affichent désormais l'icône de l'onglet du panel.
Pré-release.
Corrigé
- Favicon des pages de connexion et de configuration initiale : l'icône de l'onglet manquait avant la connexion ; c'est maintenant la même que dans le panel.
0.6.1 - 2026-10-26
Un port TCP + UDP s'affiche désormais sur une seule ligne dans la liste des ports, et le lien Ports ne clignote plus dans la barre latérale.
Pré-release.
Modifié
- Ports : un port TCP + UDP sur une seule ligne : les deux tunnels écrits par le type « TCP + UDP » (
<nom>-tcpet<nom>-udp) s'affichent sur une seule ligne, avec les badges TCP et UDP côte à côte. Modifier rouvre la paire en « TCP + UDP » et change les deux tunnels d'un coup ; supprimer retire les deux, après une confirmation qui les nomme. Deux tunnels ne sont regroupés que si tout correspond sauf le protocole (nomsX-tcp/X-udp, adresse, ports, port public, options).
Corrigé
- Lien Ports qui disparaissait sans cesse : dans la barre latérale, Ports (et Pare-feu) disparaissait et revenait à chaque relance, par le mode autonome (ou par systemd), d'un frpc qui n'arrivait pas à se connecter, et pendant un redémarrage. Un frpc en cours de relance compte désormais comme utilisé, et un lien affiché le reste tant que son instance existe.
0.6.0 - 2026-10-26
L'image Docker embarque frps, frpc et nftables et les lance elle-même, sans accès à l'hôte.
Pré-release.
Ajouté
- Docker : mode autonome, frps et frpc dans l'image : l'image contient désormais
frpsetfrpc(archive officielle de fatedier/frp pour l'architecture de l'image, somme SHA-256 vérifiée à la construction, version donnée par l'argumentFRP_VERSIONduDockerfile), ainsi que nftables. Dans un conteneur qui ne voit rien de l'hôte, le panel les lance lui-même comme ses propres processus : démarrage, arrêt, redémarrage, interrupteur « Démarrage automatique » (le programme démarre avec le conteneur), relance automatique après un arrêt imprévu (2 s, puis jusqu'à 60 s), arrêt propre de frps et frpc àdocker stop. Les configurations (/etc/frp/*.toml) se modifient depuis le panel ; au tout premier lancement, le panel créefrps.toml(port tiré au hasard ouFRPS_BIND_PORT, jeton tiré au hasard) etfrpc.toml. Tout ce qui doit durer est dans un seul volume/data(configuration du panel, configurations frp, journaux, état). La page Journaux montre la sortie du programme (source « Console ») ou son fichier de log. Une mise à jour de frp depuis le panel va dans/data/lib/binet remplace la version de l'image, jusqu'à ce qu'une image plus récente en apporte une plus récente. Le pare-feu lance nft directement dans le conteneur : il lui faut la capacitéNET_ADMIN, sinon la page Pare-feu explique ce qui manque. Le nouveaudocker-compose.ymlutilise ce mode : réseau de l'hôte,NET_ADMIN, un seul volume, pas deprivileged, pas depid: host, pas de socket Docker. ufw n'est pas dans l'image (voir le guide d'installation). FRP_MANAGER_MODE=standaloneouhostimpose le mode ; sinon le panel choisit le mode hôte dès qu'il trouve les montages de l'hôte oupid: host.
Modifié
- Docker : le mode hôte passe dans
docker-compose.host.yml: la configuration précédente (pid: host,privileged,nsenter, montages de l'hôte) est gardée telle quelle sous ce nom, avecFRP_MANAGER_MODE=host. Les installations en place continuent de fonctionner comme avant ; une stack Portainer déployée depuis le dépôt avec le compose pathdocker-compose.ymldoit passer àdocker-compose.host.ymlpour continuer à piloter le frp de l'hôte.
0.5.0 - 2026-10-25
Un port peut s'ouvrir en TCP et en UDP à la fois ou sur toute une plage, et le dépôt apt passe sur apt.frp-manager.org.
Pré-release, puis release définitive le même jour.
Ajouté
- Ports : TCP + UDP et plages de ports : à la création d'un port, le type « TCP + UDP » ouvre le même port dans les deux protocoles (deux tunnels,
<nom>-tcpet<nom>-udp, mêmes ports et mêmes options, port public obligatoire). Les portstcpetudpacceptent une plage ou une liste (30000-30010,6000-6006,6007, 1 000 ports au plus), avec autant de ports publics ; elle reste une seule ligne, écrite sous forme de modèle frp (parseNumberRangePair, frp 0.56 ou plus récent) qui crée un tunnel par port. Le panel vérifie le modèle avant d'enregistrer (syntaxe, plages par paires) et refuse un nom que l'un de ces tunnels utiliserait déjà. - Dépôt apt sur apt.frp-manager.org : un dépôt signé (
dev,testing,stable) servi par GitHub Pages, construit par la CI, la pré-release et la promotion ; le guide d'installation l'utilise maintenant. L'ancien dépôt reste tenu à jour pour l'instant. Une machine encore abonnée à l'ancien passe seule sur le nouveau : le paquet embarque la nouvelle clé, et son étape de post-installation réécrit la source (frp-manager.listou.sources) et remplace la clé ; celles qui sont déjà sur le nouveau dépôt ne sont pas touchées. Le workflowapt-sync.ymlpeut remplirtestingetstableà partir des releases GitHub. - Worker Cloudflare des statistiques anonymes (
tools/stats-worker) : reçoit/api/pingsur frp-manager.org avec les mêmes contrôles et limites que le serveur du site (compteurs par jour dans une base D1, adresses salées, hachées et gardées pour le jour même seulement) et redirige l'ancienne adresse du site vers frp-manager.org. Un workflow le déploie à la demande et lance ses tests. - Chiffres publics du dépôt :
tools/ghstatset un workflow quotidien relèvent les téléchargements de chaque release, les étoiles et les forks sur la branchestats(stats.json,history.json), à partir de la seule API publique de GitHub.
Modifié
- Adresse des statistiques anonymes : une fois activées, le panel envoie maintenant son signal quotidien à
https://frp-manager.org/api/ping, avec les mêmes trois champs et rien d'autre. L'ancienne adresse continue de répondre pour les panels déjà installés. Le guide d'installation et SECURITY le disent. - Nouvelle adresse du projet : le site, la démo en ligne et la documentation passent sur frp-manager.org. L'ancienne adresse y redirige. Le site est aussi publié sur GitHub Pages (
demo.yml, branchegh-pages). - Test apt depuis apt.frp-manager.org : la CI installe le paquet
devdu nouveau dépôt (Debian 12 et Ubuntu 24.04), attend la version exacte qu'elle vient de publier, démarre le panel puis le désinstalle.
0.4.1 - 2026-10-25
Toute l'intégration continue tourne maintenant sur GitHub Actions.
Pré-release.
Modifié
- Toute la CI sur GitHub Actions : tests, image
dev, pré-release, promotion, listes communautaires et site tournent maintenant depuis.github/workflows/au lieu du Forgejo (.forgejo/workflows/est supprimé, ainsi que le workflow « Publier sur GitHub »). Le dépôt apt et le dépôt privé du site restent sur le Forgejo : l'adresse des machines installées ne change pas.
0.4.0 - 2026-10-24
Le panel peut envoyer des statistiques anonymes, si son administrateur les active.
Pré-release.
Ajouté
- Statistiques anonymes, sur accord : une case dans la configuration initiale et un interrupteur dans Réglages → Accès au panel, désactivés par défaut. Une fois activées, le panel envoie au site du projet, une fois par jour, sa version, son architecture et sa méthode d'installation (
script,aptoudocker), et rien d'autre : ni identifiant, ni adresse. Réglages montre le contenu exact envoyé. Cela aide à savoir quelles versions sont encore utilisées. - Scan Plumber : les workflows GitHub et les réglages du dépôt sont vérifiés par Plumber à chaque pull request et à chaque avance du main public ; son score s'affiche en badge dans le README.
Modifié
- Dépôt GitHub protégé :
mainetblocklistsne peuvent plus être supprimées ni recevoir de push forcé, et les tagsv*ne peuvent plus être supprimés ni déplacés. Le signalement privé des failles, vers lequel renvoie SECURITY.md, est maintenant activé. CONTRIBUTING décrit ces règles. frp-manager.zipplus léger (environ 1 Mo de moins) : l'archive de chaque release ne contient plus que le programme,install.sh,app.py,docker-compose.yml,LICENSEet lesREADME.mdetCHANGELOG.mdanglais. Le dossierdocs/(captures du README) et les versions françaises n'y sont plus : la mise à jour n'utilise que le programme, et la documentation est sur le site.
Retiré
- Wiki GitHub : il ne faisait que répéter la documentation du site (frp-manager.gogow.fr), qui a la recherche, la démo en ligne et les deux langues. Le générateur
tools/wikiet ses jobs dansgithub.ymletpromote.ymldisparaissent, et l'étiquettedocumentationde l'image Docker pointe maintenant vers le site. - Versions françaises de SECURITY, CONTRIBUTING et CODE_OF_CONDUCT : ces trois documents n'existent plus qu'en anglais. Le README français et le site renvoient vers la version anglaise.
- Moins de fichiers de documentation : la page Docker (privilèges et risques) devient la section « Docker et Portainer » du guide d'installation, le code de conduite se résume au Contributor Covenant en quelques lignes, et la section d'historique go-mmproxy ainsi que la note interne sur les réglages GitHub disparaissent.
pyproject.toml: la configuration de ruff pour la passerelle Python, que la CI ne lançait pas. La passerelle reste vérifiée avecpython3 -m py_compile, comme dans la CI.
0.3.0 - 2026-10-24
Le port public d'un nouveau port est de nouveau choisi par le serveur frps.
Pré-release.
Retiré
- Port public tiré par le panel (0.1.1) : un nouveau port n'a plus de port public tiré au hasard, et les boutons « Aléatoire » de l'éditeur et « Tirer un port au hasard » de la page Ports disparaissent. Laissé vide, le port public est choisi par le serveur frps ; « Afficher le port attribué » reste là pour le voir. Un numéro saisi à la main reste possible, et les ports déjà enregistrés gardent le leur.
0.2.1 - 2026-10-20
« Afficher le port attribué » explique ce qu'il change avant d'agir.
Pré-release.
Modifié
- « Afficher le port attribué » prévient avant d'agir : une fenêtre explique ce que le panel ajoute à
frpc.toml(tableau de bord local sur127.0.0.1, utilisateurfrp-manager, mot de passe tiré au hasard), que frpc va redémarrer et comment le retirer, avant de le faire. La politique de sécurité et le README le décrivent aussi.
0.2.0 - 2026-10-19
Le port attribué par le serveur s'affiche en un clic dans Ports.
Pré-release.
Ajouté
- Afficher le port attribué par le serveur : pour un port laissé sans numéro, un bouton « Afficher le port attribué » de la page Ports active le tableau de bord local de frpc et redémarre frpc ; la ligne montre ensuite le port choisi par frps, avec le badge « Attribué ». Ce tableau de bord n'écoute que sur
127.0.0.1(injoignable depuis le réseau), sur un port libre à partir de 7400, avec un mot de passe tiré au hasard, dans la config frpc lisible par root seul. Rien ne s'active sans ce clic. Pas pour un frpc en conteneur, que le panel ne joint pas en local.
0.1.1 - 2026-10-19
Le panel tire lui-même le port public d'un nouveau port.
Pré-release.
Modifié
- Port public tiré par le panel : un nouveau port TCP ou UDP reçoit un port public tiré au hasard (10000–32767), avec un bouton « Aléatoire » pour en tirer un autre. Le port est ainsi connu et ne change plus à chaque démarrage de frpc, sans rien activer de plus. Le laisser vide reste possible (le serveur en choisit un). Pour les ports déjà ouverts sans numéro, un bouton « Tirer un port au hasard » leur en donne un.
0.1.0 - 2026-10-19
Le port attribué par le serveur s'affiche dans Ports.
Pré-release, puis release définitive le même jour. Première version en versionnage sémantique ; elle reprend aussi la pré-release 0.0.60.
Ajouté
- Port attribué par le serveur : un port ouvert sans numéro (
remotePortabsent ou à 0), dont frps choisit le port, affiche dans Ports l'adresse publique réellement attribuée, avec un badge « Attribué ». Le panel la lit sur le tableau de bord local de frpc ([webServer]) ; s'il n'est pas activé, un message explique comment l'activer. Un port en erreur côté frpc (port déjà pris…) porte un badge « Erreur » avec le message de frpc.
Corrigé
- Un port ouvert avec
remotePort = 0s'affichait « serveur:0 » au lieu de « port attribué par le serveur ».
0.0.60 - 2026-10-19
Un service frps ou frpc supprimé se réinstalle depuis le tableau de bord.
Pré-release, reprise dans la release 0.1.0.
Ajouté
- Réinstaller un service frps ou frpc supprimé : quand le tableau de bord n'a plus de service frps (ou frpc), un bouton « Réinstaller frps » recrée
frps.servicecomme à l'installation, sur/etc/frp/frps.toml: la configuration conservée à la suppression, sinon une configuration par défaut. Le programme est retéléchargé (et vérifié) s'il manque. Le service est créé arrêté, à démarrer depuis sa carte ; le journal s'affiche dans une fenêtre.
Corrigé
- Le suivi d'une installation de frp pouvait s'arrêter avant la fin (sur une ligne « [OK] » intermédiaire) : le serveur indique maintenant lui-même quand la tâche est terminée et si elle a réussi.
0.0.59 - 2026-10-12
Connexion par passkey, et la documentation dans le wiki GitHub.
Pré-release, puis release définitive le même jour.
Ajouté
- Passkeys : tout compte qui se connecte par mot de passe peut ajouter des passkeys (Réglages → Mon compte, mot de passe redemandé), puis se connecter sans mot de passe, par le bouton « Se connecter avec une passkey » ou les suggestions du champ identifiant. Les passkeys se renomment et se suppriment (les sessions ouvertes avec une passkey supprimée sont fermées) ; un administrateur voit combien chaque compte en a et peut les retirer (appareil perdu). Exige un nom de domaine avec un certificat HTTPS valide, ou
localhost. - Wiki GitHub : la documentation (README, installation, Docker, sécurité, contribution, journal des modifications), en anglais et en français, est aussi publiée dans le wiki du dépôt, comme sur le site ; elle est régénérée à chaque publication du main public.
Modifié
- Captures du README refaites sur l'interface actuelle, en anglais dans le README anglais et en français dans le README français, avec les réglages.
- Site du projet et démo : leur générateur a quitté le dépôt public ; ils restent construits automatiquement depuis
docs/et l'interface du panel.
0.0.58 - 2026-10-12
Le panel passe en Go : un seul programme, plus léger, qui s'installe aussi par apt.
Pré-release, puis release définitive le même jour.
Modifié
- Le panel est réécrit en Go : un seul programme statique, sans Python ni dépendance à installer, pour amd64, arm64 et armv7 ; environ 18 Mo de mémoire au repos, et une image Docker bien plus légère (Alpine). L'interface, l'API, la configuration (
/etc/frp-manager/frp-manager.json), les comptes et les mots de passe restent les mêmes ; seule la session est à rouvrir une fois. Les mots de passe hachés par les versions Python (argon2id, scrypt, ancien SHA-256) sont acceptés, puis rehachés en argon2id si besoin. - Passage automatique depuis une version Python : la mise à jour depuis la 0.0.57 ou avant (bouton Mettre à jour) installe le programme Go de la machine, somme SHA-256 vérifiée, et fait pointer le service dessus.
install.shfait de même et retire l'environnement Python devenu inutile. - La mise à jour du panel exige désormais la somme SHA-256 publiée avec la release : le programme qui tourne n'est jamais remplacé sans elle.
- Les calculs argon2 (connexion, changement de mot de passe) sont limités à deux à la fois : une rafale de tentatives ne peut plus épuiser la mémoire.
- Configuration rejoint les Réglages, dans un groupe frp : le choix de l'instance passe dans l'en-tête de la section, et quitter la section avec des modifications non enregistrées demande toujours confirmation. L'ancienne adresse (
#/config?iid=…) mène à la section. - Le site du projet (accueil, documentation, démo en ligne) est lui aussi construit et servi par un programme Go (
go run ./website build|serve), avec les mêmes pages ; ses captures d'écran passent en WebP sans perte. La page d'accueil gagne un onglet apt à côté de Docker et du script d'installation.
Ajouté
- Dépôt APT : une fois le dépôt ajouté (clé et ligne
deb, voir la documentation d'installation),sudo apt install frp-managerinstalle le panel etapt upgradele met à jour. Le paquet prépare frp commeinstall.sh(services frps/frpc, configurations par défaut avec un port frps aléatoire, téléchargement de frp). Distributionstablepour les releases,testingpour les pré-releases ; amd64, arm64 et armhf. Les.debsont aussi joints à chaque release. - Port de frps aléatoire : à l'installation,
install.shpropose un port d'écoute tiré au hasard entre 10000 et 32767 pourfrps.toml(Entrée pour l'accepter,7000ou un autre numéro sinon), libre sur la machine, au lieu du 7000 que visent les robots ;FRPS_BIND_PORTrépond sans question, et le port est rappelé en fin d'installation. Dans Réglages → Configuration, un bouton Aléatoire à côté du port d'écoute de frps fait le même tirage (installations Docker comprises).
Corrigé
- Les connexions bloquées par le pare-feu s'affichent de nouveau en direct : depuis la 0.0.56, le WebSocket
/ws/firewallse fermait aussitôt ouvert, et l'interface se rabattait sur une relecture périodique.
0.0.57 - 2026-10-12
Tous les réglages au même endroit.
Pré-release.
Modifié
- Tous les réglages au même endroit : Notifications, Mises à jour, Utilisateurs et Connexion unique quittent le menu principal pour devenir des sections de Réglages, rangées en trois groupes (Personnel : Mon compte, Apparence ; Accès et sécurité : Accès au panel, Utilisateurs, Connexion unique ; Système : Notifications, Mises à jour). Un menu à gauche, une rangée défilante sur mobile ; chaque compte ne voit que les sections permises. Les anciennes adresses (
#/notifications,#/updates,#/users) mènent à la bonne section, et la pastille de mise à jour passe sur Réglages. - Mon compte affiche le profil (identifiant, rôle, instances) au-dessus du mot de passe.
0.0.56 - 2026-10-11
Plusieurs comptes avec leurs propres droits, et connexion unique OpenID Connect.
Pré-release.
Ajouté
- Utilisateurs et permissions (ACL) : une page Utilisateurs crée d'autres comptes que le propriétaire (le compte de la configuration initiale, toujours administrateur). Chaque compte a un rôle — administrateur, opérateur, lecteur — ou des permissions choisies parmi 17 (voir les instances, les piloter, les supprimer, lire ou modifier les configurations, journaux, ports, pare-feu, mises à jour, mise à jour du panel, notifications, réglages, comptes), et peut être limité à certaines instances. Chaque route de l'API et chaque WebSocket les vérifie ; modifier, désactiver ou supprimer un compte agit aussitôt, sessions ouvertes comprises. Un compte qui gère les utilisateurs ne peut pas accorder des permissions qu'il n'a pas. L'interface masque ce que le compte ne peut pas faire ; configuration, ports et pare-feu passent en lecture seule sans la permission de modifier.
- Connexion unique OpenID Connect : un bouton « Se connecter avec … » sur la page de connexion (Keycloak, Authentik, Authelia, Zitadel, Google, Microsoft Entra…). Flux « authorization code » avec PKCE,
stateetnonce. Les comptes sont préparés par e-mail (liés à la première connexion dont l'e-mail est vérifié par le fournisseur) ou créés à la première connexion, éventuellement limités à certains domaines ; les rôles peuvent suivre les groupes du fournisseur. La connexion par mot de passe reste toujours possible. - Mon compte dans Réglages : chaque compte local change son propre mot de passe.
Modifié
- Les réglages ne s'affichent qu'aux comptes autorisés à les changer ; seul le propriétaire y change son identifiant et son mot de passe.
0.0.55 - 2026-09-30
Pré-release puis release définitive le même jour.
Ajouté
- Notifications par webhook : une page Notifications envoie des alertes vers Discord, Slack / Mattermost, Telegram, ntfy, Gotify, une adresse JSON (modèle et signature HMAC-SHA256 facultatifs) ou en texte brut. Événements : instance arrêtée ou démarrée, adresse verrouillée, connexion, configuration ou pare-feu modifié, mise à jour du panel ou de frp disponible ou installée, panel démarré. Choix des événements par webhook, filtre d'instances, langue des messages, délai entre deux envois, en-têtes supplémentaires, bouton d'essai et historique des derniers envois. Les envois passent par une file et sont retentés ; adresses, secrets et en-têtes ne reviennent jamais dans le navigateur.
- Site : données structurées (SoftwareApplication, TechArticle, BreadcrumbList), fil d'Ariane,
hreflangetlastmoddans le sitemap, balises Open Graph et Twitter complètes,llms.txt, polices non bloquantes, image principale préchargée, compression gzip par le serveur du site, etwebsite/seo_check.py, un audit lancé avant chaque publication du site.
Modifié
- Titres et descriptions du site ramenés aux longueurs des résultats de recherche ; les deux pages d'index de la documentation ont maintenant des titres distincts.
0.0.54 - 2026-09-29
Pré-release le 2026-09-29, release définitive le 2026-09-30.
Ajouté
- Images Docker pour
arm64etarmv7en plus d'amd64(Raspberry Pi, serveurs ARM) : construites avec buildx et QEMU par les workflows de release et de dev ; la promotion recopie toute la liste multi-architecture vers:latest.
Modifié
- Dépôt rangé : le code du panel (
app.py,install.sh,requirements.txt,templates/) est danspanel/, la politique de sécurité, le guide de contribution et le code de conduite dansdocs/, la démo danswebsite/demo/, la configuration de ruff danspyproject.toml. L'archive de release garde le même contenu : installation et mise à jour fonctionnent comme avant. Les anciens scriptsbuild-dev.shetrelease-docker.shsont retirés (remplacés par les workflows Forgejo).
0.0.53 - 2026-09-28
Pré-release puis release définitive le même jour.
frp ne se met plus à jour tout seul : vous le mettez à jour depuis le panel, quand vous le décidez.
Retiré
- La mise à jour automatique de frp est retirée (
frp-autoupdate.py: tâche cron quotidienne, vérification à chaque démarrage du panel, notification Discord). frp ne se met plus à jour que depuis la page Mises à jour du panel.install.shinstalle frp avecapp.py --install-frp(même téléchargement vérifié que le panel), et une installation existante supprime la tâche cron, le script et sa ligne dans le service systemd à son prochain démarrage.
Corrigé
- En ligne de commande (
app.py --reset-password,--install-frp), les messages ne sont en français que si la langue du système l'est, commeinstall.sh.
0.0.52 - 2026-09-28
Pré-release puis release définitive le même jour.
Le panel devient entièrement bilingue et a désormais son propre site.
Ajouté
- Site du projet, frp-manager.gogow.fr : page d'accueil, documentation (générée depuis les fichiers du dépôt) et démo en ligne, en anglais et en français (
website/). - Versions anglaises de SECURITY, CONTRIBUTING, CODE_OF_CONDUCT et de ce journal (les versions françaises sont désormais les fichiers
.fr.md). - Les messages renvoyés par le serveur (erreurs, confirmations, journaux d'installation de frp et du panel, avis des journaux en direct, libellés des ports du pare-feu) suivent la langue de l'interface, français ou anglais.
install.shetfrp-autoupdate.pyparlent la langue du système (français siLANGest en français, anglais sinon).
Modifié
- L'anglais devient une langue officielle : le panel suit la langue du navigateur (anglais pour toute autre langue que le français) et l'anglais n'est plus marqué comme aperçu dans les Réglages.
- La démo est servie sous
/demo/du site. Son panel a désormais un mot de passe, comme toute installation depuis 0.0.51, et la connexion ramène sur/demo/au lieu de/demo/index.html. - Captures d'écran du site prises dans la démo, en anglais et en français (
website/shots.py).
0.0.51 - 2026-09-28
Pré-release puis release définitive le même jour.
Version consacrée à la sécurité. La mise à jour depuis le panel ou par install.sh est transparente : l'ancien mot de passe continue de fonctionner.
Sécurité
- Mot de passe haché en argon2id (argon2-cffi), avec scrypt en repli si le module manque. L'ancien hash SHA-256 sans sel reste accepté et est rehaché automatiquement à la première connexion réussie. Comparaisons en temps constant.
- Configuration initiale obligatoire : sans mot de passe, le panel n'affiche plus que la page de création de l'identifiant (12 caractères minimum) ; aucune autre page ni route de l'API ne répond.
- Limitation des tentatives de connexion par adresse IP : 5 essais, puis verrouillage de 30 s doublé à chaque échec (1 h au plus).
- Jeton CSRF exigé sur toute requête qui modifie quelque chose ; origine des WebSocket vérifiée.
- Cookies de session HttpOnly et SameSite=Strict, Secure en HTTPS (
cookie_securederrière un reverse proxy TLS). Changer le mot de passe déconnecte les autres sessions. - En-têtes Content-Security-Policy (scripts à nonce), X-Content-Type-Options, X-Frame-Options et Referrer-Policy ; réponses de l'API jamais mises en cache.
- Noms de services systemd et de conteneurs Docker validés par liste blanche ; plus aucune commande
sh -cconstruite avec des données. - Configurations TOML vérifiées (tomllib/tomli) avant d'être écrites ; écriture confinée aux dossiers de configuration de frp, liens symboliques résolus.
- Archives frp extraites sans
extractall: chemins absolus ou avec.., liens, fichiers non ELF et bombes de décompression refusés ; taille des téléchargements et des envois plafonnée. - Archives frp vérifiées par la somme SHA-256 publiée avec chaque release de frp ; miroirs tiers (ghproxy, ghfast, gh-proxy) désactivables (Réglages ou
FRP_MANAGER_NO_MIRRORS=1) et jamais utilisés sans somme de contrôle. - Mise à jour du panel vérifiée par la somme SHA-256 jointe à la release (
frp-manager.zip.sha256, publiée à partir de cette version) et archive contrôlée avant extraction. - Fichier de configuration du panel écrit de façon atomique, lisible par root seulement ; URL du webhook Discord masquée dans les journaux de
frp-autoupdate.py.
Modifié
- Une nouvelle installation écoute sur
127.0.0.1au lieu de0.0.0.0. Les installations existantes gardent leur adresse d'écoute.FRP_MANAGER_HOSTpasse avantbind_host, etFRP_MANAGER_PORTfixe le port d'une nouvelle installation. - Le panel refuse désormais d'écrire une configuration frp en dehors de
/etc/frp,/usr/local/etc/frp,/opt/frpet/root/frp, ou une configuration TOML invalide (code 400 avec le détail de l'erreur). - Mot de passe de 12 caractères minimum pour tout nouveau mot de passe (les mots de passe existants plus courts restent valides).
- README restructuré (démarrage rapide, sécurité, comparaison) ; détails déplacés dans
docs/.
Ajouté
python3 app.py --reset-passwordpour redéfinir les identifiants depuis la console.- Réglage « Miroirs de téléchargement tiers » (Réglages → Accès réseau).
- SECURITY.md, CONTRIBUTING.md, CODE_OF_CONDUCT.md, modèles d'issues et de pull request.
- Tests pytest (connexion, migration du hash, validation TOML, noms de services, archives) et intégration continue : tests, ruff, pip-audit.