[{"data":1,"prerenderedAt":200},["ShallowReactive",2],{"seo-verification":3,"blog-host-immich-on-your-own-vps-en":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"id":7,"slug":8,"slugs":9,"title":12,"excerpt":13,"readTime":14,"views":15,"isPinned":16,"publishedAt":17,"category":18,"categories":23,"featuredImage":25,"bgImage":26,"posterImage":27,"relatedSolution":28,"intro":30,"sections":31,"ctaTitle":147,"ctaBody":148,"ctaButton":149,"ctaUrl":150,"relatedPosts":151},82,"host-immich-on-your-own-vps",{"fr":10,"en":8,"ar":11},"heberger-immich","استضافة-immich-على-خادمك-الافتراضي-الخاص-vps","Host Immich on Your Own VPS","Host Immich on your VPS: a self-hosted alternative to Google Photos with mobile backup, facial recognition and SSL via Docker. Includes v3 migration guide.",7,0,false,"2026-03-30T00:00:00+00:00",{"id":14,"name":19,"slug":20,"color":21,"icon":22},"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[24],{"id":14,"name":19,"slug":20,"color":21,"icon":22},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-immich-poster.svg",{"categorySlug":20,"appSlug":29},"immich","Immich is a self-hosted alternative to Google Photos, with automatic backup from mobile, facial recognition and smart AI-powered search. Installing it on your own VPS means bringing thousands of personal photos back out of ad-driven clouds, while keeping a modern, smooth experience. With version 3.0.0, the vector search architecture has been simplified: `pgvecto.rs` has been replaced by PostgreSQL's native HNSW indexes, which makes updates easier — provided you follow the mandatory migration path.",[32,36,46,49,71,74,77,80,95,98,101,119],{"type":33,"title":34,"body":35},"h2","Why self-host Immich on a VPS","Your photos are among the most sensitive data you entrust to a cloud: faces, places, habits, geolocation. Immich reproduces the Google Photos experience, mobile apps included, but on infrastructure you own. Since version 3.0.0, its stack has been streamlined: the third-party `pgvecto.rs` extension has been removed in favour of PostgreSQL's native HNSW indexes (`pgvector`), reducing dependencies and simplifying database backups. A dedicated VPS lets you isolate this resource-hungry ML service, size the storage to fit your photo library, and prevent your pictures from being used to train third-party models. You remain in control of encryption, backups and access.",{"type":37,"title":38,"items":39},"ul","What self-hosting Immich brings",[40,41,42,43,44,45],"Automatic backup from iOS and Android as soon as a photo is taken, like a private cloud.","Facial recognition and semantic search run on your server, with no data sent to a third party.","Capacity equal to your VPS disk: no imposed quota, no per-GB billing.","Album sharing via a secure link that you control and can revoke at any time.","Multi-user support: each member of the household or team has their own isolated library.","EXIF metadata, maps and timelines kept locally, with no advertising exploitation.",{"type":33,"title":47,"body":48},"Hardware and software requirements","Immich is the most demanding in this series because of its machine learning service. Plan for at least 4 GB of RAM, but 6 to 8 GB are recommended if facial recognition processes a large photo library. 2 to 4 vCPUs let you handle the initial indexing without freezing the interface. Storage is the key factor: plan generously, as a family library quickly exceeds 100 GB; a VPS with expandable disk is ideal. On the software side: Docker and `docker compose` v2, a domain (`photos.yourcompany.com`), and enough swap space to absorb the ML model's spikes during the first import.",{"type":50,"title":51,"steps":52},"steps","Deploy Immich step by step",[53,56,59,62,65,68],{"title":54,"body":55},"Prepare the VPS and storage","Update the system, install Docker, then create a dedicated mount point for media, for example `\u002Fmnt\u002Fphotos`, separate from the system disk. Enable at least 2 GB of swap for the machine learning service.",{"title":57,"body":58},"Retrieve the official compose file and the .env","Download the `docker-compose.yml` and the `example.env` file from the Immich repository with `wget`. Rename it to `.env`, then set `UPLOAD_LOCATION=\u002Fmnt\u002Fphotos`, the database password and `DB_DATA_LOCATION` to a persistent volume.",{"title":60,"body":61},"Understand the three services (v3+)","Since version 3.0.0, the stack starts `immich-server`, `immich-machine-learning` and `database` (PostgreSQL with `pgvector`). Redis is no longer a separate service — it is embedded in the Immich server. The `pgvecto.rs` extension has been removed: do not use the old database image `ghcr.io\u002Fimmich-app\u002Fpostgres`, which has been replaced by the official PostgreSQL 17 image with `pgvector`.",{"title":63,"body":64},"Launch the stack and create the administrator","Run `docker compose up -d` and wait for the large ML images to download. Open port `2283` internally, then create the administrator account via the web wizard before inviting other users.",{"title":66,"body":67},"Secure with a reverse proxy and SSL","Place Caddy in front of the server: `photos.yourcompany.com { reverse_proxy immich-server:2283 }`. Increase the proxy's maximum upload size (`client_max_body_size` on Nginx) because videos can be large, otherwise mobile uploads fail.",{"title":69,"body":70},"Configure the mobile app","Install Immich from the App Store or the Play Store, enter `https:\u002F\u002Fphotos.yourcompany.com` as the server URL, sign in, then enable automatic camera roll backup to continuously replicate your new photos.",{"type":72,"body":73},"tip","During the first bulk import, run the generation of thumbnails and ML embeddings during off-peak hours and monitor the RAM with `docker stats`. If the machine learning service becomes saturated, you can temporarily point it to the lightest model in the settings, then switch back to a more accurate model once the initial indexing is finished. This prevents the VPS from collapsing under the load of the very first scan.",{"type":72,"title":75,"body":76},"Tight on RAM? Run Immich without the AI container","If your VPS has only 2-4 GB of RAM, drop the immich-machine-learning service from the compose file. Immich starts fine without it: mobile backup, the timeline, albums, sharing, the map view and manual search all keep working — you only lose automatic face recognition and natural-language smart search. Add the machine-learning container back later when you upgrade to a larger VPS, and Immich will index your existing library for AI search at that point.",{"type":33,"title":78,"body":79},"Troubleshoot machine learning errors","The `immich-machine-learning` container can silently become unreachable for two distinct reasons: a Docker network misconfiguration or a silent out-of-memory crash. Typical symptoms are log entries such as `Machine learning request to 'http:\u002F\u002Fimmich-machine-learning:3003' failed: fetch failed` on the server, or stalled jobs like `Unable to run job handler (AssetDetectFaces)`. Diagnosing the root cause takes under five minutes.",{"type":50,"title":81,"steps":82},"Diagnose and fix the ML service",[83,86,89,92],{"title":84,"body":85},"Check the Docker network","Run `docker network inspect immich_default` and check whether both `immich-server` and `immich-machine-learning` appear in the `Containers` list. If one is missing, review the `networks` field in your `docker-compose.yml`: both services must reference the same network.",{"title":87,"body":88},"Detect a silent OOM kill","Run `dmesg | grep -i oom` to see whether the kernel killed a process. Each OOM kill entry names the container and the amount of memory requested. An empty result does not rule out an OOM if the system has rebooted since the incident.",{"title":90,"body":91},"Inspect the ML container logs","Run `docker logs immich-machine-learning --tail 50` to review the last lines. A clean shutdown or a model-loading error will show up here more clearly than a silent kernel OOM kill.",{"title":93,"body":94},"Restart the ML service","If the network is correct and RAM is sufficient, restart only this service with `docker compose restart immich-machine-learning` and watch whether jobs resume within the next few minutes using `docker logs -f immich-machine-learning`.",{"type":72,"title":96,"body":97},"VPS ≤ 2 GB: disable machine learning","The ML service stacks CLIP, face recognition and OCR, totalling roughly 2 GB of RAM at peak. On a VPS with only 2 GB, add `MACHINE_LEARNING_ENABLED=false` to your `.env` file and restart the stack with `docker compose up -d`. Mobile backup, albums and manual search continue to work normally. Face recognition and AI search will be available as soon as you move to a VPS with 4 GB of RAM or more.",{"type":33,"title":99,"body":100},"Migrating from v2.4.x to v3.0.0: the mandatory path","Immich 3.0.0 is an architectural breaking change: `pgvecto.rs` is removed and vector indexes are rebuilt natively by `pgvector` (HNSW). This rebuild is **blocking** — the database recalculates all vectors in your photo library before the server comes back online, which can take anywhere from a few minutes to several hours depending on library size. Before jumping directly to v3, you must first go through version **1.132.3**: this is the pivot point that prepares the index migration. Starting from an earlier version without passing through this milestone causes a database migration error and prevents the server from starting.",{"type":50,"title":102,"steps":103},"Upgrade procedure v2.4.x → v3",[104,107,110,113,116],{"title":105,"body":106},"Back up the database before anything else","Before any upgrade, export the database with `docker exec -t immich_postgres pg_dumpall -c -U postgres > backup_immich_before_v3.sql`. Also keep your `UPLOAD_LOCATION` folder. A failed HNSW migration halfway through without a backup leaves the database in an inconsistent state.",{"title":108,"body":109},"First upgrade to version 1.132.3","Edit `docker-compose.yml` to use version `v1.132.3` (exact tag) on both `immich-server` and `immich-machine-learning`. Run `docker compose pull && docker compose up -d`. Let the server start completely and verify that background jobs resume without errors in `docker logs immich-server`.",{"title":111,"body":112},"Switch to the official PostgreSQL image (v3 only)","v3 uses the official PostgreSQL 17 image with `pgvector`, not the custom `ghcr.io\u002Fimmich-app\u002Fpostgres` image. In the `docker-compose.yml` provided with v3, the `database` service points to the official `postgres:17-bookworm` image with the `pgvector` extension. Use the official v3 compose file and do not reuse the v2 file.",{"title":114,"body":115},"Upgrade to v3.0.0 and wait for HNSW reindexation","Replace the tags with `v3.0.0` and pull the images: `docker compose pull && docker compose up -d`. The HNSW migration starts automatically on first launch. During this phase, the server remains available but smart search and facial recognition are suspended. Follow progress in `docker logs -f immich-server`: a `Finished migration` line confirms completion. On a library of 50,000 photos, expect between 10 and 30 minutes depending on the number of vCPUs allocated.",{"title":117,"body":118},"Verify background jobs after migration","Open the web interface, go to **Administration → Jobs** and confirm that no jobs are in an error state. If any `Smart Search` or `Face Detection` tasks are stalled, restart them from the interface. The new HNSW vectors are computed once: subsequent imports are indexed normally.",{"type":120,"title":121,"headers":122,"rows":126},"comparison","Immich v2 vs v3: what changes in practice",[123,124,125],"Aspect","v2.4.x","v3.0.0",[127,131,135,139,143],[128,129,130],"Vector extension","`pgvecto.rs` (custom image)","`pgvector` native HNSW (official PostgreSQL)",[132,133,134],"Docker services","4 (server, ML, Redis, DB)","3 (server, ML, DB — Redis embedded)",[136,137,138],"Direct upgrade from v2","No — must go through v1.132.3","Yes from v1.132.3",[140,141,142],"Database backup","Tied to custom image","Compatible with standard `pg_dump`",[144,145,146],"Reindexation on start","No","Yes (blocking, duration depends on size)","Take back control of your photo library","The ServOrbit Cloud VPS provides the RAM, expandable storage and Docker ready for Immich, its machine learning service and its vector database. Back up your photos continuously on a server that belongs to you alone.","Deploy Immich on a Cloud VPS","\u002Fvps-cloud",[152,168,184],{"id":153,"slug":154,"slugs":155,"title":158,"excerpt":159,"readTime":160,"views":15,"isPinned":16,"publishedAt":161,"category":162,"categories":163,"featuredImage":25,"bgImage":26,"posterImage":165,"relatedSolution":166},71,"hosting-nextcloud-on-your-own-vps",{"fr":156,"en":154,"ar":157},"heberger-nextcloud","استضافة-nextcloud-على-خادمك-الـvps-الخاص","Self-Host Nextcloud on VPS: Complete Guide, NC 34 and Security","Deploy Nextcloud 34.0.2 on your VPS with Docker and Redis. Complete guide: missing NC 34.0.0 apps, PostgreSQL oc_filecache_extended constraint, and 2FA CVEs.",12,"2026-04-10T00:00:00+00:00",{"id":14,"name":19,"slug":20,"color":21,"icon":22},[164],{"id":14,"name":19,"slug":20,"color":21,"icon":22},"\u002Fblog\u002Fcovers\u002Fheberger-nextcloud-poster.svg",{"categorySlug":20,"appSlug":167},"nextcloud",{"id":169,"slug":170,"slugs":171,"title":174,"excerpt":175,"readTime":176,"views":15,"isPinned":16,"publishedAt":177,"category":178,"categories":179,"featuredImage":25,"bgImage":26,"posterImage":181,"relatedSolution":182},72,"hosting-ghost-on-your-own-vps",{"fr":172,"en":170,"ar":173},"heberger-ghost","استضافة-ghost-على-خادمك-الـvps-الخاص","Hosting Ghost on your own VPS: complete 2026 guide","Deploy Ghost v6 on your VPS with Caddy, MySQL, Ghost CLI and Stripe Tax: installation, TLS reverse proxy, updates and troubleshooting common startup errors.",9,"2026-04-09T00:00:00+00:00",{"id":14,"name":19,"slug":20,"color":21,"icon":22},[180],{"id":14,"name":19,"slug":20,"color":21,"icon":22},"\u002Fblog\u002Fcovers\u002Fheberger-ghost-poster.svg",{"categorySlug":20,"appSlug":183},"ghost",{"id":185,"slug":186,"slugs":187,"title":190,"excerpt":191,"readTime":192,"views":15,"isPinned":16,"publishedAt":193,"category":194,"categories":195,"featuredImage":25,"bgImage":26,"posterImage":197,"relatedSolution":198},73,"host-wordpress-on-your-own-vps",{"fr":188,"en":186,"ar":189},"heberger-wordpress","استضافة-wordpress-على-خادم-vps-الخاص-بك","Host WordPress on your own VPS","Host WordPress on your VPS for maximum performance and control: Docker, MariaDB, caching, reverse proxy and SSL.",3,"2026-04-08T00:00:00+00:00",{"id":14,"name":19,"slug":20,"color":21,"icon":22},[196],{"id":14,"name":19,"slug":20,"color":21,"icon":22},"\u002Fblog\u002Fcovers\u002Fheberger-wordpress-poster.svg",{"categorySlug":20,"appSlug":199},"wordpress",1787580999440]