--- title: Shlink created: 2026-06-08 updated: 2026-06-08 type: app tags: [catalogue, url-shortener, self-hosted] confidence: high contested: false sources: [https://selfh.st/apps/?tag=42, https://github.com/shlinkio/shlink] --- # 🔗 Shlink > **Shlink** est le raccourcisseur d'URL PHP de rĂ©fĂ©rence pour l'auto-hĂ©bergement : mature, conteneurisĂ©, REST API complĂšte, support natif de la gĂ©olocalisation et des QR codes. ## 📋 Informations GĂ©nĂ©rales | MĂ©tadonnĂ©e | Valeur | | :--- | :--- | | **Site web** | https://shlink.io | | **GitHub** | https://github.com/shlinkio/shlink | | **License** | MIT | | **Langage principal** | PHP | | **Étoiles GitHub** | 5 095 | | **DerniĂšre MAJ** | 2026-06-07 | | **CatĂ©gorie** | [[cat-url-shortener]] | ## 📝 Description Shlink est une application PHP (Symfony) qui s'est imposĂ©e comme **la** rĂ©fĂ©rence du raccourcissement d'URL auto-hĂ©bergĂ© moderne. Sa philosophie est claire : un backend headless robuste avec une **API REST** complĂšte, et un front-end web sĂ©parĂ© (`shlink-web-client`) pour l'administration. Cette sĂ©paration permet de consommer Shlink depuis des scripts, des bots ou des sites tiers sans dĂ©pendre de l'UI. FonctionnalitĂ©s principales : support multi-domaine (un serveur Shlink peut servir plusieurs domaines courts), slugs personnalisĂ©s, expiration, protection par mot de passe, QR codes dynamiques, gĂ©olocalisation IP via **MaxMind GeoLite2**, suivi des rĂ©fĂ©rents, devices, browsers, et respect du header `Do-Not-Track`. Le systĂšme d'API keys permet de gĂ©nĂ©rer des tokens Ă  scope limitĂ© (lecture seule, admin, domaine prĂ©cis). L'Ă©cosystĂšme autour de Shlink est riche : clients mobiles (Android/iOS), intĂ©grations Home Assistant, webhooks, exports CSV, plugins de tracking UTM. C'est le choix **le plus recommandĂ©** pour un usage personnel, en famille ou en petite Ă©quipe qui veut une stack stable, bien documentĂ©e, avec un projet qui a fait ses preuves depuis 2018. ## 🚀 Installation ### Docker Compose (recommandĂ©) ```yaml services: shlink: image: shlinkio/shlink:stable container_name: shlink restart: unless-stopped networks: - web - internal environment: - DEFAULT_DOMAIN=go.example.com - IS_HTTPS_ENABLED=true - GEOLITE_LICENSE_KEY=${GEOLITE_KEY} - MERCURE_URL= # optionnel labels: - "traefik.enable=true" - "traefik.http.routers.shlink.rule=Host(`go.example.com`)" - "traefik.http.routers.shlink.tls.certresolver=letsencrypt" - "traefik.http.services.shlink.loadbalancer.server.port=8080" volumes: - shlink-data:/etc/shlink/data shlink-ui: image: shlinkio/shlink-web-client:stable container_name: shlink-ui restart: unless-stopped networks: - web - internal environment: - SHLINK_SERVER_URL=https://go.example.com/rest - SHLINK_API_KEY=${SHLINK_API_KEY} labels: - "traefik.enable=true" - "traefik.http.routers.shlink-ui.rule=Host(`go-admin.example.com`)" - "traefik.http.routers.shlink-ui.tls.certresolver=letsencrypt" depends_on: - shlink networks: web: external: true internal: volumes: shlink-data: ``` ### Installation manuelle (LAMP) 1. `composer create-project shlinkio/shlink shlink` 2. Configurer Apache/Nginx + PHP 8.2+ + base MariaDB/SQLite/Postgres. 3. Lancer `php vendor/bin/shlink init` puis `php vendor/bin/shlink api-key:generate`. 4. Configurer le virtual host pour `/rest/v3/...`. ## ⚙ Configuration - CrĂ©er une clĂ© API : `docker exec shlink shlink api-key:generate`. - RĂ©cupĂ©rer une licence **MaxMind GeoLite2** gratuite sur maxmind.com pour la gĂ©olocalisation. - Configurer un cron pour le tĂ©lĂ©chargement quotidien de la base GeoLite2. - DĂ©finir `DEFAULT_DOMAIN` sur le domaine court. - Brancher un web service pour les **webhooks** d'Ă©vĂ©nements (visite, crĂ©ation). ## 🔄 Alternatives ### Open Source - [[app-yourls]] — pionnier PHP, Ă©cosystĂšme de plugins. - [[app-kutt]] — TypeScript moderne, UI plus intĂ©grĂ©e. - [[app-dub]] — plateforme marketing, plus riche. - [[app-sink]] — Rust, edge-ready, no-tracking. - [[app-polr]] — autre PHP historique. ### PropriĂ©taires (ce que cette app remplace) - **bit.ly** — leader freemium, analytics fermĂ©s. - **short.io** — custom domain, freemium. - **rebrand.ly** — link management orientĂ© marque. - **cutt.ly** — analytics dĂ©taillĂ©es, freemium. ## 🔐 SĂ©curitĂ© - **API key** : gĂ©nĂ©rer une clĂ© par usage, ne jamais la commiter, rotation annuelle. - **HTTPS strict** : `IS_HTTPS_ENABLED=true` pour la gĂ©nĂ©ration d'URL absolues correctes. - **Rate limit** : utiliser un middleware Traefik ou Cloudflare pour bloquer les abus. - **Backups SQLite/Postgres** : la base de liens est petite mais critique. - **GeoLite2 update** : planifier un cron `shlink geoip:download` toutes les semaines. ## 📚 Ressources - Site officiel : https://shlink.io - Code source : https://github.com/shlinkio/shlink - Documentation : https://shlink.io/documentation - API reference : https://api-spec.shlink.io - Web client : https://github.com/shlinkio/shlink-web-client - CommunautĂ© : https://github.com/shlinkio/shlink/discussions - Clients mobiles : https://shlink.io/apps ## Pages LiĂ©es - [[cat-url-shortener|URL Shortener]] — CatĂ©gorie complĂšte - [[app-kutt]] — Voisin moderne TS - [[app-yourls]] — Pionnier PHP - [[recettes-docker-compose]] — Templates Docker