Ce billet détaille la migration d’une instance GitLab vers un nouveau serveur, motivée par la fin de vie de CentOS. L’auteur a opté pour AlmaLinux 9, compatible avec les paquets RedHat. La procédure repose sur la documentation officielle de GitLab et s’applique à toute distribution supportée.
Étapes clés :
- Installation : Installer GitLab sur le nouveau serveur en utilisant la même version que l’ancien, après avoir mis à jour le système et ajouté les dépôts GitLab.
- Sauvegarde et transfert : Créer une sauvegarde complète de l’instance existante, transférer les fichiers de configuration (
gitlab.rb,gitlab-secrets.json) et les backups vers le nouveau serveur viarsync. - Restauration : Arrêter les services, restaurer la sauvegarde, puis relancer et vérifier l’intégrité des données avec des commandes comme
gitlab-rake gitlab:checketgitlab:doctor:secrets. - Finalisation : Mettre à jour les enregistrements DNS ou l’IP, puis effectuer les mises à jour progressives de GitLab pour éviter les ruptures. L’auteur recommande aussi de réinstaller GitLab Runner si nécessaire et de configurer des sauvegardes automatiques régulières.
L’article souligne l’importance de suivre les versions intermédiaires lors des mises à jour pour garantir la stabilité.
L’article explique comment déployer des applications PHP sans interruption de service en utilisant la méthode blue-green : deux environnements identiques (blue et green) sont maintenus, l’un actif, l’autre en standby. Le déploiement consiste à installer la nouvelle version sur l’environnement inactif, à vérifier son bon fonctionnement, puis à basculer le trafic de manière instantanée et réversible (via un lien symbolique, un load balancer ou Kubernetes). Les avantages incluent un temps d’arrêt quasi nul et un retour arrière rapide en cas de problème. Pour PHP, il est crucial de centraliser les sessions (Redis/Memcached), les uploads (dossier partagé ou S3), et de gérer l’Opcache et les migrations de base de données avec la méthode "expand/contract" pour éviter les ruptures. L’article propose des scripts prêts à l’emploi pour un serveur unique avec Nginx/PHP-FPM, un load balancer ou des conteneurs, ainsi qu’une checklist pour un déploiement sécurisé, incluant des vérifications de santé et la gestion des caches. Les pièges courants (sessions perdues, caches obsolètes, migrations bloquantes) et des outils comme Deployer ou GitHub Actions sont aussi abordés, soulignant que cette approche transforme les déploiements en opérations sans stress.
Cet article explique comment exporter les métriques de MariaDB vers Alloy pour une visualisation dans Grafana. L’article détaille d’abord la création d’un utilisateur SQL dédié dans MariaDB, avec les droits nécessaires (PROCESS, REPLICATION CLIENT, SELECT). Ensuite, il présente la configuration à ajouter dans le fichier /etc/alloy/config.alloy pour activer l’export des métriques via Prometheus, en utilisant un relabeling pour afficher le hostname plutôt que l’adresse locale. Après rechargement d’Alloy, les données sont visibles dans l’interface d’Alloy et peuvent être affichées dans Grafana via un dashboard dédié comme celui-ci. L’article est illustré par des captures d’écran de l’interface Alloy et du dashboard Grafana final.
Ahmad Shadeed explore dans cet article comment construire une mise en page de section moderne et dynamique en CSS, en s’appuyant sur des techniques avancées comme les container queries, le sélecteur :has(), la fonction clamp(), et les unités de requête de conteneur (cqw). Il propose une solution pour adapter automatiquement la disposition d’une section (en-tête + grille de cartes) selon le nombre d’éléments, en évitant les orphelins visuels et en optimisant l’espace. L’auteur détaille aussi l’utilisation de la typographie fluide, des layouts responsives pour les cartes, et des styles conditionnels (par exemple, si une image est absente). Des astuces comme display: contents pour intégrer l’en-tête dans la grille ou random() pour des bordures aléatoires (expérimental) sont également présentées. Une démonstration pratique et des exemples de code illustrent chaque concept, montrant comment le CSS moderne permet de créer des designs flexibles et adaptatifs sans JavaScript.
Andy Clarke explore dans cet article comment les animations ambiantes, discrètes et lentes, peuvent enrichir l’identité visuelle et la narration d’un site web sans distraire l’utilisateur. À travers trois études de cas (Reuven Herman, Mike Worth et EPD), il illustre des techniques concrètes : morphing de chemins SVG, superposition de mouvements pour créer de la profondeur, interactions subtiles et respect des préférences d’accessibilité (comme prefers-reduced-motion). Ces animations, réalisées avec CSS ou GSAP, transforment des éléments statiques en expériences vivantes, tout en restant en arrière-plan. L’article met l’accent sur l’optimisation des SVGs, la performance et l’intégration harmonieuse du mouvement dans le design, prouvant que même dans des secteurs traditionnels, l’animation peut renforcer une marque sans dominer le contenu.
Jérémy Buget partage son retour d’expérience sur la création d’un chatbot IA spécialisé dans l’inclusion socio-professionnelle, en s’appuyant sur un corpus de documents issus de La communauté de l’inclusion. Le projet utilise une architecture locale avec Ollama (modèle gpt-oss:20b), un script de crawling en Node.js pour récupérer les fiches d’information, une base PostgreSQL avec l’extension pgvector pour stocker et indexer les embeddings (768 dimensions) générés via Sentence Transformers (nomic-embed-text-v2-moe). Le chatbot fonctionne en vectorisant les questions utilisateurs, en recherchant les documents pertinents par comparaison vectorielle (similarité cosinus), puis en générant des réponses sourcées via un LLM, le tout encapsulé dans une API FastAPI et une webapp simple. L’objectif était d’explorer l’exploitation de l’IA pour un usage métier précis, en garantissant des réponses fiables et ancrées dans le corpus documentaires. Le code source est disponible sur GitHub. Une démonstration concrète de RAG (Retrieval-Augmented Generation) avec des outils open-source.
L’article explique comment améliorer l’UX d’un site en affichant automatiquement les favicons devant les liens externes, sans JavaScript ni surcharge inutile. L’auteur utilise une approche côté serveur (via un MarkdownProcessor en PHP) pour détecter les liens externes, ajouter dynamiquement leur favicon via l’API publique de DuckDuckGo, et appliquer des attributs de sécurité (target="_blank", rel="noreferrer nofollow"). Le CSS assure un alignement parfait et un soulignement du texte seulement. Résultat : une navigation plus intuitive et visuellement claire, avec un impact minimal sur les performances grâce au lazy loading et au cache HTTP. Une astuce simple mais efficace pour soigner les détails et renforcer la confiance des utilisateurs.
L’article explique comment mettre en place un système de visioconférence performant dans Nextcloud, en dépassant les limites des solutions traditionnelles comme Talk ou l’intégration de BigBlueButton. Il propose deux méthodes d’installation : un script de déploiement pour un serveur dédié, ou un déploiement en conteneurs Docker (pour le signaling et l’enregistrement), avec des exemples de fichiers docker-compose et de configurations Apache. L’objectif est d’offrir une solution scalable, intégrée à Nextcloud, permettant notamment l’enregistrement de webinaires ou de démonstrations. L’auteur partage aussi des captures d’écran et un exemple concret d’utilisation réussie. Idéal pour ceux qui cherchent à optimiser la visio et l’enregistrement dans leur instance Nextcloud.
L’auteur partage ses conseils pour en réaliser des efficaces. Le point clé : rien n’est trivial. Il insiste sur la nécessité d’expliquer chaque étape, même celles qui semblent évidentes, car le public peut ne pas maîtriser les bases (où lancer une commande, comment allumer un appareil, etc.). Il recommande de définir le vocabulaire technique, d’expliquer le pourquoi derrière chaque action (ex. : choix d’un outil, respect d’une température), et d’adapter le contenu au public visé (novice, intermédiaire, expert). La précision est essentielle : éviter les formulations vagues comme « suivez la procédure normale », et lister clairement les prérequis (matériel, logiciels, permissions). Autre astuce : tester son tuto en le suivant soi-même ou en le faisant essayer à un débutant pour repérer les oublis ou ambiguïtés. Enfin, il encourage à utiliser un vocabulaire rigoureux (ex. : la RFC 2119 pour distinguer « doit », « devrait », « peut ») et à justifier chaque étape pour éviter erreurs et frustrations. L’objectif ? Rendre le tutoriel accessible, reproductible et sans zone d’ombre, quel que soit le domaine (informatique, cuisine, aéronautique…).
Ce tutoriel explique comment implémenter le Design Pattern Strategy dans Symfony, en partant d’une approche naïve avec des if/else pour aboutir à une solution professionnelle et maintenable. L’objectif est de créer un système d’analyse de céréales (blé, orge, tournesol, etc.) qui puisse s’étendre facilement sans modifier le code existant.
L’auteur détaille trois étapes :
- Approche naïve avec des
if/elseoumatch(PHP 8+), simple mais peu extensible et difficile à maintenir. - Solution optimale avec le Strategy Pattern : chaque type de céréale est géré par une classe indépendante (stratégie) implémentant une interface commune. Symfony utilise des attributs comme
#[AutoconfigureTag]et#[AutowireIterator]pour injecter automatiquement les stratégies dans un manager, qui délègue l’analyse à la stratégie adaptée. - Avantages : respect du principe ouvert/fermé, testabilité, et extensibilité (ajouter une céréale = ajouter une classe).
Le tutoriel inclut des exemples concrets, des comparatifs, et un projet GitHub pour illustrer la mise en œuvre. Une ressource idéale pour comprendre comment structurer du code Symfony flexible et évolutif.
John Rhea explique comment il a recréé l’animation du bouton Google Gemini de Gmail en utilisant uniquement du CSS, notamment la fonction shape() et des animations. L’animation originale montre une étoile à quatre branches qui tourne et une forme extérieure se transformant entre plusieurs formes (fleur, cylindre, hexagone, cercle) tout en tournant. Rhea détaille sa méthode : il a dessiné les cinq formes dans un logiciel vectoriel, veillant à ce qu’elles aient le même nombre de points d’ancrage pour permettre une interpolation fluide entre elles. Il a ensuite converti ces formes en syntaxe CSS shape(), défini des variables CSS pour chaque forme, et utilisé des transitions et des @keyframes pour animer la rotation, le changement de couleur et la morphose entre les formes. Le résultat final reproduit fidèlement l’effet visuel du bouton Gmail, avec une approche purement CSS et sans JavaScript. Un projet ludique qui met en lumière les possibilités créatives des nouvelles fonctionnalités CSS.
Cet article explique comment configurer WordPress avec MariaDB et Traefik en utilisant des réseaux Docker séparés pour améliorer la sécurité et faciliter la duplication de sites. L’article détaille la création d’une architecture où chaque site WordPress et sa base de données sont isolés dans leur propre réseau privé, inaccessible depuis internet, tandis que Traefik gère le routage et les certificats SSL automatiquement via Let’s Encrypt. Le tutoriel propose une configuration étape par étape : installation de Traefik avec SSL, création de réseaux Docker dédiés, déploiement d’un premier site WordPress, puis duplication aisée pour ajouter d’autres sites. Les avantages soulignés sont la sécurité renforcée, la simplicité de gestion et la possibilité d’ajouter facilement de nouveaux sites. L’auteur évoque aussi des pistes d’amélioration, comme l’automatisation des sauvegardes des bases de données. Idéal pour qui veut héberger plusieurs sites WordPress de manière sécurisée et scalable.
Flozz partage ses premières impressions et l’installation d’Ubuntu 25.04 sur le GPD MicroPC 2, un mini-PC portable ultra-compact (7", 800 g) équipé d’un Intel N250, 16 Go de RAM et un SSD NVMe de 512 Go. L’auteur, nostalgique des netbooks, apprécie sa polyvalence (mode PC/tablette, écran tactile 1080p, connectique complète : 2x USB-A, 2x USB-C, HDMI, Ethernet, Wi-Fi 6, Bluetooth 5.2) et son format nomade, idéal pour le dépannage ou les déplacements. L’installation d’Ubuntu se passe sans encombre, mais nécessite quelques ajustements : correction des boutons du trackpad via une configuration libinput, réactivation du tactile après veille avec un script systemd, et activation de la rotation automatique de l’écran via une extension GNOME. Le clavier QWERTY, compact et optimisé pour une utilisation à deux mains, est surprenant d’agrément, tandis que l’écran offre une bonne qualité. Seuls bémols : le chargeur fourni (format US + adaptateur encombrant) et l’absence de pilote pour le lecteur d’empreintes. Malgré un prix élevé (425 € + taxes) et quelques réglages logiciels, la machine séduit par sa solidité et sa praticité, notamment en mode tablette.
Ce guide explique comment monter une partition Windows chiffrée avec BitLocker sous Linux, en utilisant Dislocker ou Cryptsetup. Idéal pour les dual-boot ou la récupération de données.
🔹 Outils : dislocker, cryptsetup, ntfs-3g
🔹 Astuce : Désactiver le Fast Startup de Windows pour éviter les problèmes.
🔹 Alternative : Utiliser cryptsetup (depuis la v2.3.0) si Dislocker pose problème.
L’article explique comment l’auteur a remplacé Apache par Traefik comme reverse proxy, principalement pour intégrer Crowdsec (notamment son module AppSec, compatible uniquement avec Nginx, OpenResty ou Traefik) et bloquer efficacement les scans malveillants (comme les requêtes vers .env ou X11). Traefik centralise le routage, simplifie la gestion des certificats Let’s Encrypt, et permet d’appliquer des middlewares de sécurité (HSTS, CSP, rate limiting, etc.). L’installation se fait en binaire (hors Docker), avec une configuration modulaire (fichiers YAML pour les sites, middlewares, et le dashboard). L’intégration de Crowdsec se fait via un bouncer Traefik et le module AppSec, qui analyse les requêtes en temps réel et bannit les IP suspectes (ex : accès à .env). Malgré quelques péripéties (notamment avec les versions de Crowdsec et des conseils erronés de ChatGPT), le résultat est un système sécurisé, évolutif, et facile à surveiller via les logs et métriques. L’auteur souligne la satisfaction d’avoir un WAF performant et open source, tout en partageant ses fichiers de configuration et astuces pour reproduire la solution.
Ce guide complet explique comment installer et configurer un VPN WireGuard sur un VPS Ubuntu pour naviguer de manière sécurisée et anonyme. WireGuard, léger et intégré au noyau Linux, utilise des algorithmes modernes comme ChaCha20 et Curve25519. Le processus inclut : l’installation de WireGuard, la génération des clés de chiffrement, la configuration du serveur et du client, l’activation du forwarding IP et du NAT, ainsi que la gestion des règles pare-feu. Une fois configuré, le VPN permet de rediriger tout le trafic internet via le serveur, avec des options pour exclure le réseau local si besoin. Le guide propose aussi des astuces pour ajouter plusieurs clients, dépanner les connexions et optimiser la sécurité (changement de port, surveillance des connexions). Idéal pour protéger sa vie privée, WireGuard offre une alternative simple et performante à OpenVPN
L’article explique comment implémenter une architecture multi-tenant dans Symfony à l’aide du bundle Hakam Multi Tenancy Bundle. L’objectif est de créer une application SaaS où chaque client (tenant) dispose de sa propre base de données isolée, tout en partageant une infrastructure commune. L’architecture repose sur une base principale (pour les utilisateurs et les configurations) et des bases dédiées par tenant (pour les données métiers, comme les patients dans l’exemple d’une application médicale). Le tutoriel détaille la configuration du bundle, la séparation des entités (Main/Tenant), la création des fixtures, et l’automatisation de la commutation de contexte en fonction de l’utilisateur connecté. L’approche permet une isolation totale des données, une scalabilité optimisée et une maintenance simplifiée. Idéal pour les applications nécessitant une sécurité et une personnalisation par client.
Cet article explique comment optimiser un agent IA en utilisant le composant Symfony Messenger pour gérer les tâches longues (comme les appels à des API externes ou des modèles LLM) de manière asynchrone. Grâce à cette approche, l’agent devient plus performant et résilient : les opérations bloquantes (récupération d’emails, traitement par LLM, envoi de notifications) sont découplées et exécutées en arrière-plan via des files de messages (Redis, AMQP, etc.). L’auteur détaille la configuration des bus de commandes, requêtes et événements (CQRS), illustre la création de messages et de handlers dédiés, et montre comment lancer un consommateur Symfony pour traiter les tâches sans bloquer l’application principale. Résultat : un système scalable, tolérant aux pannes et prêt pour la production.
Ce tutoriel montre comment créer un agent IA personnalisé avec Symfony en seulement 11 minutes, en utilisant des modèles comme OpenAI, Gemini ou Llama. L’exemple concret consiste à récupérer des emails via IMAP, à les résumer automatiquement avec une IA, puis à envoyer le résumé par email ou messagerie. L’article détaille l’installation du composant Symfony AiAgent (sorti en juillet 2025), la configuration de l’API OpenAI, la gestion des emails (stripping HTML, utilisation de Symfony Mime et Notifier), et l’intégration du tout dans une commande console. Une base flexible pour automatiser des workflows avec Symfony et l’IA, adaptable à d’autres sources de données ou canaux de notification.
Symfony AI est un nouvel ensemble de composants PHP conçu pour faciliter l’intégration de l’intelligence artificielle dans les applications Symfony. Il propose notamment Platform, une interface unifiée pour interagir avec des plateformes d’IA (OpenAI, Mistral, Gemini, etc.) afin de vectoriser des textes (transformation en vecteurs numériques pour mesurer leur similarité), et Store, un système de stockage et de recherche optimisé pour les données vectorielles, compatible avec des bases comme Postgres, Redis ou Meilisearch. L’article illustre comment vectoriser des documents, les stocker, puis retrouver ceux qui sont sémantiquement proches grâce à des mesures comme la cosine similarity. Symfony AI permet ainsi de créer facilement des fonctionnalités avancées comme la recherche sémantique ou le RAG (Retrieval-Augmented Generation), tout en offrant la flexibilité de changer de fournisseur d’IA ou de base de données selon ses besoins. Une solution performante et modulaire pour exploiter l’IA en maîtrisant ses données.