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

6.4 KiB


title: Immich Public Proxy created: 2026-06-06 updated: 2026-06-06 type: app tags: [catalogue, reverse-proxy, immich, partage-public, photos, go] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Reverse+Proxy, https://github.com/alangrainger/immich-public-proxy]

🖼️ Immich Public Proxy

Reverse proxy spécialisé pour partager publiquement des photos Immich sans exposer l'instance complète. Réputation : le moyen le plus sûr d'utiliser Immich comme portfolio photo public.

📋 Informations Générales

Champ Valeur
Site web github.com/alangrainger/immich-public-proxy
GitHub alangrainger/immich-public-proxy
License MIT
Langage Go
Étoiles GitHub 1.9k
Dernière MAJ 2026-04
Catégorie cat-reverse-proxy, Photo, Immich

📝 Description

Immich Public Proxy est un reverse proxy léger en Go qui se place devant une instance app-immich et n'autorise le passage que des requêtes correspondant à des albums que vous avez explicitement marqués comme publics. Toutes les autres requêtes sont rejetées en 404/403.

Le problème résolu est subtil mais important : Immich dispose d'un système de partage natif (liens publics pour les albums), mais pour rendre ces liens accessibles depuis Internet il faut exposer Immich derrière un reverse proxy. Or, exposer Immich tel quel, même avec une bonne configuration, révèle des endpoints d'API (login, utilisateurs, bibliothèque complète) que des attaquants peuvent sonder. Immich Public Proxy agit comme une whitelist : seules les URLs des albums partagés passent, tout le reste est bloqué.

Fonctionnalités notables :

  • Whitelist par album ID ou par user
  • Authentification optionnelle par shared link Immich
  • Proxy du flux RSS pour les galeries
  • Cache des thumbnails pour réduire la charge sur Immich
  • Statistiques d'accès (consultations par album)
  • Image d'exemple : aucun endpoint /api/* n'est proxifié

Public cible : utilisateurs Immich qui veulent partager publiquement un portfolio photo (photographes, familles, communautés) sans risquer de compromettre l'instance privée.

🚀 Installation

Option 1 : Docker Compose (standard)

# docker-compose.yml
services:
  immich-public-proxy:
    image: alangrainger/immich-public-proxy:latest
    container_name: immich-public-proxy
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      - IMMICH_URL=http://immich-server:2283
      - ALLOWED_ALBUMS=album-uuid-1,album-uuid-2
      - PUBLIC_URL=https://photos.example.com
      - SHOW_DONATE_LINK=false
    networks:
      - proxy

networks:
  proxy:
    external: true

⚠️ ALLOWED_ALBUMS peut être vide pour autoriser tous les albums marqués publics côté Immich, ou restrictif pour une whitelist manuelle.

Option 2 : Variante Traefik

# Labels Traefik sur le proxy
services:
  immich-public-proxy:
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.immich-public.rule=Host(`photos.example.com`)"
      - "traefik.http.routers.immich-public.entrypoints=websecure"
      - "traefik.http.routers.immich-public.tls.certresolver=cloudflare"
      - "traefik.http.services.immich-public.loadbalancer.server.port=8080"

⚠️ Important : dans une architecture à 2 niveaux, Traefik expose photos.example.com publiquement, et Immich Public Proxy filtre en aval. Ne pas exposer Immich directement.

⚙️ Configuration Initiale

  1. Créer un album dans Immich et le marquer Public (partage de lien)
  2. Récupérer l'UUID de l'album (URL de partage)
  3. Configurer IMMICH_URL vers l'instance Immich (interne, pas publique)
  4. Optionnel : restreindre avec ALLOWED_ALBUMS=uuid1,uuid2
  5. Lancer : docker compose up -d
  6. Tester : http://localhost:8080 doit afficher la liste des albums publics
# Vérifier que les endpoints sensibles sont bloqués
curl -I http://localhost:8080/api/server/ping
# → attendu : 404 ou 403, pas 200

# Vérifier qu'un album public est accessible
curl -I http://localhost:8080/albums/UUID-ICI
# → attendu : 200

🔀 Alternatives

Open Source

  • Partage natif Immich : fonctionnel, mais nécessite d'exposer Immich directement (risqué)
  • app-caddy avec restriction d'URL : possible, mais à configurer à la main
  • Cloudflare Access devant Immich : Zero Trust, mais plus complexe
  • Lychee / Piwigo : alternatives à Immich orientées partage public

Comparaison Immich Public Proxy vs partage natif

Critère Immich Public Proxy Partage natif Immich exposé
Endpoints /api/* exposés Bloqués Tous exposés
Whitelist par album (auth sur chaque lien)
Authentification (URL = secret) Token dans URL
Cache thumbnails
Statistiques
Simplicité de setup ⚠️ Conteneur de plus
Sécurité ⚠️ Surface large

Propriétaires (ce que ça remplace)

  • Adobe Portfolio + Lightroom Cloud
  • Google Photos public albums (limités)
  • SmugMug / Pixieset pour photographes pros

🔒 Sécurité

  • Aucune route API d'Immich n'est proxifiée (vérifié dans le code)
  • URLs d'albums = secret : la sécurité repose sur l'aléatoire de l'UUID
  • Pas de stockage : proxy stateless, reboot = safe
  • Image minimaliste (Go, ~10 MB)
  • ⚠️ Pas de rate limiting natif : prévoir un WAF ou un rate-limiter en amont
  • ⚠️ URLs shareables immuables : changer l'UUID = régénérer les liens
  • ⚠️ Si Immich est compromis derrière : le proxy ne peut rien faire (mais limite la surface)

📚 Ressources

🔗 Pages Liées