5.4 KiB
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é)
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)
composer create-project shlinkio/shlink shlink- Configurer Apache/Nginx + PHP 8.2+ + base MariaDB/SQLite/Postgres.
- Lancer
php vendor/bin/shlink initpuisphp vendor/bin/shlink api-key:generate. - 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_DOMAINsur 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=truepour 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:downloadtoutes 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 — Catégorie complète
- app-kutt — Voisin moderne TS
- app-yourls — Pionnier PHP
- recettes-docker-compose — Templates Docker