[{"data":1,"prerenderedAt":241},["ShallowReactive",2],{"seo-verification":3,"blog-size-a-vps-for-jellyfin-navidrome-and-immich-en":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-size-a-vps-for-jellyfin-navidrome-and-immich-en",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":180,"ctaBody":181,"ctaButton":182,"ctaUrl":183,"relatedPosts":184},513,"size-a-vps-for-jellyfin-navidrome-and-immich",{"fr":12,"en":10,"ar":13,"es":14},"stack-mediatheque-vps-jellyfin-navidrome-immich","تحجيم-خادم-vps-لتشغيل-jellyfin-وnavidrome-وimmich","dimensionar-un-vps-para-jellyfin-navidrome-e-immich","Size a VPS for Jellyfin, Navidrome and Immich","RAM, vCPU and disk per service to fit Jellyfin, Navidrome, Immich and Audiobookshelf on a single VPS, with one Caddy proxy and a backup plan.",13,0,false,"2026-10-27T00:00:00+00:00","2026-10-27T23:58:39+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fstack-mediatheque-vps-jellyfin-navidrome-immich-poster.svg",{"categorySlug":34,"appSlug":35},"collaboration-productivity","immich","Putting movies, music, photos and audiobooks on a single server looks easy, until Immich starts indexing your faces and memory collapses. A sizing mistake costs you both ways: a plan that is too tight and restarts in a loop, or a plan that is too large and paid for every month. This guide puts numbers on each service, sets the rule that avoids video transcoding, budgets disk per library and assembles everything behind a single reverse proxy. It ends with a table that maps your library profile to a VPS plan.",[38,42,51,54,89,92,95,126,129,138,141,150,173,177],{"type":39,"title":40,"body":41},"h2","Why one machine for four libraries","Leaving Plex, Google Photos, Spotify or Audible almost always leads to the same layout: one service per media type, each on its own small server or on the living-room NAS. The result is four updates to follow, four certificates and four backups to plan. A single VPS brings this down to one entry point, one Docker network and one backup plan.\n\nThe hard part is not installation, which our guides on \u003Ca href=\"\u002Fen\u002Fblog\u002Fhost-immich-on-your-own-vps\">Immich\u003C\u002Fa>, \u003Ca href=\"\u002Fen\u002Fblog\u002Fhost-jellyfin-on-your-own-vps\">Jellyfin\u003C\u002Fa>, \u003Ca href=\"\u002Fen\u002Fblog\u002Fnavidrome-self-host-your-music-server-on-vps\">Navidrome\u003C\u002Fa> and \u003Ca href=\"\u002Fen\u002Fblog\u002Faudiobookshelf-self-hosted-audiobook-and-podcast-server-on-vps\">Audiobookshelf\u003C\u002Fa> already cover. The hard part is sizing: Immich and video transcoding overwhelm a small server, while Navidrome and Audiobookshelf go almost unnoticed. This article answers a single question: which machine, for which library.",{"type":43,"title":44,"items":45},"ul","What you gain by putting it all together",[46,47,48,49,50],"**One entry point** — one reverse proxy, one subdomain per service, certificates obtained and renewed automatically.","**Shared memory** — Navidrome and Audiobookshelf use little, and the memory one leaves free helps the other's peaks.","**A single backup plan** — four configuration folders, one PostgreSQL dump, one script.","**Vertical scaling** — when the library grows, you increase RAM, vCPU and disk on the same VPS without reinstalling the stack.","**Full root access** — you choose the distribution, tune the kernel and install whatever the stack requires.",{"type":39,"title":52,"body":53},"The memory and CPU budget, service by service","Only the Immich and Jellyfin figures come from official documentation; the other lines are starting settings, to be measured on your own machine. Take your readings once the stack is running with `docker stats --no-stream`, then adjust.\n\nImmich is the dominant item. Its documentation gives 6 GB of RAM as a minimum and 8 GB recommended, 2 cores minimum and 4 recommended. It also states that on a 4 GB machine Immich can run with machine learning disabled, and that the PostgreSQL database needs at least 2 GB if you set Docker resource limits. Since version 3, the machine learning image on amd64 requires the x86-64-v2 instruction-set level: check that the plan you choose exposes it.\n\nOn the CPU side, it is the initial indexing that saturates: face detection and semantic search run on every available core for hours, then calm returns. The other services stay almost invisible as long as you do not transcode.",{"type":55,"title":56,"headers":57,"rows":61},"comparison","Reservation budget per service",[58,59,60],"Service","RAM to reserve","What makes it grow",[62,66,70,73,77,81,85],[63,64,65],"Caddy (reverse proxy)","Starting setting: 100 MB, to measure","Almost nothing: the number of subdomains barely changes it",[67,68,69],"Navidrome","Starting setting: 250 MB, to measure","Scans of a large library and clients that request audio transcoding",[71,68,72],"Audiobookshelf","Automatically downloaded podcasts and metadata scans",[74,75,76],"Jellyfin on direct play","Starting setting: 1 GB, to measure (Jellyfin documents 4 GB as possibly enough for a headless Linux server, 8 GB recommended on an average deployment)","Library scans and images generated on the initial pass",[78,79,80],"Jellyfin with software transcoding","No official per-stream figure: measure with a test stream","Every stream converted in parallel, especially HEVC or burned-in subtitles",[82,83,84],"Immich (server, ML, PostgreSQL, Valkey)","6 GB minimum, 8 GB recommended","Initial indexing, face recognition, semantic search",[86,87,88],"Full stack, single machine","At least 8 GB (Immich's recommended value), 16 GB for margin: an estimate to check","Immich jobs running while a film is being transcoded",{"type":39,"title":90,"body":91},"The disk budget: calculate in GB before choosing","Disk is the first ceiling of a multimedia VPS, and it can be calculated. For video, the formula is: bitrate in Mb\u002Fs multiplied by duration in seconds, divided by 8. A two-hour film at 8 Mb\u002Fs weighs about 7 GB, at 4 Mb\u002Fs about 3.6 GB. For music, a 45-minute album in MP3 at 320 kb\u002Fs is about 110 MB; in FLAC, count 300 to 500 MB instead. A 10-hour audiobook at 64 kb\u002Fs weighs close to 290 MB.\n\nFor photos, start from 3 MB per shot: 10,000 photos therefore take about 30 GB, phone videos on top. Immich's documentation adds that thumbnails and transcoded videos grow the photo library by 10 to 20% on average.\n\nThen separate what must be fast from what must be large. Immich's PostgreSQL database typically weighs 1 to 3 GB, must live on a local SSD and never on a network share. The same goes for the configuration of Jellyfin and Audiobookshelf: Audiobookshelf explicitly advises against placing its configuration folder on a network share, at the risk of corrupting its SQLite database. The media themselves can go on a separate, larger volume.",{"type":39,"title":93,"body":94},"Do not transcode: the rule that protects a small VPS","Jellyfin distinguishes four playback modes, from lightest to heaviest: direct play, remux, direct stream and transcode. Its documentation describes direct play as delivering the file without modification, with almost no additional load on the server; video transcoding is the most expensive mode.\n\nWithout a graphics card, every video transcode goes through the CPU, and Jellyfin's documentation reminds that a GPU is always recommended for this. It also warns that HEVC, VP9 and AV1 can be very demanding in software decoding, and that converting HDR content to SDR (tone-mapping) always uses a software encoder without a GPU.\n\nThe practical rule comes down to three actions. Store your films in a format your devices play natively, typically H.264 in MP4 or MKV. Convert problem files once, upstream, rather than on every playback. And use Jellyfin's per-user setting to forbid audio and video transcoding for accounts that do not need it. To check that a stream costs nothing, start a playback and watch the dashboard: the playback type is shown there, and the CPU should stay at rest.",{"type":96,"title":97,"steps":98},"steps","Assemble the stack: one network, one proxy, one subdomain per service",[99,102,105,108,111,114,117,120,123],{"title":100,"body":101},"Create the folders, permissions and shared network","Separate media, photos and configurations, give ownership to user 1000 and create the network all containers will share:\n\n`sudo mkdir -p \u002Fsrv\u002Fmedia\u002Fvideo \u002Fsrv\u002Fmedia\u002Fmusic \u002Fsrv\u002Fmedia\u002Faudiobooks \u002Fsrv\u002Fphotos \u002Fsrv\u002Fstack\u002Fmedia \u002Fsrv\u002Fstack\u002Fimmich`\n`sudo mkdir -p \u002Fsrv\u002Fstack\u002Fjellyfin\u002Fconfig \u002Fsrv\u002Fstack\u002Fjellyfin\u002Fcache \u002Fsrv\u002Fstack\u002Fnavidrome\u002Fdata \u002Fsrv\u002Fstack\u002Faudiobookshelf\u002Fconfig \u002Fsrv\u002Fstack\u002Faudiobookshelf\u002Fmetadata`\n`sudo chown -R 1000:1000 \u002Fsrv\u002Fstack \u002Fsrv\u002Fphotos`\n`sudo chmod -R a+rX \u002Fsrv\u002Fmedia`\n`docker network create edge`",{"title":103,"body":104},"Point four subdomains to the VPS","Create four A records (jellyfin, music, books, photos) pointing to the VPS IPv4. Caddy obtains certificates only if the A or AAAA records point to the server and ports 80 and 443 are open from the outside.",{"title":106,"body":107},"Write the compose file for the three light services","In `\u002Fsrv\u002Fstack\u002Fmedia\u002Fcompose.yaml`, declare Jellyfin, Navidrome and Audiobookshelf. No port is published: only Caddy talks to the `edge` network. Media is mounted read-only for Jellyfin and Navidrome.\n\n`services:`\n`  jellyfin:`\n`    image: jellyfin\u002Fjellyfin`\n`    user: 1000:1000`\n`    volumes:`\n`      - \u002Fsrv\u002Fstack\u002Fjellyfin\u002Fconfig:\u002Fconfig`\n`      - \u002Fsrv\u002Fstack\u002Fjellyfin\u002Fcache:\u002Fcache`\n`      - \u002Fsrv\u002Fmedia\u002Fvideo:\u002Fmedia:ro`\n`    restart: unless-stopped`\n`    networks: [edge]`\n`  navidrome:`\n`    image: navidrome\u002Fnavidrome:latest`\n`    user: 1000:1000`\n`    volumes:`\n`      - \u002Fsrv\u002Fstack\u002Fnavidrome\u002Fdata:\u002Fdata`\n`      - \u002Fsrv\u002Fmedia\u002Fmusic:\u002Fmusic:ro`\n`    restart: unless-stopped`\n`    networks: [edge]`\n`  audiobookshelf:`\n`    image: ghcr.io\u002Fadvplyr\u002Faudiobookshelf:latest`\n`    user: 1000:1000`\n`    volumes:`\n`      - \u002Fsrv\u002Fstack\u002Faudiobookshelf\u002Fconfig:\u002Fconfig`\n`      - \u002Fsrv\u002Fstack\u002Faudiobookshelf\u002Fmetadata:\u002Fmetadata`\n`      - \u002Fsrv\u002Fmedia\u002Faudiobooks:\u002Faudiobooks`\n`    restart: unless-stopped`\n`    networks: [edge]`",{"title":109,"body":110},"Add Caddy to the same file","Complete the file with the proxy service, then the declarations for the external network and the certificates volume:\n\n`  caddy:`\n`    image: caddy:2`\n`    ports:`\n`      - \"80:80\"`\n`      - \"443:443\"`\n`    volumes:`\n`      - .\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile:ro`\n`      - caddy_data:\u002Fdata`\n`    restart: unless-stopped`\n`    networks: [edge]`\n`networks:`\n`  edge:`\n`    external: true`\n`volumes:`\n`  caddy_data:`",{"title":112,"body":113},"Write the Caddyfile, one block per service","In `\u002Fsrv\u002Fstack\u002Fmedia\u002FCaddyfile`, a domain name is enough to trigger automatic TLS, and Caddy redirects HTTP to HTTPS on its own:\n\n`jellyfin.your-domain.com {`\n`  reverse_proxy jellyfin:8096`\n`}`\n`music.your-domain.com {`\n`  reverse_proxy navidrome:4533`\n`}`\n`books.your-domain.com {`\n`  reverse_proxy audiobookshelf:80`\n`}`\n`photos.your-domain.com {`\n`  reverse_proxy immich_server:2283`\n`}`",{"title":115,"body":116},"Install Immich with its official compose file","Download the two files of the latest release, and do not edit the compose file itself:\n\n`cd \u002Fsrv\u002Fstack\u002Fimmich`\n`wget -O docker-compose.yml https:\u002F\u002Fgithub.com\u002Fimmich-app\u002Fimmich\u002Freleases\u002Flatest\u002Fdownload\u002Fdocker-compose.yml`\n`wget -O .env https:\u002F\u002Fgithub.com\u002Fimmich-app\u002Fimmich\u002Freleases\u002Flatest\u002Fdownload\u002Fexample.env`\n\nIn `.env`, set the three values below (the password only accepts letters and digits):\n\n`UPLOAD_LOCATION=\u002Fsrv\u002Fphotos\u002Flibrary`\n`DB_DATA_LOCATION=\u002Fsrv\u002Fstack\u002Fimmich\u002Fpostgres`\n`DB_PASSWORD=\u003Cmot-de-passe-A-Za-z0-9>`",{"title":118,"body":119},"Attach Immich to the shared network","Create `\u002Fsrv\u002Fstack\u002Fimmich\u002Fdocker-compose.override.yml`. Docker Compose merges it automatically with the official file, which stays intact and replaceable at every update:\n\n`services:`\n`  immich-server:`\n`    networks: [default, edge]`\n`networks:`\n`  edge:`\n`    external: true`",{"title":121,"body":122},"Start and check every entry point","Start both stacks, wait for the certificates to be issued, then test HTTP headers and TLS. You should get a 2xx or 3xx code over HTTPS, never a certificate error:\n\n`cd \u002Fsrv\u002Fstack\u002Fmedia && docker compose up -d`\n`cd \u002Fsrv\u002Fstack\u002Fimmich && docker compose up -d`\n\n`curl -I https:\u002F\u002Fjellyfin.your-domain.com`\n`curl -I https:\u002F\u002Fphotos.your-domain.com`",{"title":124,"body":125},"Measure, then tune Immich","During indexing, read `docker stats --no-stream` and the CPU load. If memory nears the ceiling, disable a machine learning feature (smart search, facial recognition) in the administration settings, or lower task concurrency without raising it above the number of cores.",{"type":39,"title":127,"body":128},"Back up every service, restore before you need to","A stack of four applications has four ways to lose data. The classic trap is backing up photos without the database: Immich does not scan its library folder, it relies on its database to know what exists. The documentation distinguishes the original folders (`library`, `upload`, `profile`), which must be backed up, from regenerable folders (`thumbs`, `encoded-video`).\n\nImmich also produces its own database dumps, by default every day at 2 a.m., keeping the last 14 in the `backups` folder of the upload location. They hold metadata only, never the photos. For consistency, stop the server container during the backup; otherwise, back up the database first, then the files.\n\nRestoration, on a test machine, follows the official procedure (then inject the dump into `psql`). Careful: `down -v` erases all Immich data on the machine where you run it:\n\n`docker compose down -v`\n`docker compose pull`\n`docker compose create`\n`docker start immich_postgres`",{"type":43,"title":130,"items":131},"Backup plan per service",[132,133,134,135,136,137],"**Immich, database** — a compressed dump off the VPS: `docker exec -t immich_postgres pg_dump --clean --if-exists --dbname=immich --username=postgres | gzip > \"\u002Fsrv\u002Fbackup\u002Fimmich-db.sql.gz\"`, adapting database name and user to your `.env`.","**Immich, files** — `library`, `upload` and `profile` copied with `rsync` to remote storage; `thumbs` and `encoded-video` can be regenerated.","**Jellyfin** — the `\u002Fsrv\u002Fstack\u002Fjellyfin\u002Fconfig` folder (libraries, users, metadata), container stopped while archiving. The cache rebuilds itself.","**Navidrome** — `\u002Fsrv\u002Fstack\u002Fnavidrome\u002Fdata` (database, playlists, cache); the music itself is your source of truth and is backed up like any folder of files.","**Audiobookshelf** — `\u002Fconfig` and `\u002Fmetadata`: the SQLite database and listening progress live in the first, internal backups in the second.","**Restoration gets tested** — replay Immich's official procedure, detailed above, on a test machine before relying on it.",{"type":39,"title":139,"body":140},"Troubleshooting: saturated memory, denied permissions, cut uploads","Failures in this stack fall into two families: memory, when Immich and a transcode fight over the same gigabytes, and permissions, when a non-root container cannot read or write a mounted folder. For the first, start by looking for a kernel trace with `dmesg -T | grep -i \"out of memory\"`: if an Immich process appears there, the kernel killed it for lack of memory, and the container restarts in a loop. For the second, always compare the container user's ID with the owner of the mounted folders.",{"type":43,"title":142,"items":143},"Errors encountered and their fix",[144,145,146,147,148,149],"**Immich restarts in a loop on a small plan** — the kernel kills the machine learning container (look for `out of memory` in `dmesg`). Disable smart search and facial recognition, or move to a plan with at least 8 GB.","**`can't set healthcheck.start_interval as feature require Docker Engine v25 or later`** — your Docker is too old. Update it, or comment out the `start_interval` line in the `database` section of the compose file, as Immich's documentation indicates.","**Video uploads cut after one minute** — Immich's documentation notes a 499 code behind Traefik with the default 60-second read timeout, and recommends 600 seconds. Check your proxy's timeout.","**Navidrome: `unable to open database file`** — the `\u002Fdata` folder is not writable. Give ownership to the ID set by the `user` directive.","**Navidrome starts but the library stays empty, with `permission denied` in the logs** — the music folder is not readable: apply `chmod -R a+rX` on `\u002Fsrv\u002Fmedia\u002Fmusic`.","**Jellyfin does not see the films** — the container's user 1000 cannot read the mounted folder. Test with `docker exec jellyfin ls \u002Fmedia` and fix the permissions; `PUID` and `PGID` do not work with these images, only the `user` directive counts.",{"type":55,"title":151,"headers":152,"rows":156},"Which plan for which library",[153,154,155],"Library profile","Recommended plan","Margin and limit",[157,161,165,169],[158,159,160],"Music, audiobooks and a few films on direct play, Immich without machine learning, one or two users","VPS Start: 2 vCPU, 4 GB, 50 GB SSD, at 99 DH\u002Fmonth","Tight memory: Immich stays without ML and transcoding is best avoided; disk limits you to a few films (≈ 7 GB for a two-hour film at 8 Mb\u002Fs)",[162,163,164],"Family photo library of about 10,000 shots (30 to 36 GB) with ML on, music and audiobooks, direct play","VPS Power: 4 vCPU, 8 GB, 100 GB SSD, at 299 DH\u002Fmonth","Reaches the 8 GB recommended for Immich alone; initial indexing slows the rest",[166,167,168],"Full four-service stack, two or three users, an occasional transcode","VPS Business: 8 vCPU, 16 GB, 200 GB SSD, at 499 DH\u002Fmonth","Comfortable; disk becomes the ceiling as soon as video exceeds a few hundred GB",[170,171,172],"Several streams transcoded at the same time","VPS Business at minimum, plus upstream file conversion","Without a GPU, adding vCPUs is not enough: convert once rather than transcode on every playback",{"type":174,"title":175,"body":176},"tip","Measure before paying more","Start with the plan the table indicates, run Immich's indexing and read memory with `docker stats --no-stream` during a peak day. If the margin exceeds 30%, you have the right size; if the kernel kills a container, move up a plan. Vertical scaling of the VPS avoids reinstalling: RAM and disk grow, your `\u002Fsrv` folders and compose files stay in place.",{"type":39,"title":178,"body":179},"Official documentation and next steps","The values in this guide come from the vendors' documentation: \u003Ca href=\"https:\u002F\u002Fdocs.immich.app\u002Finstall\u002Frequirements\">Immich requirements\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fdocs.immich.app\u002Fadministration\u002Fbackup-and-restore\">Immich backup and restore\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fjellyfin.org\u002Fdocs\u002Fgeneral\u002Fadministration\u002Fhardware-selection\u002F\">Jellyfin hardware selection\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fjellyfin.org\u002Fdocs\u002Fgeneral\u002Fpost-install\u002Ftranscoding\u002F\">Jellyfin transcoding\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fwww.navidrome.org\u002Fdocs\u002Finstallation\u002Fdocker\u002F\">Navidrome with Docker\u003C\u002Fa> and \u003Ca href=\"https:\u002F\u002Fcaddyserver.com\u002Fdocs\u002Fautomatic-https\">Caddy's automatic HTTPS\u003C\u002Fa>.\n\nTo pick a proxy other than Caddy, read \u003Ca href=\"\u002Fen\u002Fblog\u002Fcaddy-traefik-or-nginx-proxy-manager-which-to-choose\">our Caddy, Traefik and Nginx Proxy Manager comparison\u003C\u002Fa>. If you are leaving Plex, the process is detailed in \u003Ca href=\"\u002Fen\u002Fblog\u002Fplex-security-migration-jellyfin-navidrome-vps\">our migration guide to Jellyfin and Navidrome\u003C\u002Fa>.","A VPS that grows with your media library","With a ServOrbit.com VPS, you get root access, a dedicated IPv4, NVMe SSD and a choice of distribution. When the library grows, vertical scaling adds RAM and disk without reinstalling. The VPS administration option is available.","See the VPS Cloud plans","\u002Fvps-cloud",[185,203,222],{"id":186,"slug":187,"slugs":188,"title":192,"excerpt":193,"readTime":194,"views":195,"isPinned":19,"publishedAt":196,"updatedAt":197,"category":198,"categories":199,"featuredImage":30,"bgImage":31,"posterImage":201,"relatedSolution":202},82,"host-immich-on-your-own-vps",{"fr":189,"en":187,"ar":190,"es":191},"heberger-immich","استضافة-immich-على-خادمك-الافتراضي-الخاص-vps","alojar-immich-en-un-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.",11,1,"2026-03-30T00:00:00+00:00","2026-09-23T15:23:17+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[200],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-immich-poster.svg",{"categorySlug":25,"appSlug":35},{"id":204,"slug":205,"slugs":206,"title":210,"excerpt":211,"readTime":212,"views":213,"isPinned":19,"publishedAt":214,"updatedAt":215,"category":216,"categories":217,"featuredImage":30,"bgImage":31,"posterImage":219,"relatedSolution":220},84,"host-jellyfin-on-your-own-vps",{"fr":207,"en":205,"ar":208,"es":209},"heberger-jellyfin","استضافة-jellyfin-على-خادمك-الافتراضي-الخاص-vps","alojar-jellyfin-en-un-vps","Self-Hosting Jellyfin on a VPS: Complete 2026 Guide","Deploy Jellyfin on your own VPS with Docker, nginx, HTTPS, plugins, storage options and hardware transcoding. Full guide updated for 2026.",10,8,"2026-03-28T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[218],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-jellyfin-poster.svg",{"categorySlug":34,"appSlug":221},"jellyfin",{"id":223,"slug":224,"slugs":225,"title":229,"excerpt":230,"readTime":212,"views":231,"isPinned":19,"publishedAt":232,"updatedAt":215,"category":233,"categories":238,"featuredImage":30,"bgImage":31,"posterImage":240,"relatedSolution":30},227,"caddy-traefik-or-nginx-proxy-manager-which-to-choose",{"fr":226,"en":224,"ar":227,"es":228},"choisir-reverse-proxy-vps-caddy-traefik-nginx","caddy-أم-traefik-أم-nginx-proxy-manager-أيهما-تختار","elegir-reverse-proxy-vps-caddy-traefik-nginx","Caddy, Traefik or Nginx Proxy Manager: which to choose?","Caddy, Traefik or Nginx Proxy Manager for your VPS? A practical comparison to choose the right reverse proxy for your Docker stack.",2,"2026-08-06T00:00:00+00:00",{"id":234,"name":235,"slug":236,"color":237,"icon":236},5,"Comparison","comparatif","bg-info\u002F10 text-info",[239],{"id":234,"name":235,"slug":236,"color":237,"icon":236},"\u002Fblog\u002Fcovers\u002Fchoisir-reverse-proxy-vps-caddy-traefik-nginx-poster.svg",1793146042837]