Introduction
If you've got a folder full of audiobooks and podcast downloads scattered across your computer, Audiobookshelf is the app that finally organizes them into something that feels like a real media server. It's the audiobook and podcast equivalent of Plex or Jellyfin, and it runs great on modest hardware — which makes it a natural fit for a Proxmox VE homelab.
This tutorial walks you through installing Audiobookshelf inside an LXC container on Proxmox VE, using the community-scripts installer that most homelabbers already rely on for this kind of app. By the end, you'll have a working audiobook server reachable from your browser, your phone, or the official Audiobookshelf apps.
What You Will Learn
- What an LXC container is and why it's the right way to run Audiobookshelf on Proxmox VE
- How to create the Audiobookshelf container using the community-scripts helper script
- How to mount your existing audiobook and podcast files into the container
- How to create your admin account and add your first library
- What to do when the container can't see your files, or the web UI won't load
What Is This Feature?
Audiobookshelf is a self-hosted media server built specifically for audiobooks and podcasts. It scans a folder of media files, pulls in cover art and metadata, tracks your listening progress, and serves everything through a web app or a native mobile app. Unlike Plex, it isn't trying to be everything for every media type — it's built around the way audiobooks are structured, with support for multi-file books, series ordering, and chapter markers.
To run it on Proxmox VE, we're going to use an LXC container rather than a full virtual machine. LXC stands for Linux Containers — it's a lightweight way to run an isolated Linux environment that shares the host's kernel instead of emulating its own hardware the way a VM does. That makes containers start faster and use a fraction of the RAM and disk a VM would need for the same job. For something like Audiobookshelf, which is a fairly small Node.js application, a container is the obvious choice.
Rather than building this container by hand, we'll use the community-scripts project — a widely used collection of install scripts that automates the whole process: creating the container, installing dependencies, pulling in Audiobookshelf, and setting it up as a system service. You just answer a few prompts and it does the rest.
Worth being clear about one thing: community-scripts isn't an official Proxmox project. It's maintained by volunteers in the homelab community, and it's become the de facto standard way to spin up self-hosted apps on Proxmox VE because it saves you from manually running apt install a dozen times and hoping you didn't miss a dependency. You could absolutely build this container by hand — download a Debian template, create the container with pct create, install Node.js and ffmpeg yourself, then install Audiobookshelf from its GitHub releases. The script just does all of that for you in one shot.
Why Would You Use It?
The obvious reason is ditching (or supplementing) a subscription audiobook service. If you've built up a library of audiobooks over the years — purchased, ripped from CDs, or downloaded from your library through Libby — Audiobookshelf gives you a proper place to keep them, with progress tracking across every device you own.
It's also genuinely good for podcasts. You can point it at RSS feeds and it'll download and organize episodes automatically, which is handy if you follow shows that don't stay in your podcast app's back catalog forever.
And because it runs in an LXC container, it barely touches your Proxmox host's resources. The default container footprint is 2 CPU cores and 2 GB of RAM — you'll likely never see it use anywhere near that in normal operation. That leaves plenty of headroom for everything else running on your node.
You might already run Plex or Jellyfin for movies and TV, and wonder why you'd bother with a separate app just for audiobooks. The honest answer is that general media servers treat audiobooks as an afterthought — they're built around video metadata, not around multi-hour single works with chapters and a reading position that needs to sync across five different devices. Audiobookshelf's entire interface is designed around "where did I leave off," which video-first tools just don't handle as well.
Prerequisites
Before you start, make sure you have the following ready:
- A working Proxmox VE host — this guide was written against Proxmox VE 9.2, but it works the same on any recent 8.x or 9.x install
- Root access to the Proxmox VE shell (via the web UI's Shell button on the node, or SSH)
- At least 5 GB of free space on the storage you plan to use for the container's root disk
- Your audiobook or podcast files somewhere accessible to the Proxmox host — an NFS share, a mounted USB drive, or a folder on the host itself
- A rough idea of your network's IP range, since you'll either use DHCP or assign the container a static address
You don't need any prior Proxmox experience to follow along, but you should already have Proxmox VE installed and reachable through its web interface at https://your-server-ip:8006.
Step-by-Step Tutorial
Step 1: Open the Proxmox VE shell
Log in to the Proxmox VE web interface, click on your node in the left-hand tree (the one named after your server), and click Shell near the top right. This drops you into a root terminal on the Proxmox host itself — this is where we'll run the installer.
Step 2: Run the Audiobookshelf install script
Paste this command into the shell and press Enter:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/audiobookshelf.sh)"
This downloads the community-scripts installer and runs it immediately. You'll see a text-based wizard appear, asking whether you want the default settings or advanced ones.
Step 3: Choose default or advanced settings
For a first install, pick the default option. It creates the container with these specs:
| Setting | Default value |
|---|---|
| OS template | Debian 13 |
| CPU cores | 2 |
| RAM | 2048 MB |
| Disk size | 5 GB |
| Network | DHCP on vmbr0 |
If you already know you've got a large audiobook library that you'll be storing directly on the container's disk (rather than mounting it from elsewhere), bump the disk size up during the advanced setup. 5 GB is fine for the app itself, but it won't hold much media.
Step 4: Let the script finish and note the container's IP
The script creates the container, installs Node.js, ffmpeg (Audiobookshelf needs this for audio processing), and the Audiobookshelf application itself, then starts it as a systemd service. This takes somewhere between two and five minutes depending on your internet connection. When it's done, it prints the container's IP address — write that down.
Step 5: Open the Audiobookshelf web interface
In your browser, go to http://<container-ip>:13378. Port 13378 is Audiobookshelf's default. You should land on a setup screen — there's no default username or password, because the first account you create becomes the root admin account.
Step 6: Create your admin account
Pick a username and a real password here — this account has full control over the server, including user management, so don't leave it as something guessable.
Step 7: Mount your audiobook files into the container
This is the step people skip and then wonder why their library is empty. If your audiobooks live on an NFS share or another storage location on your Proxmox host, you need to give the container access to it as a mount point. From the Proxmox shell (not inside the container), run something like:
pct set 115 -mp0 /mnt/pve/audiobooks,mp=/audiobooks
Replace 115 with your container's actual ID (you'll see it in the Proxmox web UI's left-hand tree), and adjust the source path to wherever your files actually live. This maps that host folder to /audiobooks inside the container.
Step 8: Add a library in Audiobookshelf
Back in the Audiobookshelf web UI, go to Settings and create a new library. Point it at /audiobooks (or wherever you mounted your files in Step 7), choose whether it's a Book or Podcast library, and let it scan. Audiobookshelf reads folder structure to figure out authors, series, and titles, so organizing files as Author/Series/Book Title ahead of time makes the scan far more accurate.
Commands Explained
| Command | What it does |
|---|---|
bash -c "$(curl -fsSL ...)" | Downloads the install script and executes it in the current shell, without saving a copy to disk first. |
pct set <id> -mp0 <source>,mp=<path> | Adds (or updates) mount point 0 on an existing container, binding a host path into the container's filesystem. |
pct list | Shows every container on the node, including its ID and current status — useful if you forgot the container ID. |
pct enter <id> | Drops you into a root shell inside the container directly from the Proxmox host, which is handy for checking logs. |
Common Errors
A few things trip people up consistently with this setup:
- The library scan finds zero books. Almost always a mount point problem — either the path inside Audiobookshelf doesn't match what you mounted, or the mount point was added after the container was already running and needs a restart to pick up.
- The web UI won't load at all. Usually the container is still starting, or you're using the wrong port. Double-check you're hitting
:13378, not 8006 (that's the Proxmox UI itself). - "No space left on device" during a big library scan. The default 5 GB disk fills up fast if you're storing files directly on it instead of mounting external storage. Resize it with
pct resize 115 rootfs +10Gand give it more room.
Troubleshooting
If the container starts but Audiobookshelf itself won't respond, check the service status from inside the container. Run pct enter 115 from the Proxmox shell, then systemctl status audiobookshelf. A failed state usually points to a permissions issue on the mounted folder — unprivileged containers (the default, and the one you should stick with) map the container's root user to an unprivileged user on the host, so the host-side folder needs to be readable by that mapped UID.
If mounted folders show up empty inside the container but you know the files are there, verify the source path exists on the Proxmox host itself first — run ls /mnt/pve/audiobooks from the host shell. It's easy to typo a path in the pct set command and not notice until the scan comes back empty.
For anything else, the application logs are your friend: journalctl -u audiobookshelf -f inside the container streams them live, which is usually enough to spot what's actually failing.
One more thing that catches people out: if you can't reach the web UI from another device on your network at all — not even a connection refused, just a timeout — check that the container actually got an IP address. Run pct exec 115 -- ip a from the Proxmox host to see its network config without even entering the container. If it shows no address on eth0, the problem is usually the bridge (vmbr0) or DHCP on your router, not Audiobookshelf itself.
Best Practices
Keep your files organized as Author/Series/Book Title/ before you ever point Audiobookshelf at them — retrofitting a messy folder structure later means a lot of manual metadata matching.
Back up the container regularly using Proxmox's built-in backup tool (vzdump), especially before major Audiobookshelf updates. Your listening progress and user accounts live in the container's database, and a bad update is rare but not impossible.
Stick with an unprivileged container unless you have a specific reason not to. It's the default for a reason — a compromised app inside the container has far less access to your host this way.
If you're running this long-term rather than just testing it out, give the container a static IP instead of leaving it on DHCP. It saves you from the web UI bookmark breaking every time your router hands out a new lease.
Frequently Asked Questions
Do I need a separate VM instead of a container?
No. Audiobookshelf has no special kernel requirements, so an LXC container is both sufficient and considerably lighter on resources than a full VM.
Can I access Audiobookshelf outside my home network?
Yes, but don't expose port 13378 directly to the internet. Put a reverse proxy in front of it with HTTPS, or use something like Tailscale or WireGuard to reach it remotely without opening ports.
Does Audiobookshelf support multiple users?
Yes. Once you're logged in as the admin, you can create additional accounts under Settings, each with its own listening progress and permissions.
What audio formats does it support?
M4B, MP3, M4A, FLAC, and a handful of others are all supported. M4B is generally the best choice for audiobooks since it keeps chapters in a single file.
Will it automatically download podcast episodes?
Yes, if you add a podcast library and subscribe to a feed, Audiobookshelf checks for new episodes and downloads them on a schedule you control.
How do I update Audiobookshelf later?
Community-scripts containers include an update option — re-run the same install script and choose the update path when prompted, rather than the create-new-container option.
What happens to my library if I need to restore from a backup?
As long as your media files were mounted from external storage rather than stored on the container's own disk, restoring the container from a vzdump backup brings back your users, progress, and settings, and Audiobookshelf simply re-scans the mounted folder once it's back online.
Conclusion
Getting Audiobookshelf running on Proxmox VE takes maybe ten minutes once you've got your files somewhere the container can reach. The community-scripts installer does the tedious part, so the only real work on your end is mounting your media correctly and organizing it into folders Audiobookshelf can parse. From here, it's worth exploring the mobile apps for offline listening and the podcast auto-download feature if you haven't already — both are where this setup starts to feel like a real replacement for a subscription service rather than just a hobby project.