Files
wiki/Catalogue-Self-Hosted/apps/app-sink.md
T
2026-06-09 18:40:21 +02:00

140 lines
5.1 KiB
Markdown

---
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é)
```yaml
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.toml` d'exemple. Build local : `npx wrangler deploy`.
### Installation manuelle
1. `git clone https://github.com/miantiao-me/Sink.git`
2. Prérequis : Node.js 20+, PostgreSQL 13+ (ou D1 pour Cloudflare).
3. Copier `.env.example` vers `.env` et configurer.
4. Lancer les migrations et `pnpm dev`.
## ⚙️ Configuration
- `NEXTAUTH_SECRET` : chaîne aléatoire pour les sessions.
- `DISABLE_REGISTRATION` : à `true` pour usage single-admin.
- Activer le rate-limiting (Cloudflare WAF ou Traefik middleware).
- Configurer le `MAX_VISITS_PER_LINK` si 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|URL Shortener]] — Catégorie complète
- [[app-chhoto-url]] — Voisin Rust minimaliste
- [[app-kutt]] — Alternative TypeScript
- [[recettes-docker-compose]] — Templates Docker