LGSL v6.2.1 sur VestaCP — monitorer ses serveurs CS 1.6 et TeamSpeak 3 en temps réel
Installer LGSL v6.2.1 sur VestaCP
Guide complet pour 2manygames.fr — serveur 141.95.154.67 — Mise a jour : fevrier 2026
1. Contexte
LGSL (Live Game Server List) est un script PHP open-source qui interroge des serveurs de jeux en temps reel et affiche leur statut (en ligne / hors ligne), le nombre de joueurs connectes, la carte en cours, le ping, etc. La version 6.2.1 est disponible sur GitHub.
Dans le cadre de 2manygames.fr, LGSL sera utilise pour surveiller :
- 8 serveurs Counter-Strike 1.6 (protocol
halflife) sur les ports 27015 a 27022 - 1 serveur TeamSpeak 3 (protocol
ts3) sur le port 9987 (query : 10011)
Le serveur EmuLinker / Kaillera n’est pas supporte par LGSL. Une solution de contournement legere en PHP est proposee en section 8.
2. Prerequis
| Composant | Requis | Remarque |
|---|---|---|
| Serveur web | Apache 2.4+ | Gere par VestaCP |
| PHP | 7.4 ou 8.x | Avec extensions sockets et prise en charge UDP |
| MySQL / MariaDB | 5.6+ | Pour stocker la liste des serveurs |
| Acces SSH | Oui | Port 38592 sur 141.95.154.67 |
| VestaCP | Installe | Pour creer la base de donnees et gerer les vhosts |
Verifier les extensions PHP requises
Connectez-vous en SSH et executez :
|
1 2 3 |
ssh -p 38592 admin@141.95.154.67 php -m | grep -E "sockets|pdo|mysqli|mbstring" |
Les extensions sockets, pdo_mysql (ou mysqli) et mbstring doivent apparaitre. Si sockets est absent :
|
1 2 3 4 5 6 7 8 |
# Debian / Ubuntu apt-get install php-sockets # CentOS / RHEL (remplacer X par votre version de PHP) yum install php-X-sockets # Puis recharger Apache service apache2 reload # ou : service httpd reload |
fsockopen() et les sockets UDP directement. La fonction allow_url_fopen doit etre activee dans php.ini (valeur par defaut : On).
3. Creer la base de donnees MySQL via VestaCP
- Connectez-vous au panel VestaCP : https://141.95.154.67:8083
- Cliquez sur l’onglet DB dans la barre superieure.
- Cliquez sur le bouton vert Add Database.
- Remplissez le formulaire :
| Champ | Valeur recommandee |
|---|---|
| Database | lgsl (VestaCP prefixe automatiquement : admin_lgsl) |
| User | lgsl (prefixe : admin_lgsl) |
| Password | Choisissez un mot de passe fort |
| Host | localhost |
| Charset | utf8mb4 |
Cliquez sur Add. VestaCP cree la base et l’utilisateur. Notez les informations :
- Nom de la base :
admin_lgsl - Utilisateur :
admin_lgsl - Mot de passe : (celui que vous avez saisi)
- Host :
localhost
admin_). Tenez-en compte lors de la configuration de LGSL.
4. Telecharger et installer LGSL
4.1 Connexion SSH
|
1 |
ssh -p 38592 admin@141.95.154.67 |
4.2 Creer le dossier cible
|
1 |
mkdir -p /home/admin/web/2manygames.fr/public_html/lgsl |
4.3 Telecharger LGSL v6.2.1
|
1 2 3 4 5 |
cd /tmp # Telecharger l'archive depuis GitHub wget -O lgsl-6.2.1.zip \ https://github.com/tltneon/lgsl/archive/refs/tags/v6.2.1.zip |
wget n’est pas disponible, utilisez curl -L -o lgsl-6.2.1.zip https://github.com/tltneon/lgsl/archive/refs/tags/v6.2.1.zip
4.4 Extraire et copier les fichiers
|
1 2 3 4 5 6 7 8 9 |
# Extraire unzip lgsl-6.2.1.zip # Le dossier extrait s'appelle lgsl-6.2.1 # Copier tout son contenu dans le sous-dossier lgsl du site cp -r lgsl-6.2.1/. /home/admin/web/2manygames.fr/public_html/lgsl/ # Nettoyer rm -rf /tmp/lgsl-6.2.1 /tmp/lgsl-6.2.1.zip |
4.5 Verifier les permissions
|
1 2 3 4 5 6 |
# Le proprietaire doit etre l'utilisateur web (admin sous VestaCP) chown -R admin:admin /home/admin/web/2manygames.fr/public_html/lgsl/ # Permissions standards find /home/admin/web/2manygames.fr/public_html/lgsl/ -type d -exec chmod 755 {} \; find /home/admin/web/2manygames.fr/public_html/lgsl/ -type f -exec chmod 644 {} \; |
4.6 Verifier la structure
|
1 |
ls /home/admin/web/2manygames.fr/public_html/lgsl/ |
Vous devriez voir, entre autres : index.php, install.php, admin.php, lgsl_config.php, lgsl/ (dossier du moteur), themes/.
5. Configuration initiale via install.php
Ouvrez votre navigateur et accedez a :
|
1 |
http://2manygames.fr/lgsl/install.php |
Le script d’installation vous demande les informations de connexion MySQL. Remplissez le formulaire :
| Champ | Valeur |
|---|---|
| Database Host | localhost |
| Database Name | admin_lgsl |
| Database User | admin_lgsl |
| Database Password | (votre mot de passe) |
| Table Prefix | lgsl_ (valeur par defaut, laisser tel quel) |
| Admin Password | Choisissez un mot de passe pour admin.php |
Cliquez sur Install. LGSL cree les tables dans la base de donnees et genere le fichier lgsl_config.php.
admin_ ajoute par VestaCP.
Verification manuelle du fichier de configuration
Apres l’installation, vous pouvez inspecter le fichier genere :
|
1 |
cat /home/admin/web/2manygames.fr/public_html/lgsl/lgsl_config.php |
Il doit contenir les constantes DB_HOST, DB_NAME, DB_USER, DB_PASS correctement renseignees.
6. Supprimer install.php (securite obligatoire)
install.php accessible apres l’installation est un risque de securite majeur. N’importe qui pourrait reinitialiser votre configuration. Supprimez-le immediatement apres l’installation.
|
1 |
rm /home/admin/web/2manygames.fr/public_html/lgsl/install.php |
Verifiez que la suppression est effective :
|
1 2 |
ls /home/admin/web/2manygames.fr/public_html/lgsl/install.php # Doit retourner : No such file or directory |
7. Ajouter les serveurs via admin.php
Accedez a l’interface d’administration :
|
1 |
http://2manygames.fr/lgsl/admin.php |
Connectez-vous avec le mot de passe admin choisi lors de l’installation.
7.1 Tableau de configuration des serveurs
Ajoutez chaque serveur via Add Server en utilisant les parametres suivants :
| # | Nom | Protocole | IP / Host | Port jeu | Port query |
|---|---|---|---|---|---|
| 1 | CS 1.6 Deathmatch | halflife |
141.95.154.67 |
27015 |
27015 |
| 2 | CS 1.6 GunGame | halflife |
141.95.154.67 |
27016 |
27016 |
| 3 | CS 1.6 Deathrun | halflife |
141.95.154.67 |
27017 |
27017 |
| 4 | CS 1.6 HNS | halflife |
141.95.154.67 |
27018 |
27018 |
| 5 | CS 1.6 Kreedz | halflife |
141.95.154.67 |
27019 |
27019 |
| 6 | CS 1.6 WAR | halflife |
141.95.154.67 |
27020 |
27020 |
| 7 | CS 1.6 Retro (CS 1.0) | halflife |
141.95.154.67 |
27021 |
27021 |
| 8 | CS 1.6 Surf | halflife |
141.95.154.67 |
27022 |
27022 |
| 9 | TeamSpeak 3 | ts3 |
141.95.154.67 |
9987 |
10011 |
halflife utilise le protocole Valve A2S (UDP). Le port query est generalement identique au port de jeu pour CS 1.6.
7.2 Particularites TeamSpeak 3
Pour TS3, LGSL a besoin d’acceder au port ServerQuery (10011) en TCP. Ce port est distinct du port vocal (9987 UDP). Dans le formulaire d’ajout :
- Game Port :
9987(port vocal TS3) - Query Port :
10011(port ServerQuery TCP) - Protocol :
ts3
Le port 10011 doit etre joignable depuis PHP. Voir la section 10 pour le cas particulier d’un TS3 tourne dans Docker.
8. EmuLinker / Kaillera — serveur non supporte
LGSL ne supporte pas le protocole EmuLinker / Kaillera. Il n’existe pas de plugin officiel pour ce protocole dans LGSL v6.x.
Solution de contournement : script PHP de verification UDP
Une approche simple consiste a creer un petit script PHP qui tente d’ouvrir une connexion UDP vers le port Kaillera et affiche En ligne ou Hors ligne selon la reponse (ou l’absence de reponse).
Creez le fichier /home/admin/web/2manygames.fr/public_html/lgsl/kaillera_status.php :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<?php /** * Verification basique du statut EmuLinker/Kaillera * Kaillera utilise UDP, on tente une connexion et on ecoute brievement. */ $host = '141.95.154.67'; $port = 27888; // Port par defaut EmuLinker, adaptez si necessaire $timeout = 3; // secondes $online = false; // Ouvrir une socket UDP $socket = @fsockopen('udp://' . $host, $port, $errno, $errstr, $timeout); if ($socket) { // Envoyer un paquet minimal (handshake Kaillera) $ping = "\x00"; fwrite($socket, $ping); stream_set_timeout($socket, $timeout); $response = fread($socket, 64); fclose($socket); // Si on recoit quelque chose, le serveur repond if ($response !== false && strlen($response) > 0) { $online = true; } } header('Content-Type: application/json'); echo json_encode([ 'server' => $host . ':' . $port, 'name' => 'EmuLinker / Kaillera', 'online' => $online, 'status' => $online ? 'En ligne' : 'Hors ligne', ]); |
Vous pouvez integrer ce statut dans votre page d’accueil en faisant un appel AJAX vers /lgsl/kaillera_status.php et en affichant le resultat a cote des serveurs LGSL.
9. Personnalisation
9.1 Changer la langue en francais
Editez le fichier lgsl_config.php et cherchez la ligne de configuration de la langue :
|
1 |
nano /home/admin/web/2manygames.fr/public_html/lgsl/lgsl_config.php |
Modifiez ou ajoutez :
|
1 |
define('LGSL_LANGUAGE', 'fr'); |
Verifiez que le fichier de langue francais existe :
|
1 |
ls /home/admin/web/2manygames.fr/public_html/lgsl/lgsl/languages/ |
9.2 Changer le theme
Les themes sont dans le dossier themes/. Pour appliquer un theme, editez lgsl_config.php :
|
1 |
define('LGSL_THEME', 'default'); // Remplacez 'default' par le nom du dossier du theme |
9.3 CSS personnalise
Pour personnaliser l’apparence sans modifier les fichiers du theme (afin de faciliter les mises a jour), creez un fichier CSS personnalise dans le dossier du theme actif :
|
1 |
nano /home/admin/web/2manygames.fr/public_html/lgsl/themes/default/custom.css |
Puis incluez-le dans le template du theme (themes/default/header.php ou equivalent) :
|
1 |
<link rel="stylesheet" href="themes/default/custom.css"> |
9.4 Intervalle de rafraichissement
Dans lgsl_config.php, l’intervalle de cache (en secondes) entre deux interrogations des serveurs :
|
1 |
define('LGSL_CACHE_TIME', 60); // 60 secondes par defaut |
10. Probleme courant : port ServerQuery TS3 (10011)
Contexte du probleme
Si votre TeamSpeak 3 tourne dans un conteneur Docker, le fichier docker-compose.yml lie probablement le port ServerQuery 10011 uniquement a l’interface locale du conteneur ou a 127.0.0.1 de l’hote :
|
1 2 3 4 |
# Exemple de configuration docker-compose.yml restrictive ports: - "127.0.0.1:10011:10011" # Query TCP - lie a localhost uniquement - "0.0.0.0:9987:9987/udp" # Vocal UDP - accessible publiquement |
Pourquoi LGSL peut quand meme fonctionner
Dans votre configuration, Apache et PHP s’executent directement sur l’hote (pas dans un conteneur). Le PHP de LGSL peut donc atteindre 127.0.0.1:10011 car ce port est expose sur l’interface loopback de l’hote, et PHP tourne sur ce meme hote.
Si LGSL etait lui aussi dans Docker
Si LGSL tournait dans son propre conteneur Docker, il ne pourrait PAS atteindre 127.0.0.1:10011 de l’hote via cette adresse. Il faudrait alors :
- Soit lier le port TS3 a
0.0.0.0:10011dans le docker-compose (expose publiquement) - Soit placer les deux conteneurs sur le meme reseau Docker et utiliser le nom du service TS3 comme hostname
- Soit utiliser l’IP interne du reseau Docker bridge (
172.17.0.1par defaut)
Verifier que le port 10011 est accessible depuis PHP
|
1 2 3 |
# Depuis l'hote, tester la connexion TCP au port ServerQuery nc -zv 127.0.0.1 10011 # Reponse attendue : Connection to 127.0.0.1 10011 port [tcp/*] succeeded! |
Ou via PHP en ligne de commande :
|
1 2 3 4 5 6 7 8 9 |
php -r " \$fp = fsockopen('127.0.0.1', 10011, \$errno, \$errstr, 5); if (\$fp) { echo 'Port 10011 accessible' . PHP_EOL; fclose(\$fp); } else { echo 'ERREUR : ' . \$errstr . PHP_EOL; } " |
Si le port 10011 n’est pas accessible
Modifiez votre docker-compose.yml pour exposer le port sur toutes les interfaces :
|
1 2 3 |
ports: - "10011:10011" # Accessible depuis l'hote sur toutes les interfaces - "9987:9987/udp" |
Puis relancez le conteneur :
|
1 2 |
cd /chemin/vers/votre/teamspeak/ docker-compose down && docker-compose up -d |
11. Verification du fonctionnement
11.1 Verifier l’affichage de la liste
Ouvrez dans un navigateur :
|
1 |
http://2manygames.fr/lgsl/ |
Vous devriez voir la liste des serveurs avec leur statut. Les serveurs allumes affichent le nombre de joueurs et la carte.
11.2 Tester l’interrogation d’un serveur CS 1.6 manuellement
|
1 2 3 4 5 |
# Tester la joignabilite UDP du port 27015 nc -uzv 141.95.154.67 27015 # Ou avec nmap nmap -sU -p 27015 141.95.154.67 |
11.3 Verifier les logs PHP / Apache
|
1 2 3 4 5 |
# Logs Apache pour le domaine tail -50 /home/admin/web/2manygames.fr/log/error.log # Logs Apache access tail -50 /home/admin/web/2manygames.fr/log/access.log |
11.4 Tester depuis PHP
Creez un script de test temporaire /home/admin/web/2manygames.fr/public_html/lgsl/test_query.php :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php // Test rapide d'une socket UDP vers CS 1.6 $host = '141.95.154.67'; $port = 27015; $fp = fsockopen('udp://' . $host, $port, $errno, $errstr, 5); if ($fp) { // Paquet A2S_INFO Valve $packet = "\xFF\xFF\xFF\xFF\x54Source Engine Query\x00"; fwrite($fp, $packet); stream_set_timeout($fp, 3); $data = fread($fp, 1400); fclose($fp); echo strlen($data) > 0 ? "Serveur repond (" . strlen($data) . " octets recus)" : "Pas de reponse (timeout ou serveur eteint)"; } else { echo "Impossible d'ouvrir la socket : $errstr"; } |
Accedez a http://2manygames.fr/lgsl/test_query.php puis supprimez-le apres le test :
|
1 |
rm /home/admin/web/2manygames.fr/public_html/lgsl/test_query.php |
11.5 Verifier les tables MySQL
|
1 |
mysql -u admin_lgsl -p admin_lgsl -e "SELECT * FROM lgsl_servers;" |
Cela liste tous les serveurs enregistres avec leur dernier statut connu.
12. Securite
12.1 Proteger admin.php par .htaccess
La methode la plus simple est de restreindre l’acces a admin.php par IP ou par authentification HTTP :
|
1 |
nano /home/admin/web/2manygames.fr/public_html/lgsl/.htaccess |
Ajoutez (en remplacant VOTRE_IP par votre adresse IP publique) :
|
1 2 3 4 5 6 |
# Protection admin.php par IP <Files "admin.php"> Order Deny,Allow Deny from all Allow from VOTRE_IP </Files> |
Ou par authentification HTTP basique :
|
1 2 3 4 5 6 7 8 9 10 |
# Generer le fichier de mots de passe htpasswd -c /home/admin/.lgsl_htpasswd admin_lgsl # Puis dans .htaccess <Files "admin.php"> AuthType Basic AuthName "LGSL Administration" AuthUserFile /home/admin/.lgsl_htpasswd Require valid-user </Files> |
12.2 Mot de passe admin fort
Le mot de passe admin de LGSL est stocke dans lgsl_config.php. Si vous souhaitez le changer sans repasser par install.php :
|
1 |
php -r "echo password_hash('NOUVEAU_MOT_DE_PASSE', PASSWORD_BCRYPT);" |
Copiez le hash genere et remplacez la valeur LGSL_ADMIN_PASSWORD dans lgsl_config.php.
12.3 Permissions fichiers
|
1 2 |
# lgsl_config.php ne doit pas etre lisible publiquement chmod 640 /home/admin/web/2manygames.fr/public_html/lgsl/lgsl_config.php |
12.4 Mises a jour LGSL
Surveillez les nouvelles versions sur github.com/tltneon/lgsl/releases. Pour mettre a jour :
- Sauvegardez
lgsl_config.phpet le dossierthemes/(vos personnalisations) - Telechargez la nouvelle version et extrayez-la
- Remplacez les fichiers du dossier LGSL (sauf
lgsl_config.phpet vos themes personnalises) - Verifiez si la structure de la base de donnees a change (voir le fichier
CHANGELOGouinstall.phpde la nouvelle version)
|
1 2 3 |
# Sauvegarde avant mise a jour cp /home/admin/web/2manygames.fr/public_html/lgsl/lgsl_config.php /tmp/lgsl_config.php.bak cp -r /home/admin/web/2manygames.fr/public_html/lgsl/themes/ /tmp/lgsl_themes_bak/ |
12.5 Pare-feu et ports exposes
Verifiez quels ports sont actuellement exposes sur le serveur :
|
1 |
ss -tlnp | grep -E "10011|27015|27016|27017|27018|27019|27020|27021|27022|9987" |
Recapitulatif des URLs
| Page | URL | Remarque |
|---|---|---|
| Liste des serveurs (publique) | http://2manygames.fr/lgsl/ |
Page principale |
| Administration | http://2manygames.fr/lgsl/admin.php |
Proteger par IP ou .htaccess |
| Installation | http://2manygames.fr/lgsl/install.php |
A supprimer apres installation |
| Panel VestaCP | https://141.95.154.67:8083 |
Gestion base de donnees |
| Statut Kaillera | http://2manygames.fr/lgsl/kaillera_status.php |
Script personnalise (optionnel) |
0 commentaire