Immich self-hosting: 6GB RAM மற்றும் பாதுகாப்பான அப்டேட்
Immich-ல் 6GB RAM தேவை, port 2283 HTTPS கட்டாயம், exit 137 பிழை மற்றும் pgvecto.rs தரவுத்தளத்தில் v3 பதிப்பு இயங்காததற்கான காரணங்கள் மற்றும் மீட்டெடுக்கும் முறைகளை இதில் காணலாம்.
நீங்கள் உருவாக்குவது
Immich என்பது ஒரு self-hosted புகைப்படம் மற்றும் வீடியோ காப்புப்பிரதி (backup) சேவையாகும். இது Google Photos-க்கு ஒரு சிறந்த மாற்றாகும். இதில் உள்ள phone app, உங்கள் கேமரா ரோலில் உள்ள கோப்புகளை பின்னணியில் பதிவேற்றும். இதில் timeline, albums, face recognition மற்றும் machine-learning தேடல் வசதிகள் உள்ளன. நீங்கள் எதையும் tag செய்யாமலேயே "beach" அல்லது ஒரு நபரைத் தேடி கண்டறிய இது உதவும். இதை நீங்கள் சொந்தமாக வைத்திருக்கும் VPS-ல் இயக்கலாம். அசல் கோப்புகள் உங்கள் disk-லேயே இருக்கும். உங்களை விளம்பரப்படுத்த யாரும் உங்கள் கோப்புகளை ஸ்கேன் செய்ய மாட்டார்கள். நீங்கள் இன்னும் பிற விருப்பங்களுடன் இதை ஒப்பிட்டுப் பார்க்கிறீர்கள் என்றால், எங்கள் PhotoPrism மற்றும் Immich ஒப்பீடு அவற்றின் RAM பயன்பாடு, phone apps மற்றும் backup கட்டளைகளை ஒப்பிட்டு விளக்குகிறது.
இதன் நிறுவல், அந்தத் திட்டத்தின் சொந்த Docker Compose கோப்பிலிருந்து நான்கு containers-ஐ இயக்குவதை உள்ளடக்கியது. அந்தப் பகுதிக்கு பத்து நிமிடங்கள் ஆகும். இந்த வழிகாட்டியின் மீதமுள்ள பகுதி சவாலானதாக இருக்கலாம்: machine-learning container சிறிய கணினிகளில் அதிக நினைவகத்தை (memory) பயன்படுத்தும், அசல் கோப்புகள் disk-ஐ வேகமாக நிரப்பும், mobile app plain-HTTP server-ஐ ஏற்காது, மேலும் Immich அடிக்கடி மாற்றங்களை வெளியிடுவதால், கவனக்குறைவாகச் செய்யப்படும் ஒரு docker compose pull உங்கள் database-ஐத் தொடங்க முடியாத நிலைக்குத் தள்ளலாம். இந்த நான்கு விஷயங்களையும் கவனமாகக் கையாண்டால் Immich மிகச் சிறப்பாகச் செயல்படும். இவற்றை அலட்சியப்படுத்தினால் உங்கள் வார இறுதி நேரத்தை வீணாக்க நேரிடும்.
முன்நிபந்தனைகள் மற்றும் கவனிக்க வேண்டிய நடைமுறைச் சிக்கல்கள்
- RAM: அதிகாரப்பூர்வ ஆவணங்கள் குறைந்தபட்சம் 6 GB மற்றும் பரிந்துரைக்கப்படுவது 8 GB என்கின்றன. 4 GB மற்றும் swap-ஐ அடிப்படைத் தேவையாகக் கருதுங்கள்.
immich-serverமற்றும் Postgres containers-ன் தேவை குறைவு.immich-machine-learningcontainer-தான் அதிக RAM-ஐப் பயன்படுத்தும்; இது CLIP மற்றும் face-recognition மாதிரிகளை RAM-ல் ஏற்றி search indexes-ஐ உருவாக்கும். 2 GB மட்டுமே உள்ள கணினியில் kernel இதைத் தடுத்துவிடும் (OOM kill). 4 GB RAM இருந்தாலும் swap-ஐச் சேர்த்துக்கொள்ளுங்கள். - Disk: உங்கள் முழு library-ன் அளவைக் கணக்கிட்டு, அதற்கும் மேலாக இடவசதியை ஒதுக்குங்கள். உங்கள் அசல் கோப்புகள் முழுமையாக நகலெடுக்கப்படும். அதோடு, Immich thumbnails மற்றும் preview images-ஐ உருவாக்கும் (இது கூடுதலாக 10–20% இடத்தை எடுத்துக்கொள்ளும்). 200 GB புகைப்படத் தொகுப்பிற்கு 300 GB volume தேவைப்படும். Postgres-ன் அளவு இதைவிட மிகக் குறைவு.
- CPU: நவீன KVM VPS எதுவாக இருந்தாலும் போதுமானது, ஆனால் CPU மூலம் ML செய்வது மெதுவாக இருக்கும். பெரிய அளவிலான புகைப்படங்களை import செய்யும்போது, smart-search indexing பின்னணியில் பல மணிநேரம் நடக்கலாம். இது இயல்பானது; இதற்கு GPU கட்டாயமில்லை.
- ஒரு domain name: இது VPS-ஐச் சுட்டிக்காட்ட வேண்டும். Mobile app-க்கு HTTPS endpoint மிகவும் அவசியம், எனவே ஒரு reverse proxy-ஐ முன்னால் அமைப்பது சிறந்தது. இது Docker, TLS மற்றும் backups கொண்ட self-hosted Nextcloud instance அமைப்பதைப் போன்றதே. Immich என்பது அந்த file server-க்கு இணையான புகைப்படச் சேமிப்புத் தளமாகும்.
- Docker மற்றும் Compose plugin: Docker Engine மற்றும் Compose v2 plugin-ஐ Docker-ன் சொந்த apt repository-லிருந்து நிறுவ வேண்டும். இது எங்களது Docker Compose அடிப்படை வழிகாட்டி-ல் விளக்கப்பட்டிருப்பது போலவே இருக்க வேண்டும்.
படி 1: மற்ற அனைத்திற்கும் முன்பாக swap-ஐச் சேர்க்கவும்
சிறிய VPS-களில் Immich தோல்வியடைவதற்கு மிக முக்கியமான காரணம், ML container-க்கு OOM-kill (Out of Memory) ஏற்படுவதுதான். எனவே, முதலில் kernel-க்குத் தேவையான கூடுதல் நினைவகத்தை (memory) வழங்கவும்.
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -hfree -h கட்டளையை இயக்கும்போது, இப்போது Swap: வரியில் 4.0Gi மதிப்பைக் காட்ட வேண்டும். இது ML-ன் வேகத்தை அதிகரிக்காது, ஆனால் 4 GB நினைவகம் கொண்ட கணினிகளில் indexing நடக்கும்போது container திடீரென நின்றுவிடுவதைத் தடுக்கும்.
படி 2: அதிகாரப்பூர்வ compose மற்றும் env கோப்புகளைப் பதிவிறக்கவும், நகல் எடுக்க வேண்டாம்
Immich தனது service பதிப்புகளையும், மிக முக்கியமாக அதன் database image-ஐயும் அது வழங்கும் கோப்புகளுக்குள்ளேயே குறிப்பிடுகிறது (pin). எந்தவொரு வலைப்பதிவிலும் (இந்த வலைப்பதிவு உட்பட) உள்ள compose கோப்பை உங்கள் ஆதாரமாகக் கொண்டு நகலெடுக்க வேண்டாம். வெளியீட்டு கோப்புகளை (release assets) பதிவிறக்கவும்:
sudo mkdir -p /opt/immich && cd /opt/immich
sudo wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
sudo wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.envஇவை அந்தந்த tagged release-லிருந்து வருவதால், image குறிப்புகள் சரியாகப் பொருந்தும். இந்த compose கோப்பு நான்கு service-களை வரையறுக்கிறது. எதையும் மாற்றும் முன் அவை என்னவென்று தெரிந்துகொள்வது அவசியம்:
immich-server(ghcr.io/immich-app/immich-server, containerimmich_server): இது API மற்றும் web UI ஆகும், இது2283port-ல் இயங்குகிறது. இது உங்கள் கோப்புகளை/dataபாதையில் mount செய்கிறது.immich-machine-learning(ghcr.io/immich-app/immich-machine-learning, containerimmich_machine_learning): இது CLIP search மற்றும் முக அங்கீகாரத்திற்கு (face recognition) பயன்படுகிறது. பதிவிறக்கம் செய்யப்பட்ட மாதிரிகளை (models) இது ஒருmodel-cachevolume-ல் சேமிக்கிறது. இது அதிக நினைவகத்தை (memory) பயன்படுத்தும் service ஆகும்.database(containerimmich_postgres): இது VectorChord vector extension கொண்ட Postgres ஆகும், இது similarity search-க்கு உதவுகிறது. இதற்கான image tag, compose கோப்பிலேயே digest மூலம் குறிப்பிடப்பட்டுள்ளது, உதாரணமாகghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:.... பழைய அமைப்புகள்pgvecto.rs-ஐப் பயன்படுத்தின; Immich v3.0-ல் அதற்கான ஆதரவு நீக்கப்பட்டுவிட்டது, எனவே தற்போது நீங்கள் நிறுவும் அனைத்தும் VectorChord-ஐயே பயன்படுத்தும். இந்த tag-ஐ ஒருபோதும் கைமுறையாக மாற்ற வேண்டாம்.redis(containerimmich_redis): இது job queue-களுக்கான Valkey/Redis instance ஆகும்.
படி 3: உங்கள் புகைப்படங்கள் மற்றும் தரவுத்தளம் அமைந்துள்ள .env-ஐ உள்ளமைக்கவும்
.env-ஐத் திறந்து நான்கு விஷயங்களை அமைக்கவும். குறிக்கப்பட்ட வரிக்குக் கீழே உள்ள அனைத்தும் அப்படியே இருக்க வேண்டும்.
# Where original uploads are stored on the host
UPLOAD_LOCATION=/opt/immich/library
# Where the Postgres data lives. NEVER put this on an NFS/network share.
DB_DATA_LOCATION=/opt/immich/postgres
# "v3" is a floating tag that tracks the latest v3.x. Pin a full tag like
# v3.0.2 instead — then you upgrade on purpose, not by surprise.
IMMICH_VERSION=v3.0.2
# Change this to a long random string. Letters and digits only.
DB_PASSWORD=REPLACE_WITH_A_LONG_RANDOM_STRING
# Set your timezone so timestamps and "on this day" line up
TZ=Europe/London
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immichஉங்களுக்குத் தேவையற்ற சிக்கல்களைத் தவிர்க்கும் இரண்டு விதிகள். UPLOAD_LOCATION உங்கள் பெரிய வட்டை (big disk) சுட்டிக்காட்ட வேண்டும். நீங்கள் பிற்காலத்தில் ஒரு data volume-ஐ இணைப்பதாக இருந்தால், ஆரம்பத்திலிருந்தே அதன் mount path-ஐ இதற்காக அமைக்கவும். ஏனெனில், பிறகு மாற்றினால் thumbnails-ஐ நகர்த்த வேண்டியிருக்கும் மற்றும் asset paths-ஐப் புதுப்பிக்க வேண்டியிருக்கும். மேலும் DB_DATA_LOCATION உள்ளூர் வட்டில் (local disk) இருக்க வேண்டும்: NFS அல்லது SMB share-ல் இயங்கும் Postgres சிதைந்துவிடும் (corrupt), இதை ஆவணங்கள் தெளிவாகக் குறிப்பிடுகின்றன. DB_PASSWORD-ல் எழுத்துக்கள் மற்றும் எண்களை மட்டும் பயன்படுத்தினால், connection-string escaping தொடர்பான பிழைகளைத் தவிர்க்கலாம்.
படி 4: முதல் முறை இயக்குதல் மற்றும் நிர்வாகி பயனர் கணக்கை உருவாக்குதல்
cd /opt/immich
sudo docker compose up -d
sudo docker compose psசரியான முடிவாக நான்கு containers இயங்க வேண்டும், அவை அனைத்தும் running நிலையில் இருக்க வேண்டும், இறுதியில் healthy நிலையை அடைய வேண்டும்:
NAME STATUS
immich_machine_learning Up (healthy)
immich_postgres Up (healthy)
immich_redis Up (healthy)
immich_server Up (healthy)முதல் up பல gigabytes அளவுள்ள images-ஐ பதிவிறக்கம் செய்யும், எனவே அதற்கு சிறிது நேரம் தேவைப்படும். sudo docker compose logs -f immich-server கட்டளையைப் பயன்படுத்தி முன்னேற்றத்தைக் கவனிக்கவும்; server தயாரானதும், அது port 2283-ல் listening நிலையில் இருப்பதாக logs-ல் காட்டும். இப்போது browser-ல் http://YOUR_SERVER_IP:2283 முகவரியைத் திறக்கவும். முதல்முறை நுழையும்போது Getting Started வழிகாட்டி தோன்றும், நீங்கள் உருவாக்கும் முதல் கணக்கே நிர்வாகி (admin) கணக்காகும். வலுவான கடவுச்சொல்லை அமைக்கவும்; இந்த கணக்கே server அமைப்புகள், பயனர் மேலாண்மை மற்றும் பிற்காலத்தில் உங்களுக்குத் தேவைப்படும் ML configuration ஆகியவற்றைக் கட்டுப்படுத்தும்.
படி 5: மொபைல் செயலி மற்றும் பின்னணி காப்புப்பிரதி (Background backup)
App Store அல்லது Play Store-லிருந்து "Immich" செயலியை நிறுவவும். உள்நுழைவுத் திரையில் அது Server Endpoint URL-ஐக் கேட்கும். திட்டத்துடன் (scheme) கூடிய முழுமையான URL-ஐ உள்ளிடவும், உதாரணமாக https://photos.example.com (செயலியே /api-ஐத் தானாகச் சேர்த்துக்கொள்ளும்). நீங்கள் உருவாக்கிய கணக்கைக் கொண்டு உள்நுழைந்து, செயலியின் Backup திரையைத் திறக்கவும். பாதுகாக்க வேண்டிய ஆல்பங்களைத் தேர்ந்தெடுக்கவும் (பொதுவாக Camera மற்றும் Screenshots), பின்னர் Background backup-ஐ இயக்கவும். iOS-ல் பின்னணி காப்புப்பிரதி OS-ஆல் கட்டுப்படுத்தப்படுகிறது; செயலி முன்னணியில் (foreground) இருக்கும்போது பதிவேற்றம் எப்போதும் நடக்கும், பின்னணியில் நடக்கும் பதிவேற்றங்கள் OS அனுமதிக்கும்போது மட்டுமே நிகழும்.
இங்குதான் பலருக்குச் சிக்கல் ஏற்படுகிறது, எனவே செயலியுடன் போராடுவதற்கு முன்பு படி 6-ஐப் படிக்கவும்.
படி 6: reverse proxy மூலம் HTTPS மற்றும் முழுமையான URL விதி
மொபைல் app-க்கு HTTPS மிகவும் தேவையாக உள்ளது. 2283 port-க்கு முன்னால் reverse proxy அமைத்து, அங்கேயே TLS termination செய்யவும். ஏற்கனவே பல containers இயக்கத்தில் இருந்தால், பல Docker apps-களுக்கான automatic TLS உடன் Traefik மிகவும் ஒழுங்கான தேர்வாகும். ஒரே label block, photos.example.com-ஐ immich-server container-க்கு route செய்து, certificate-ஐ உங்களுக்காகப் பெறும். nginx-ஐ விரும்பினால், Certbot மற்றும் nginx உடன் Let's Encrypt வழிகாட்டி certificate மற்றும் proxy_pass http://127.0.0.1:2283; block-ஐ அமைத்துத் தரும். அந்த proxy அமைந்ததும், அடுத்த service-ஐச் சேர்ப்பது பெரும்பாலும் புதிய subdomain ஒன்றைச் சேர்ப்பதாகவே இருக்கும். இதன் மூலம் Jellyfin-க்கான 90s video store skin ஆன Halcyon போன்ற media front end, அதே server-ல் Immich-க்கு அருகில் இயங்க முடியும். Codex மற்றும் Claude Code-ஐ ஒரே API-க்கு பின்னால் வைக்கும் self-hosted HarnessRouter-க்கும் இதே நடைமுறை பொருந்தும். இது திட்டமிட்டபடி loopback-ல் bind ஆகிறது. Proxy அதற்கு முன்னால் TLS termination செய்த பிறகே இது அணுகக்கூடியதாகும். எனவே subdomain-ஐச் சுட்டிக்காட்டுவதற்கு முன் அதன் default login-ஐ மாற்றவும். இருப்பினும், ஒவ்வொரு container-க்கும் public hostname தேவையில்லை. self-hosted open-kritt security scanner போன்ற admin-only tool-ஐ proxy-யில் சேர்க்காமல் விடுவது நல்லது. அதன் UI-ஐ அரிதாகத் திறக்கும் போது SSH tunnel மூலம் அணுகலாம். சிலவற்றுக்கு HTTP பொருந்தாததால் அவை proxy-ஐத் தவிர்க்கின்றன. self-hosted RustDesk relay server இதற்கான தெளிவான உதாரணமாகும். இது சில raw TCP மற்றும் UDP ports-ல் listening செய்கிறது. எனவே இதற்கு subdomain-க்குப் பதிலாக firewall rules தேவை. Immich-க்கு ஒரு proxy setting முக்கியமானது: upload size limit-ஐ அதிகரிக்கவும், ஏனெனில் phone videos பெரியதாக இருக்கும். nginx-ல் server block-க்குள் client_max_body_size 50000M; அமைக்க வேண்டும். இயல்புநிலை 1 MB வரம்பு video uploads-ஐ 413 Request Entity Too Large பிழையுடன் நிராகரிக்கும்.
செயலி அமல்படுத்தும் விதி: endpoint அணுகக்கூடியதாக இருக்க வேண்டும், நடைமுறையில் அது HTTPS-ஆக இருக்க வேண்டும். http:// endpoints அல்லது port குறிப்பிடப்படாத நேரடி IP முகவரிகள் பயன்படுத்தப்படும்போது, "செயலியால் server-ஐ அடைய முடியவில்லை" என்ற பிழை ஏற்படும்; இது கீழே உள்ள தோல்விப் பிரிவில் விளக்கப்பட்டுள்ளது.
படி 7: External libraries மற்றும் uploads, ஏற்கனவே உள்ள புகைப்படக் கோப்புகளை இறக்குமதி செய்தல்
Immich-க்குள் புகைப்படங்கள் வருவதற்கு இரண்டு வழிகள் உள்ளன, இவை இரண்டும் ஒன்றல்ல.
- Uploads என்பவை Immich-ன் கட்டுப்பாட்டில் உள்ள சொத்துக்கள். App அல்லது web uploader கோப்புகளை
UPLOAD_LOCATION-க்குள் நகலெடுக்கும். Immich அவற்றை மறுபெயரிட, நகர்த்த மற்றும் நீக்க முடியும். - External libraries என்பவை உங்கள் server-ல் ஏற்கனவே உள்ள ஒரு கோப்புறை, பழைய
Picturesகட்டமைப்பு அல்லது NAS export ஆகியவற்றிலிருந்து படிக்க மட்டுமே (read-only) இறக்குமதி செய்யப்படும் கோப்புகள். Immich அவற்றை இருக்கும் இடத்திலேயே குறியீட்டு (index) செய்து timeline-ல் காட்டும், ஆனால் அசல் கோப்புகளை ஒருபோதும் மாற்றவோ அல்லது நீக்கவோ செய்யாது.
ஏற்கனவே உள்ள ஒரு கோப்பு கட்டமைப்பை இறக்குமதி செய்ய, அதை server container-க்குள் read-only முறையில் mount செய்யவும். immich-server:-ன் கீழ் உள்ள docker-compose.yml-ஐத் திருத்தி, ஒரு volume-ஐச் சேர்க்கவும்:
immich-server:
volumes:
- ${UPLOAD_LOCATION}:/data
- /etc/localtime:/etc/localtime:ro
- /srv/photos:/mnt/media/photos:ro:ro, Immich அசல் கோப்புகளை ஒருபோதும் தொட முடியாது என்பதை உறுதி செய்கிறது. sudo docker compose up -d மூலம் container-ஐ மீண்டும் உருவாக்கவும். பின்னர் web UI-ல் உங்கள் avatar → Administration → External Libraries → Create Library என்பதற்குச் செல்லவும். உரிமையாளரான பயனர் கணக்கைத் தேர்ந்தெடுத்து, Folders என்பதன் கீழ் Add என்பதைக் கிளிக் செய்யவும். host path-ஆன /srv/photos-ஐப் பயன்படுத்தாமல், container path-ஆன /mnt/media/photos-ஐ உள்ளிடவும். Scan என்பதைக் கிளிக் செய்யவும். container path-க்கு பதிலாக host path-ஐப் பயன்படுத்துவதுதான் external library அமைப்பில் செய்யப்படும் மிக முக்கியமான தவறு; அவ்வாறு செய்தால் scan எதையும் கண்டறியாது மற்றும் பூஜ்ஜிய சொத்துக்களை மட்டுமே காட்டும்.
படி 8: Immich கோரும் மேம்படுத்தல் ஒழுக்கம்
இதுவே Immich சரியாக இயங்குவதற்கும், பழுதடைவதற்கும் இடையிலான வேறுபாட்டைத் தீர்மானிக்கும் பகுதி. Immich மிக வேகமாகப் புதிய பதிப்புகளை வெளியிடுகிறது; பழைய பதிப்புகளுக்கான பிழைத்திருத்தங்களையோ (backport) அல்லது பதிப்பு இறக்கத்தையோ (downgrade) இது ஆதரிப்பதில்லை. கண்மூடித்தனமாக v3 tag-ஐப் பயன்படுத்துவது இறுதியில் உங்கள் database-ஐப் பாதிக்கும். ஒரு குறிப்பிட்ட பதிப்பைப் பூட்டிவிட்டு (pin), பின் குறிப்புகளை வாசிக்கும் இந்த வழக்கத்தை, உங்கள் server-ல் உள்ள நீண்டகாலமாக இயங்கும் ஒவ்வொரு container-க்கும் பின்பற்றுவது நல்லது. இதனால்தான் ஒரு self-hosted KiroCrew agent, ஒரு குறிப்பிட்ட அறியப்பட்ட நல்ல tag-க்கு பூட்டப்படுகிறது. அடுத்தமுறை restart செய்யும்போது அது தானாகவே மாற அனுமதிக்கப்படுவதில்லை. பின்பற்ற வேண்டிய ஒழுக்கம்:
- பதிப்பைப் பூட்டுங்கள் (Pin a version).
IMMICH_VERSION-ஐv3.0.2போன்ற ஒரு குறிப்பிட்ட tag-க்கு அமைப்பில் வைத்திருங்கள். எப்போதும் புதிய v3.x பதிப்பைப் பதிவிறக்கும்v3போன்ற floating tag-ஐப் பயன்படுத்த வேண்டாம். - ஒவ்வொரு முறையும் மேம்படுத்தும் முன் வெளியீட்டுக் குறிப்புகளை (release notes) வாசியுங்கள். குறிப்பாக database அல்லது vector-extension மாற்றங்கள் போன்ற முக்கியமான மாற்றங்கள் அதில் குறிப்பிடப்பட்டிருக்கும். v3.0 வெளியீடு இதற்கு ஒரு சிறந்த உதாரணம்: அது pgvecto.rs-ஐ முழுமையாக நீக்கிவிட்டது. எனவே, பழைய extension-ல் இருந்தவர்கள், மேம்படுத்தும் முன் VectorChord migration-ஐ (v1.133-ல் அறிமுகப்படுத்தப்பட்டது) முடித்திருக்க வேண்டும்.
- முதலில் database-ஐ backup எடுங்கள் (படி 9). எப்போதும் இதைச் செய்யுங்கள், குறிப்புகளில் database பற்றி குறிப்பிடப்பட்டிருந்தால் இன்னும் கவனமாகச் செய்யுங்கள்.
- புதிய compose file-ஐயும் பெற்றுக்கொள்ளுங்கள்.
IMMICH_VERSION, server மற்றும் ML images-ஐ மட்டுமே பூட்டுகிறது. Postgres image,docker-compose.yml-க்குள் உள்ள digest மூலம் பூட்டப்பட்டுள்ளது. எனவே, புதிய database extension தேவைப்படும் பதிப்பு, புதிய compose file-உடன் வரும். இரண்டு வெளியீட்டு கோப்புகளையும் மீண்டும் பதிவிறக்கி, உங்கள்.envமதிப்புகளை மீண்டும் இட்டு, பின் மேம்படுத்துங்கள். - அதே நேரத்தில் உங்கள் mobile clients-ஐயும் புதுப்பியுங்கள். Server அதன் பொருத்தமான major பதிப்புடன் மட்டுமே தொடர்பு கொள்ளும். App தற்போதைய மற்றும் முந்தைய major பதிப்புகளை ஆதரிக்கும். App-ஐ விட server முந்திச் சென்றால், நீங்கள் அதை update செய்யும் வரை தொலைபேசியில்
Your app major version is not compatible with the server!பிழை காட்டும். எனவே, app-ஐ முதலில் update செய்வது பாதுகாப்பானது.
புதிய கோப்புகளை அமைத்த பிறகு, செயல்படுத்த வேண்டிய கட்டளைகள்:
cd /opt/immich
sudo docker compose pull
sudo docker compose up -d
sudo docker image pruneபடி 9: பேக்கப்கள், ஒரு டேட்டாபேஸ் டம்ப் மற்றும் ஒரிஜினல்கள், பிறகு அதைச் சோதித்தல்
Immich-ன் பேக்கப் என்பது இரண்டு விஷயங்களை உள்ளடக்கியது, இதில் ஒன்றை மட்டும் வைத்திருப்பது பயனற்றது. டேட்டாபேஸ் என்பது ஆல்பம் அமைப்பு, முகங்கள், தேடல் குறியீடுகள் (search indexes) மற்றும் கோப்புகளுக்கான மேப் ஆகியவற்றை வைத்திருக்கிறது. ஒரிஜினல்ஸ் டைரக்டரி என்பது உண்மையான புகைப்படங்களை வைத்திருக்கிறது. இதில் ஒன்றை மட்டும் மீட்டெடுத்தால், அமைப்பு இல்லாத புகைப்படங்கள் அல்லது விடுபட்ட கோப்புகளைக் காட்டும் காலியான ஷெல் மட்டுமே கிடைக்கும்.
Postgres கன்டெய்னருக்கு உள்ளே இருந்து pg_dump மூலம் டேட்டாபேஸை டம்ப் செய்யவும். முழு கிளஸ்டரையும் அல்ல, குறிப்பாக immich டேட்டாபேஸை மட்டும் டம்ப் செய்யவும்:
sudo docker exec -t immich_postgres pg_dump --clean --if-exists \
--dbname=immich --username=postgres | gzip > /opt/immich/immich-db-$(date +%F).sql.gzபிறகு UPLOAD_LOCATION, முழு /opt/immich/library ட்ரீ, குறிப்பாக அதன் library/, upload/ மற்றும் profile/ சப்-ஃபோல்டர்களை restic, rsync அல்லது borg மூலம் மற்றொரு மெஷினுக்கு அல்லது ஆப்ஜெக்ட் ஸ்டோரேஜுக்கு பேக்கப் எடுக்கவும். முதலில் டேட்டாபேஸையும், இரண்டாவதாக கோப்புகளையும் பேக்கப் எடுக்கவும். அப்போதுதான், கோப்பு பேக்கப்பில் இன்னும் நகலெடுக்கப்படாத புகைப்படத்தை டேட்டாபேஸ் டம்ப் குறிப்பிடாது. எக்ஸ்டர்னல் லைப்ரரிகளை அவற்றின் உண்மையான மூலத்திலிருந்து தனித்தனியாக பேக்கப் எடுக்கவும்; Immich அவற்றை நிர்வகிப்பதில்லை.
இப்போது அனைவரும் தவிர்க்கும் பகுதி: மீட்டெடுப்பைச் சோதித்தல் (test the restore). மீட்டெடுப்பு என்பது இதுவரை தொடங்கப்படாத ஒரு புதிய ஸ்டேக்-ல் இயங்க வேண்டும். அந்த Postgres இமேஜின் வெக்டர் எக்ஸ்டென்ஷன், டம்புடன் இணக்கமாக இருக்க வேண்டும். இதனால்தான் DB இமேஜ் டேக்-ஐ ஒருபோதும் மாற்றக்கூடாது. அதே compose மற்றும் .env உள்ள ஒரு புதிய மெஷினில், பழைய ஸ்டேட்களை அழித்துவிட்டு, டேட்டாபேஸை மட்டும் கொண்டு வந்து, பிறகு டம்பை லோட் செய்யவும்:
cd /opt/immich
sudo docker compose down -v
sudo docker compose pull
sudo docker compose create
sudo docker start immich_postgres
sleep 10
gunzip --stdout immich-db-2026-07-15.sql.gz |
sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" |
sudo docker exec -i immich_postgres psql --dbname=immich --username=postgres --single-transaction --set ON_ERROR_STOP=on
sudo docker compose up -dVectorChord டேட்டாபேஸில் search_path-ஐ sed மூலம் ரீரைட் செய்வது கட்டாயமாகும். இதைச் செய்யாவிட்டால் மீட்டெடுப்பு பாதியிலேயே நின்றுவிடும். உங்கள் ஒரிஜினல் கோப்புகள் சரியான இடத்தில் இருக்கும்போது ஸ்டேக் மீண்டும் இயங்கத் தொடங்கினால், வெப் UI-ஐத் திறக்கவும்: உங்கள் புகைப்படங்களும் ஆல்பங்களும் அங்கு இருந்தால், உங்கள் பேக்கப் சரியாக வேலை செய்கிறது என்று அர்த்தம். இதை நீங்கள் ஒருபோதும் சோதித்ததில்லை என்றால், உங்களிடம் பேக்கப் இல்லை, வெறும் நம்பிக்கை மட்டுமே உள்ளது.
தோல்வி முறைகள் மற்றும் நீங்கள் காணும் செய்திகள்
ML container OOM-killed ஆகிறது. sudo docker compose logs immich-machine-learning திடீரென முடிவடைகிறது, docker compose ps அதை Restarting என்று காட்டுகிறது, மேலும் exit code 137 ஆக உள்ளது. sudo dmesg | grep -i oom இதை உறுதிப்படுத்துகிறது: Out of memory: Killed process ... (python3). தேடல் மற்றும் முக அங்கீகாரப் பணிகள் (face jobs) முடங்கிவிடும். மாடல்களுக்குத் தேவையான RAM போதாததே இதற்குக் காரணம். வரிசைப்படி தீர்வுகள்: swap-ஐச் சேர்க்கவும் (படி 1); VPS-க்கு கூடுதல் RAM வழங்கவும்; அல்லது, வேறு வழியே இல்லை எனில், Administration → Settings → Machine Learning Settings பகுதிக்குச் சென்று Smart Search மற்றும் Facial Recognition-ஐ முடக்குவதன் மூலம் ML-ஐ நிறுத்தவும். இதனால் பேக்கப்கள் மற்றும் ஆல்பங்கள் இருக்கும், ஆனால் உள்ளடக்கத்தின் அடிப்படையில் தேடும் வசதியை இழப்பீர்கள். compose கோப்பிலிருந்து immich-machine-learning service-ஐ நீக்குவதும் இதே விளைவைத் தரும்.
மேம்படுத்தலுக்குப் பிறகு Postgres தொடங்க மறுக்கிறது. சர்வர் லாக் The database currently has VectorChord 0.5.3 activated, but the Postgres instance only has 0.4.2 available. This most likely means the extension was downgraded. போன்ற வரியுடன் சுழல்கிறது, அல்லது பழைய ஸ்டேக்குகளில் The pgvecto.rs extension is not available in this Postgres instance. என்று காட்டுகிறது. உங்கள் தரவு மேம்படுத்தப்பட்டதை விட, டேட்டாபேஸ் இமேஜின் extension பதிப்பு பழையதாக இருப்பதே இதற்குக் காரணம். பெரும்பாலும் இமேஜ் டேக்-ஐ (image tag) கைமுறையாக மாற்றியதாலோ அல்லது புதிய டம்பை (dump) பழைய இமேஜில் மீட்டெடுத்ததாலோ இது நிகழ்கிறது. இதற்கு, பொருத்தமான Postgres இமேஜைப் பயன்படுத்துவது, உங்கள் டேட்டாபேஸிற்குப் பொருந்தும் ரிலீஸிலிருந்து compose கோப்பை எடுப்பது, downgrade செய்யாமல் இருப்பது மற்றும் இணக்கமான இமேஜில் மட்டும் மீட்டெடுப்பது ஆகியவையே தீர்வாகும்.
மொபைல் ஆப் சர்வரை அடைய முடியவில்லை. URL-ஐ உள்ளிட்ட பிறகு லாகின் திரையில் connection error / Server is not reachable என்று காட்டுகிறது. இதற்கு மூன்று காரணங்கள் இருக்கலாம்: நீங்கள் http:// என்று தட்டச்சு செய்திருக்கலாம், ஆனால் ப்ராக்ஸி https://-ஐ மட்டுமே வழங்குகிறது; நீங்கள் நேரடியாக backend-உடன் இணைந்திருக்கலாம், ஆனால் போர்ட்டை (port) குறிப்பிடாததால் அது example.com:2283-க்கு பதிலாக example.com (port 443) மூலம் முயன்றிருக்கலாம்; அல்லது ரிவர்ஸ் ப்ராக்ஸி /api-ஐ ஃபார்வர்ட் செய்யவில்லை. முழுமையான https://photos.example.com URL-ஐ உள்ளிட்டு, முதலில் மொபைல் பிரவுசரில் அது லோட் ஆகிறதா என்பதை உறுதிப்படுத்துவதன் மூலம் இதைச் சரிசெய்யவும். பிரவுசரில் வேலை செய்து ஆப்பில் வேலை செய்யவில்லை என்றால், ப்ராக்ஸி பாதையை (path) நீக்குகிறது அல்லது சான்றிதழ் (certificate) சுய-கையொப்பமிடப்பட்டது (self-signed) என்று அர்த்தம்; நம்பகத்தன்மையற்ற சான்றிதழ்களை ஆப் நிராகரிக்கும்.
இறக்குமதியின் போது டிஸ்க் நிறைந்துவிடுதல். அப்லோடுகள் தோல்வியடைகின்றன, தம்ப்நெயில்கள் (thumbnails) காலியாகின்றன, மற்றும் லாக் கோப்புகள் ENOSPC: no space left on device அல்லது Postgres-லிருந்து could not extend file ... No space left on device என்று காட்டுகின்றன. df -h கட்டளை UPLOAD_LOCATION வால்யூம் 100% நிறைந்துள்ளதைக் காட்டுகிறது. பெரிய லைப்ரரியை இறக்குமதி செய்வதற்கு முன்பே டிஸ்க் அளவைத் தீர்மானிக்க வேண்டியதன் அவசியம் இதுதான். பெரிய வால்யூமை இணைத்து, ஸ்டேக்கை நிறுத்தி, UPLOAD_LOCATION-ஐ அதற்கு நகர்த்தி, .env-ஐப் புதுப்பித்து, மீண்டும் தொடங்குவதன் மூலம் இதைச் சரிசெய்யலாம். அல்லது உங்கள் சேவை வழங்குநர் அனுமதித்தால் இருக்கும் டிஸ்க்கை விரிவாக்கலாம். டிஸ்க் நிறைந்தால் Postgres முடங்கக்கூடும், எனவே கோப்பு சிதைந்துவிட்டது என்று கருதும் முன், இடத்தை காலி செய்துவிட்டு டேட்டாபேஸ் கன்டெய்னரை ரீஸ்டார்ட் செய்யவும்.
FAQ
Immich-க்கு எவ்வளவு RAM மற்றும் disk தேவை?
Immich-ன் அதிகாரப்பூர்வ தேவைகள் குறைந்தபட்சம் 6 GB RAM மற்றும் பரிந்துரைக்கப்படுவது 8 GB ஆகும். சிறிய library-களுக்கு 4 GB RAM மற்றும் swap பயன்படுத்தலாம். எப்படியிருப்பினும் swap-ஐ configure செய்யவும், ஏனெனில் machine-learning container இயங்கும்போது RAM பயன்பாடு திடீரென அதிகரிக்கும். Disk-ஐப் பொறுத்தவரை, உங்கள் முழு library அளவுடன், thumbnails மற்றும் previews-க்காக கூடுதலாக 10–20% இடத்தை ஒதுக்க வேண்டும். இதை local storage-ல் மட்டுமே வைக்கவும்; Postgres data directory-ஐ ஒருபோதும் network share-ல் வைக்க வேண்டாம். நீங்கள் வேறு என்னென்ன சேவைகளை இயக்கலாம் என்று முடிவு செய்துகொண்டிருந்தால், 2026-ல் எவற்றை self-host செய்வது என்பதற்கான வழிகாட்டி Immich-ன் பயன்பாட்டை மற்ற சேவைகளுடன் ஒப்பிட்டுக் காட்டுகிறது.
GPU இல்லாமலேயே என்னால் Immich-ஐ இயக்க முடியுமா?
ஆம். Machine-learning container CPU-விலேயே சிறப்பாக இயங்கும். GPU என்பது smart-search indexing மற்றும் சரியான image variant-ஐப் பயன்படுத்தினால் video transcoding ஆகியவற்றை மட்டுமே வேகப்படுத்தும். CPU-வில், பெரிய library-களுக்கான ஆரம்பக்கட்ட index செயல்முறை பின்னணியில் பல மணிநேரம் ஆகலாம், ஆனால் இது backups அல்லது browsing-ஐத் தடுக்காது. உங்கள் கணினியில் ML-ஐ இயக்க போதிய வசதி இல்லை என்றால், admin settings-ல் Smart Search மற்றும் Facial Recognition-ஐ முடக்கிவிட்டு மற்ற அம்சங்களை மட்டும் பயன்படுத்தலாம்.
Immich-ஐ எவ்வாறு பாதுகாப்பாக upgrade செய்வது?
IMMICH_VERSION-ஐ v3.0.2 போன்ற ஒரு குறிப்பிட்ட tag-க்கு pin செய்யவும். ஒவ்வொரு upgrade-க்கு முன்பும் release notes-ஐப் படிக்கவும், முதலில் database-ஐ backup எடுக்கவும். Postgres image IMMICH_VERSION மூலம் இல்லாமல் docker-compose.yml-க்குள் pin செய்யப்பட்டுள்ளதால், உங்கள் இலக்கு release-லிருந்து compose file மற்றும் example.env ஆகிய இரண்டையும் மீண்டும் download செய்து, உங்கள் மதிப்புகளை மீண்டும் உள்ளிட்டு, பின் docker compose pull && docker compose up -d-ஐ இயக்கவும். Version-ஐ தானாகவே update ஆக விடாதீர்கள்; Immich-ல் அவ்வப்போது பெரிய மாற்றங்கள் (breaking changes) வரும், மேலும் பழைய பதிப்பிற்கு திரும்புவதை (downgrade) இது ஆதரிக்காது.
எவற்றை நான் backup எடுக்க வேண்டும்?
இரண்டு விஷயங்களைச் சேர்த்து backup எடுக்க வேண்டும்: immich database-ன் pg_dump மற்றும் முழுமையான UPLOAD_LOCATION originals directory. Database-ல் albums, faces மற்றும் asset-to-file mapping தகவல்கள் இருக்கும்; directory-ல் உண்மையான புகைப்படங்கள் இருக்கும். ஒரு restore செய்ய இவை இரண்டும், மற்றும் compatible vector extension கொண்ட database image-ம் தேவை. முதலில் database dump-ஐயும், பிறகு file copy-யையும் செய்யவும். ஒருமுறை ஒரு தனி கணினியில் restore செய்து சோதிக்கவும்; சோதிக்கப்படாத backup, backup-ஆகக் கருதப்படாது.
ஏற்கனவே உள்ள எனது photo folder-ஐ எவ்வாறு import செய்வது?
அந்த folder-ஐ read-only முறையில் immich-server container-ல் கூடுதல் volume-ஆக (உதாரணத்திற்கு - /srv/photos:/mnt/media/photos:ro) mount செய்யவும். Container-ஐ மீண்டும் உருவாக்கி, பின் Administration → External Libraries பகுதிக்குச் சென்று ஒரு library-ஐ உருவாக்கி, அதில் container path-ஆன /mnt/media/photos-ஐச் சேர்க்கவும். Immich அந்த இடத்திலேயே கோப்புகளை index செய்யும், அவற்றை மாற்றவோ அல்லது நீக்கவோ செய்யாது. பொதுவாகச் செய்யும் தவறு என்னவென்றால், container path-க்கு பதிலாக host path-ஐ உள்ளிடுவதுதான்; இதனால் scan எதையும் கண்டறியாது.