← Wszystkie szablony · Multimedia
Wdróż Immich jednym kliknięciem
Twoje zdjęcia i filmy, z backupem prosto z telefonu, inteligentnym wyszukiwaniem, rozpoznawaniem twarzy i albumami
Alternatywa dla Google Photos i iCloud Photos, hostowana u siebie.
Czym jest Immich?
Immich to hostowana u siebie biblioteka zdjęć i filmów, której ludzie używają zamiast Google Photos albo iCloud Photos. Jego aplikacje na iPhone’a i Androida robią w tle backup zdjęć z aparatu, a strona internetowa i aplikacje pokazują wszystko na jednej osi czasu, z albumami, ulubionymi, archiwum, mapą miejsc, w których zrobiono każde zdjęcie, i wspomnieniami z tego samego dnia w poprzednich latach.
Uczenie maszynowe, które działa w samym Immich i niczego nie wysyła do usług w chmurze, znajduje osoby na zdjęciach i grupuje ich twarze, czyta tekst na obrazach i napędza inteligentne wyszukiwanie, które znajduje zdjęcie po słowach takich jak „pies na plaży”. Immich przechowuje pliki RAW, Live Photos i zdjęcia ruchome, udostępnia albumy albo linki komu chcesz, a dzięki funkcji „Dzielenie z partnerami” druga osoba może oglądać twoją bibliotekę. Każda osoba na serwerze ma własne konto.
Ten szablon uruchamia serwer Immich, jego uczenie maszynowe, Valkey i jego PostgreSQL z potrzebnymi rozszerzeniami wektorowymi, a bibliotekę trzyma na wolumenie. Administrator powstaje z e-maila i hasła, które podajesz, zanim Immich komukolwiek odpowie, a udostępnione linki dostają adres projektu. Immich wymaga co najmniej 6 GB pamięci i 2 rdzeni, dlatego mieści się w planie Grow; zdjęcia zajmują dysk, więc pilnuj, ile zostało na nim miejsca, gdy biblioteka rośnie.
Hosting Immich na Pethost
- Logujesz się do Pethost kluczem dostępu, przez GitHub albo Google. Nie masz jeszcze maszyny? Wybierasz plan, a link czeka, aż będzie gotowa.
- Okno „Nowy projekt” otwiera się na aplikacji Immich. Wypełniasz to, o co prosi, i klikasz „Utwórz projekt”: E-mail, Hasło administratora.
- Za minutę czy dwie aplikacja Immich działa pod własnym adresem z HTTPS. Jej sekrety są tworzone losowo, a dane trafiają do nocnego backupu.
- To projekt jak każdy inny: ty albo twój agent możecie go zmienić, cofnąć do wcześniejszej wersji albo przywrócić.
Pytania o Immich
Czy Immich jest darmowy?
Tak. Immich to open source na licencji AGPL-3.0, a jego twórcy mówią, że wszystkie funkcje są darmowe na zawsze i nic nie jest ukryte za paywallem. Możesz go kupić dla siebie albo dla serwera, żeby wesprzeć projekt, ale niczego więcej to nie odblokowuje.
Jak zrobić backup zdjęć z telefonu do Immich?
Zainstaluj aplikację Immich z App Store albo Google Play, podaj adres swojego Immich jako „URL Serwera”, zaloguj się i włącz kopię zapasową dla wybranych albumów. Aplikacja wgrywa nowe zdjęcia i filmy w tle i pomija to, co już jest na serwerze.
Czy Immich rozpoznaje twarze?
Tak. Jego uczenie maszynowe, które działa w samym Immich i nigdzie nie wysyła twoich zdjęć, wykrywa twarze na każdym zdjęciu i grupuje je w zakładce „Osoby”, gdzie nadajesz im imiona. Czyta też tekst na obrazach, a inteligentne wyszukiwanie znajduje zdjęcia po tym, co na nich jest.
Ile pamięci i miejsca na dysku potrzebuje Immich?
Immich wymaga co najmniej 6 GB pamięci i 2 rdzeni, a tutaj zajmuje około 1,5 GB w spoczynku, około 2,5 GB, gdy uczenie maszynowe przetwarza nowe zdjęcia, a przy pierwszym wgraniu, gdy pobiera swoje modele, jeszcze więcej. Na dysku są oryginały plus miniatury i transkodowane filmy, więc zaplanuj więcej miejsca, niż zajmuje sama biblioteka.
Czy Immich jest bezpieczny dla jedynej kopii moich zdjęć?
Sam Immich zaleca backup 3-2-1 zdjęć, na których ci zależy: trzy kopie na dwóch rodzajach nośników, w tym jedna w innym miejscu. Pethost robi backup wolumenów projektu co noc, a Immich sam robi też dumpy swojej bazy danych; trzymaj oryginały również gdzie indziej.
Ile pamięci i miejsca na dysku potrzebuje Immich?
Immich w spoczynku zajmuje razem z bazą danych i uczeniem maszynowym około 1,5 GB pamięci, podczas przetwarzania nowych zdjęć około 2,5 GB, a przy pierwszym wgraniu, gdy pobiera swoje modele, jeszcze więcej; dysk to twoja biblioteka plus jej miniatury i filmy. Na Pethost wystarczy mu plan Grow, z miejscem na inne aplikacje obok.
Immich: plik Docker Compose
Szablon to ten compose.yaml i zmienne zapisywane do .env projektu przy jego tworzeniu. Pethost uruchamia plik dokładnie tak, jak jest napisany.
Kontenery: immich-server (ghcr.io/immich-app/immich-server:v3), immich-machine-learning (ghcr.io/immich-app/immich-machine-learning:v3), redis (valkey/valkey:9), database (ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0).
Wolumeny, w nocnym backupie: library, db, model-cache.
services:
immich-server:
image: ghcr.io/immich-app/immich-server:v3
restart: unless-stopped
environment:
DB_HOSTNAME: database
DB_USERNAME: postgres
DB_PASSWORD: ${DB_PASSWORD}
DB_DATABASE_NAME: immich
REDIS_HOSTNAME: redis
TZ: ${TZ:-Etc/UTC}
URL: ${URL}
ADMIN_EMAIL: ${ADMIN_EMAIL}
ADMIN_PASSWORD: ${ADMIN_PASSWORD}
# A new Immich makes whoever opens it first its administrator. So its first start runs it on
# port 2284, which nobody reaches, signs the administrator up there with the email and password
# given, and sets the address shared links use; only then does Immich answer on 2283.
command:
- |
set -e
if [ ! -f /data/.pethost-admin ]; then
# In a process group of its own, so that its workers stop with it.
IMMICH_PORT=2284 setsid start.sh &
setup=$$!
SETUP_PID=$$setup node -e '
const base = "http://127.0.0.1:2284/api";
const { URL: url, ADMIN_EMAIL: email, ADMIN_PASSWORD: password } = process.env;
const json = { "content-type": "application/json" };
const call = async (path, options) => {
const response = await fetch(base + path, options);
if (!response.ok) throw new Error(path + ": " + response.status + " " + (await response.text()));
return response.json();
};
const setUp = async () => {
const { isInitialized } = await call("/server/config");
if (isInitialized) return;
const name = email.split("@")[0];
await call("/auth/admin-sign-up", { method: "POST", headers: json, body: JSON.stringify({ email, password, name }) });
const { accessToken } = await call("/auth/login", { method: "POST", headers: json, body: JSON.stringify({ email, password }) });
const headers = { ...json, authorization: "Bearer " + accessToken };
const config = await call("/system-config", { headers });
config.server.externalDomain = url;
await call("/system-config", { method: "PUT", headers, body: JSON.stringify(config) });
};
(async () => {
let failure;
for (let i = 0; i < 300; i++) {
// Immich stops if it cannot start: the container starts again and so does this.
try {
process.kill(Number(process.env.SETUP_PID), 0);
} catch {
process.exit(1);
}
try {
return await setUp();
} catch (error) {
failure = error;
await new Promise((done) => setTimeout(done, 1000));
}
}
console.error(failure);
process.exit(1);
})();
'
kill -- -$$setup
wait $$setup || true
while kill -0 -- -$$setup 2>/dev/null; do sleep 1; done
touch /data/.pethost-admin
fi
unset ADMIN_PASSWORD
exec start.sh
volumes:
- library:/data
depends_on:
redis:
condition: service_started
database:
condition: service_healthy
# Its first start makes the database and the administrator before it answers on 2283.
healthcheck:
test: ["CMD-SHELL", "immich-healthcheck"]
interval: 30s
start_period: 10m
start_interval: 5s
immich-machine-learning:
image: ghcr.io/immich-app/immich-machine-learning:v3
restart: unless-stopped
volumes:
- model-cache:/cache
redis:
image: valkey/valkey:9
restart: unless-stopped
healthcheck:
test: redis-cli ping | grep -q PONG || exit 1
database:
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
restart: unless-stopped
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: immich
POSTGRES_INITDB_ARGS: --data-checksums
shm_size: 128mb
volumes:
- db:/var/lib/postgresql/data
volumes:
library:
db:
model-cache:
Więcej w kategorii Multimedia
- OwncastWideo na żywo i czat na twojej własnej stronie
- NavidromeSerwer muzyczny, który streamuje twoją własną kolekcję
- RomMBiblioteka i odtwarzacz w przeglądarce dla twoich gier retro
- KomgaSerwer i czytnik w przeglądarce dla twoich komiksów, mang i e-booków
- LycheeGaleria do wgrywania, porządkowania i udostępniania zdjęć
- AudiobookshelfWłasny serwer audiobooków i podcastów: słuchaj w przeglądarce lub w aplikacjach, z postępem zapamiętanym na wszystkich urządzeniach