Initial vault setup
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
---
|
||||
title: Dub
|
||||
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/dubinc/dub]
|
||||
---
|
||||
|
||||
# 🔗 Dub
|
||||
|
||||
> **Dub** est une plateforme open source de gestion de liens courts pensée pour les équipes marketing, avec UTM builder, QR codes dynamiques, analytique détaillé et API performante.
|
||||
|
||||
## 📋 Informations Générales
|
||||
|
||||
| Métadonnée | Valeur |
|
||||
| :--- | :--- |
|
||||
| **Site web** | https://dub.co |
|
||||
| **GitHub** | https://github.com/dubinc/dub |
|
||||
| **License** | AGPL-3.0 |
|
||||
| **Langage principal** | TypeScript |
|
||||
| **Étoiles GitHub** | 23 658 |
|
||||
| **Dernière MAJ** | 2026-06-07 |
|
||||
| **Catégorie** | [[cat-url-shortener]] |
|
||||
|
||||
## 📝 Description
|
||||
|
||||
Dub est bien plus qu'un simple raccourcisseur d'URL : c'est une **plateforme de link management** orientée équipes marketing, conçue pour suivre, attribuer et optimiser les liens courts utilisés dans les campagnes. Le projet a démarré comme alternative open source à bit.ly et s'est étoffé pour devenir une suite complète d'attribution (UTM builder, deep links, QR codes dynamiques) avec une API publique.
|
||||
|
||||
L'interface est moderne (Next.js, Tailwind) et propose un dashboard temps réel avec géolocalisation, référents, devices, browsers. Le moteur de redirection est optimisé (cache en mémoire, edge-ready) et gère plusieurs domaines personnalisés, slugs personnalisés, expiration programmée, mots de passe, et link previews désactivables.
|
||||
|
||||
La version auto-hébergée (Dub OSS) garde 80% des fonctionnalités du SaaS et supporte l'authentification par email, OAuth GitHub/Google, l'API REST, les webhooks et l'export CSV. L'image Docker officielle embarque Postgres, Redis, Tinybird (optionnel) et le worker d'agrégation.
|
||||
|
||||
## 🚀 Installation
|
||||
|
||||
### Docker Compose (recommandé)
|
||||
|
||||
```yaml
|
||||
services:
|
||||
dub:
|
||||
image: dubinc/dub:latest
|
||||
container_name: dub
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- web
|
||||
- internal
|
||||
environment:
|
||||
- NEXT_PUBLIC_APP_DOMAIN=go.example.com
|
||||
- DATABASE_URL=postgresql://dub:pass@db:5432/dub
|
||||
- REDIS_URL=redis://redis:6379
|
||||
- NEXTAUTH_SECRET=${NEXTAUTH_SECRET}
|
||||
- NEXTAUTH_URL=https://go.example.com
|
||||
- GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID}
|
||||
- GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET}
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.dub.rule=Host(`go.example.com`)"
|
||||
- "traefik.http.routers.dub.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.services.dub.loadbalancer.server.port=3000"
|
||||
depends_on:
|
||||
- db
|
||||
- redis
|
||||
|
||||
db:
|
||||
image: postgres:16-alpine
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- internal
|
||||
environment:
|
||||
- POSTGRES_USER=dub
|
||||
- POSTGRES_PASSWORD=pass
|
||||
- POSTGRES_DB=dub
|
||||
volumes:
|
||||
- dub-db:/var/lib/postgresql/data
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- internal
|
||||
volumes:
|
||||
- dub-redis:/data
|
||||
|
||||
networks:
|
||||
web:
|
||||
external: true
|
||||
internal:
|
||||
|
||||
volumes:
|
||||
dub-db:
|
||||
dub-redis:
|
||||
```
|
||||
|
||||
### Installation manuelle
|
||||
|
||||
> Dub OSS fournit un guide pas à pas : cloner le repo, installer pnpm, configurer `.env`, exécuter Prisma migrate puis `pnpm build && pnpm start`. Réservé au développement ou à un environnement custom.
|
||||
|
||||
## ⚙️ Configuration
|
||||
|
||||
- Définir `NEXT_PUBLIC_APP_DOMAIN` sur le domaine personnalisé servant les liens courts.
|
||||
- Configurer OAuth GitHub/Google dans `.env` (variables `GITHUB_CLIENT_ID`).
|
||||
- Exécuter les migrations Prisma au premier démarrage.
|
||||
- Brancher Tinybird (optionnel) pour l'analytique temps réel et la géolocalisation IP.
|
||||
- Activer la protection du `/api` par rate limit (middleware Next.js intégré).
|
||||
|
||||
## 🔄 Alternatives
|
||||
|
||||
### Open Source
|
||||
- [[app-shlink]] — l'institution PHP, conteneur natif, REST API, géolocalisation via GeoLite2.
|
||||
- [[app-kutt]] — moderne TypeScript, custom domain, UI soignée, plus simple que Dub.
|
||||
- [[app-yourls]] — pionnier PHP/MySQL, écosystème de plugins riche.
|
||||
- [[app-sink]] — Rust, single binary, déploiement Cloudflare ou serveur léger.
|
||||
|
||||
### Propriétaires (ce que cette app remplace)
|
||||
- **bit.ly** — leader historique, freemium agressif, analytics fermés.
|
||||
- **short.io** — custom domain et branded links, freemium.
|
||||
- **rebrand.ly** — link management orienté marque blanche.
|
||||
- **BL.INK** — plateforme analytics avancée, onéreuse.
|
||||
|
||||
## 🔐 Sécurité
|
||||
|
||||
- **OAuth obligatoire** : activer au moins GitHub/Google, ne pas laisser l'inscription ouverte en production.
|
||||
- **Rate limiting** : la redirection d'URL est une cible classique de spam, activer CrowdSec ou le middleware intégré.
|
||||
- **Backups Postgres** : la base de liens est précieuse, sauvegarder quotidiennement.
|
||||
- **HTTPS strict** : service exposé publiquement, ne jamais servir en HTTP.
|
||||
- **Secret rotation** : `NEXTAUTH_SECRET` doit être long et renouvelé annuellement.
|
||||
|
||||
## 📚 Ressources
|
||||
|
||||
- Site officiel : https://dub.co
|
||||
- Code source : https://github.com/dubinc/dub
|
||||
- Documentation : https://dub.co/docs
|
||||
- Démo : https://app.dub.co
|
||||
- Self-hosting guide : https://github.com/dubinc/dub/blob/main/self-host.md
|
||||
- Communauté : https://github.com/dubinc/dub/discussions
|
||||
|
||||
## Pages Liées
|
||||
|
||||
- [[cat-url-shortener|URL Shortener]] — Catégorie complète
|
||||
- [[app-shlink]] — Alternative mature PHP
|
||||
- [[app-kutt]] — Alternative TypeScript plus simple
|
||||
- [[recettes-docker-compose]] — Templates Docker
|
||||
Reference in New Issue
Block a user