5.1 KiB
title: Sink 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/miantiao-me/Sink]
🔗 Sink
Sink est un raccourcisseur d'URL écrit en Rust, conçu pour la vitesse, le no-tracking et le déploiement léger — compatible Cloudflare Pages, Workers et Docker.
📋 Informations Générales
| Métadonnée | Valeur |
|---|---|
| Site web | https://sink.cool |
| GitHub | https://github.com/miantiao-me/Sink |
| License | AGPL-3.0 |
| Langage principal | Rust |
| Étoiles GitHub | 6 775 |
| Dernière MAJ | 2026-06-06 |
| Catégorie | cat-url-shortener |
📝 Description
Sink est un raccourcisseur d'URL moderne écrit en Rust, initialement conçu pour être déployé sur Cloudflare Workers et Cloudflare Pages (KV + D1) pour des performances edge. Il fonctionne également en mode Node.js classique derrière un reverse proxy pour les utilisateurs qui préfèrent Docker et un VPS traditionnel.
Le projet se distingue par sa philosophie no-tracking : pas de cookies, pas de fingerprint, pas d'IP stockée en clair. Les statistiques agrègent les données par jour, pays et référent sans traquer individuellement les visiteurs, ce qui en fait un choix éthique et RGPD-friendly par défaut. L'interface est rapide, sobre, et propose un dashboard minimaliste.
Côté fonctionnalités : slugs personnalisés, links with expiration, protection par mot de passe, QR codes, support des domaines personnalisés (plusieurs possibles), export CSV des clics, et une API REST simple. Le déploiement single-binary Node.js (10 MB) ou Worker Rust (cold start < 5ms) est particulièrement adapté aux RPi et home-labs légers.
🚀 Installation
Docker Compose (recommandé)
services:
sink:
image: ghcr.io/miantiao-me/sink:latest
container_name: sink
restart: unless-stopped
networks:
- web
- internal
environment:
- NEXTAUTH_URL=https://go.example.com
- NEXTAUTH_SECRET=${NEXTAUTH_SECRET}
- DATABASE_URL=postgresql://sink:sinkpass@db:5432/sink
- SUPPORT_URL=
- DISABLE_REGISTRATION=false
labels:
- "traefik.enable=true"
- "traefik.http.routers.sink.rule=Host(`go.example.com`)"
- "traefik.http.routers.sink.tls.certresolver=letsencrypt"
- "traefik.http.services.sink.loadbalancer.server.port=3000"
depends_on:
- db
db:
image: postgres:16-alpine
restart: unless-stopped
networks:
- internal
environment:
- POSTGRES_USER=sink
- POSTGRES_PASSWORD=sinkpass
- POSTGRES_DB=sink
volumes:
- sink-db:/var/lib/postgresql/data
networks:
web:
external: true
internal:
volumes:
sink-db:
Déploiement Cloudflare (avancé)
Sink supporte un mode Cloudflare Workers + D1 + KV idéal pour un déploiement edge. Le repo fournit un guide pas à pas et un
wrangler.tomld'exemple. Build local :npx wrangler deploy.
Installation manuelle
git clone https://github.com/miantiao-me/Sink.git- Prérequis : Node.js 20+, PostgreSQL 13+ (ou D1 pour Cloudflare).
- Copier
.env.examplevers.envet configurer. - Lancer les migrations et
pnpm dev.
⚙️ Configuration
NEXTAUTH_SECRET: chaîne aléatoire pour les sessions.DISABLE_REGISTRATION: àtruepour usage single-admin.- Activer le rate-limiting (Cloudflare WAF ou Traefik middleware).
- Configurer le
MAX_VISITS_PER_LINKsi l'instance est publique. - Brancher un SMTP (optionnel) pour la récupération de mot de passe.
🔄 Alternatives
Open Source
- app-chhoto-url — autre Rust minimaliste, ultra-léger.
- app-shlink — PHP mature, REST API, géoloc GeoLite2.
- app-kutt — TypeScript moderne, UI soignée, custom domain.
- app-dub — plateforme marketing complète, plus riche.
Propriétaires (ce que cette app remplace)
- bit.ly — leader freemium avec tracking agressif.
- short.io — custom domain, freemium.
- cutt.ly — analytics détaillées, freemium.
- ow.ly (Hootsuite) — orienté réseaux sociaux.
🔐 Sécurité
- No-tracking par défaut : Sink ne logge pas les IP, aligné RGPD.
- HTTPS strict : service exposé, ne jamais servir en HTTP.
- Rate limit : le code supporte un middleware à activer côté reverse proxy.
- Backups Postgres : la base de liens doit être sauvegardée.
- Migrations Prisma : exécuter
pnpm prisma migrate deployà chaque mise à jour.
📚 Ressources
- Site officiel : https://sink.cool
- Code source : https://github.com/miantiao-me/Sink
- Documentation : https://github.com/miantiao-me/Sink#readme
- Démo : https://sink.cool
- Cloudflare guide : https://github.com/miantiao-me/Sink#deployment
- Communauté : https://github.com/miantiao-me/Sink/discussions
Pages Liées
- cat-url-shortener — Catégorie complète
- app-chhoto-url — Voisin Rust minimaliste
- app-kutt — Alternative TypeScript
- recettes-docker-compose — Templates Docker