Partagez vos photos et albums Immich en toute sécurité sans exposer votre instance Immich au public.
L'installation prend moins d'une minute et vous n'aurez plus jamais besoin d'y toucher car tous vos partages restent gérés au sein d'Immich.
À propos de ce projet
Installer avec Docker
Comment l'utiliser
Comment ça marche
Configuration supplémentaire
Dépannage
Demandes de fonctionnalités
Immich est un logiciel formidable, mais comme il contient toutes vos photos privées, il est préférable de le garder entièrement verrouillé. Cela pose un problème lorsque vous souhaitez partager une photo ou une galerie avec quelqu'un.
Immich Public Proxy fournit une barrière de sécurité entre le public et Immich et n'autorise que les demandes que vous avez partagées publiquement.
Il est apatride et ne sait rien de votre instance Immich. Il ne nécessite pas de clé API, ce qui réduit encore davantage la surface d’attaque. Les seules choses auxquelles le proxy peut accéder sont les photos que vous avez rendues publiques dans Immich.
Voir une galerie de démonstration en direct directement issue de ma propre instance Immich.
Prend en charge le partage de photos et de vidéos.
Prend en charge les partages protégés par mot de passe.
Si vous partagez une seule image, par défaut, le lien ouvrira directement le fichier image afin que vous puissiez l'intégrer partout où vous le feriez pour une image normale. (Ceci est configurable.)
Toute utilisation se fait via Immich - vous n'aurez pas besoin de toucher à cette application après la configuration initiale.
/share/
au public ? Pour afficher un album partagé dans Immich, vous devez accéder au chemin /api/
. Si vous partagez une galerie avec le public, vous devez rendre ce chemin public. Toute vulnérabilité existante ou future est susceptible de compromettre votre instance Immich.
Pour moi, la configuration idéale est de sécuriser Immich en privé derrière mTLS ou VPN, et d'autoriser uniquement l'accès public au proxy public Immich. Voici un exemple de configuration pour sécuriser Immich derrière mTLS à l'aide de Caddy.
Téléchargez le fichier docker-compose.yml.
Mettez à jour la valeur de IMMICH_URL
dans votre fichier docker-compose pour pointer vers votre URL locale pour Immich. Il ne doit pas s'agir d'une URL publique.
Démarrez le conteneur Docker. Vous pouvez tester son fonctionnement en visitant https://your-proxy-url.com/healthcheck
. Vérifiez la sortie de la console du conteneur pour tout message d'erreur.
docker-compose up -d
Définissez le « Domaine externe » dans les paramètres de votre serveur Immich comme étant le domaine que vous utilisez pour servir publiquement le proxy public Immich :
Désormais, chaque fois que vous partagez une image ou une galerie via Immich, le chemin public correct est automatiquement créé pour vous.
IMPORTANT : Si vous utilisez Cloudflare, assurez-vous de définir votre chemin /share/video/*
sur Bypass Cache, sinon vous risquez de rencontrer des problèmes de lecture vidéo. Voir Dépannage pour plus d'informations.
Étant donné que tous les chemins IPP se trouvent sous /share/...
, vous pouvez exécuter Immich Public Proxy et Immich sur le même domaine.
Consultez les instructions ici : Exécution sur un seul domaine.
Hormis la configuration initiale ci-dessus, tout le reste est géré via Immich.
Vous partagez vos photos/vidéos normalement via Immich. Étant donné que vous avez défini le domaine externe dans les paramètres d'Immich comme URL de votre application proxy, les liens générés par Immich auront automatiquement l'URL correcte :
Lorsque le proxy reçoit une demande, celle-ci se présentera sous la forme d'un lien comme celui-ci :
https://your-proxy-url.com/share/ffSw63qnIYMtpmg0RNvOui0Dpio7BbxsObjvH8YZaobIjIAzl5n7zTX5d6EDHdOYEvo
La partie après /share/
est l'ID public du lien partagé d'Immich (appelé key
dans la documentation).
Immich Public Proxy prend cette clé et effectue un appel API vers votre instance Immich sur votre réseau local, pour demander quelles photos ou vidéos sont partagées dans cette URL de partage.
S'il s'agit d'une URL de partage valide, le proxy récupère uniquement ces actifs via l'API locale et les renvoie au visiteur sous forme d'image ou de galerie individuelle.
Si le lien partagé a expiré ou si l'un des actifs a été placé dans la corbeille d'Immich, il ne les renverra pas.
Toutes les données entrantes sont validées et nettoyées, et tout ce qui est inattendu est simplement supprimé avec un 404.
Il existe quelques options de configuration supplémentaires que vous pouvez modifier, par exemple la façon dont la galerie est configurée.
Faites une copie de config.json dans le même dossier que votre docker-compose.yml
.
Transmettez la configuration à votre conteneur Docker en ajoutant un volume comme celui-ci :
tomes : - ./config.json:/app/config.json:ro
Redémarrez votre conteneur et votre configuration personnalisée devrait être active.
Option | Description |
---|---|
responseHeaders | Modifiez les en-têtes envoyés avec vos réponses Web. Par défaut, cache-control et CORS sont ajoutés. |
downloadOriginalPhoto | Définissez sur false si vous souhaitez uniquement que les gens puissent télécharger la photo de qualité « aperçu », plutôt que votre photo originale. |
showGalleryTitle | Afficher un titre sur la page de la galerie. |
allowDownloadAll | Autorisez les visiteurs à télécharger tous les fichiers sous forme de zip. |
La galerie est créée à l'aide de lightGallery. Vous pouvez trouver tous les paramètres de lightGallery ici : https://www.lightgalleryjs.com/docs/settings/
Par exemple, pour désactiver le bouton de téléchargement des images, vous devez modifier la section lightGallery
et remplacer download
par false
:
{ "lightGallery": { "controls": true, "download": false, "mobileSettings": { "controls": false, "showCloseIcon": true, "download": false } } }
Si vous utilisez Cloudflare et que vous rencontrez des problèmes avec la lecture des vidéos, assurez-vous que vos chemins /share/video/
sont définis pour contourner le cache. J'ai moi-même rencontré ce problème et j'ai trouvé des conseils utiles ici.
Vous pouvez ajouter des demandes de fonctionnalités ici, mais mon objectif avec ce projet est de le garder aussi simple que possible.
En raison de la sensibilité des données contenues dans Immich, je souhaite que toute personne ayant un peu de connaissances en codage puisse lire cette base de code et comprendre pleinement tout ce qu'elle fait.
Les éléments qui ne seront pas pris en compte pour ce projet sont :
Tout ce qui modifie Immich ou ses fichiers de quelque manière que ce soit. Si elle nécessite une clé API ou des accès privilégiés, elle ne sera pas considérée comme une nouvelle fonctionnalité.
Téléchargement de photos (voir ci-dessus).