If you've ever opened the fridge and found three cartons of milk, all a week from expiring, you already understand why people bother self-hosting a grocery tracker. Grocy is one of the more oddly satisfying tools you can run in a homelab — it's not glamorous like Plex or Jellyfin, but it quietly saves you money and stops food from going to waste. This guide walks you through installing it in a Proxmox VE LXC container, from a completely bare install to a working household inventory system.
You don't need any Linux experience to follow along. If you can copy a command into a terminal, you can have Grocy running in under ten minutes.
What You Will Learn
- What Grocy actually does and who it's useful for
- Why an LXC container is the right way to run it on Proxmox VE
- How to deploy Grocy using the community helper script, step by step
- What each part of the install command is doing
- The errors people actually run into, and how to fix them
- A few settings worth changing before you start using it for real
What Is This Feature?
Grocy is a self-hosted web app for tracking groceries, household supplies, and the chores that go with running a home. You scan or type in what's in your pantry and fridge, and Grocy keeps a running inventory. When something's about to expire, it tells you. When you run out of dish soap, it can add it to a shopping list automatically. It also handles recipes, a chore schedule, and a basic equipment/asset log, though most people only ever touch the inventory and shopping list parts.
It's written in PHP, stores its data in a small MariaDB or SQLite database (the installer defaults to MariaDB), and runs behind Apache. None of that matters much day to day — you'll interact with it entirely through a browser.
Since we're deploying it on Proxmox VE, it's worth explaining the container technology underneath it. An LXC container is a lightweight way to run an isolated Linux system that shares the host's kernel instead of virtualizing its own hardware, the way a full VM does. That makes it start faster and use far less RAM and disk than a VM running the same app — a good fit for something like Grocy, which barely uses any resources once it's running.
We'll also lean on the Proxmox VE Community Scripts project, a set of maintained shell scripts that build and configure an LXC container for a specific app in one shot. Instead of manually creating a container, installing Debian, adding Apache, PHP, and Grocy by hand, one command does the whole thing.
Why Would You Use It?
The honest answer: because grocery waste is annoying and expensive. USDA estimates put household food waste in the range of 30-40% of the food supply, and a lot of that is stuff that just got forgotten in the back of the fridge. Grocy won't fix bad habits by itself, but having a device on your kitchen counter (or your phone) that says "that chicken expires in two days" changes behavior more than you'd expect.
It's also just a good LXC container to practice on if you're new to Proxmox. The install is quick, the resource footprint is tiny — 512 MB of RAM by default — and if you break something, you can delete the container and start over in five minutes. Low stakes, real practice.
A few concrete reasons people end up running it:
- Tracking expiration dates so food doesn't quietly rot in the crisper drawer
- Auto-generating a shopping list when stock of something runs low
- Managing a chore chart for a household without a whiteboard on the fridge
- Keeping a simple inventory of household supplies (batteries, filters, cleaning products) that are easy to forget until you're out
Prerequisites
Before you start, make sure you have the following:
- A working Proxmox VE host — this guide was tested on Proxmox VE 8.x and 9.x, both work fine with the current script
- At least 2 GB of free space on the storage you plan to use for the container's disk, plus a bit of headroom
- Root (or a user with sudo) access to the Proxmox VE shell, either through the web UI's Datacenter → node → Shell option or SSH
- Internet access from the Proxmox host, since the install script downloads packages during setup
- A rough idea of which storage you want the container to live on —
local-lvmis the default on most fresh installs
You don't need to pre-create the container. The script does that for you and will ask you a handful of questions along the way.
Step-by-Step Tutorial
Step 1: Open the Proxmox VE Shell
Log into the Proxmox VE web interface, click your node in the left-hand tree, and open >_ Shell near the top of the panel. This drops you into a root terminal on the host itself — this is where the container gets created, not inside an existing VM or container.
Step 2: Run the Grocy Install Script
Paste this into the shell and press Enter:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/grocy.sh)"
This downloads and runs the community script that builds the container. You'll be dropped into a text-based menu.
Step 3: Choose Default or Advanced Settings
The script asks whether you want Default Settings or Advanced Settings. For a first attempt, pick default. It will create an unprivileged container running Debian 13, with 1 vCPU core, 512 MB of RAM, and a 2 GB disk. That's genuinely enough for Grocy — it's a lightweight app, not a database server.
If you want to bump the disk size up front (worth doing if you plan to attach a lot of receipt photos or barcode images later), choose Advanced Settings instead and you'll get to set CPU, RAM, disk size, and the container's static IP or DHCP behavior manually.
Step 4: Let It Build
The script now creates the container, installs Debian, then pulls in Apache, PHP 8.5, and the Grocy application itself, wiring them together automatically. On a decent internet connection this takes somewhere between two and five minutes. You'll see a stream of status lines — that's normal, don't interrupt it.
Step 5: Note the Container's IP Address
When it finishes, the script prints a summary that includes a line like:
Access it using the following URL:
http://192.168.1.147
Write that IP down, or check it later under your new container's Summary tab in the Proxmox VE web UI.
Step 6: Log In and Change the Default Password
Open that IP address in a browser. You'll land on the Grocy login screen. The default credentials are:
- Username: admin
- Password: admin
Log in, then go to the user icon in the top-right corner and open the settings for the admin user. Change the password immediately — this container is reachable by anything else on your LAN, and "admin/admin" is the first thing anyone (or any script) tries.
Step 7: Do the First-Run Setup
Grocy will prompt you through a short first-run wizard: currency, some default locations (Pantry, Fridge, Freezer), and default quantity units. You can change all of this later under Manage Master Data, so don't overthink it here.
Commands Explained
Only one command really matters in this guide, but it's worth breaking down since you'll see this same pattern used for dozens of other apps on Proxmox VE:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/grocy.sh)"
| Part | What it does |
|---|---|
curl -fsSL <url> | Downloads the script text. -f fails silently on server errors instead of printing garbage HTML, -s hides the progress bar, -S shows errors if -f triggers one, -L follows redirects. |
$( ... ) | Command substitution — takes the downloaded script's text and treats it as a command to run. |
bash -c "..." | Runs that text as a new bash script, rather than saving it to a file first. |
In plain terms: it fetches the script from GitHub and runs it immediately, without ever writing it to disk. If you'd rather review a script before running it — a reasonable instinct — you can always open the URL in a browser first and read it, since these are plain text shell scripts.
Two other commands are worth knowing once the container exists:
pct enter 105
Replace 105 with your container's actual ID (shown in the Proxmox UI's left sidebar). This drops you into a root shell inside the container, which is where you'd go to check logs or restart services manually.
systemctl status apache2
Run this inside the container to confirm Apache — the web server serving Grocy — is actually running. If Grocy's URL won't load, this is the first thing to check.
Common Errors
A handful of issues come up repeatedly with this install:
- "This site can't be reached" right after install. Usually means the container is still finishing its boot sequence. Give it another 30-60 seconds and refresh.
- Blank white page instead of the login screen. Almost always a PHP error. Check
/var/log/apache2/error.loginside the container for the actual message rather than guessing. - "Database connection error" on first load. The MariaDB service inside the container hasn't finished starting yet, or crashed on a container with too little RAM. Bump the container to at least 512 MB if you shrank it during setup.
- Container is running but has no IP address. Check that your Proxmox bridge (usually
vmbr0) has DHCP available on that network, or set a static IP through the container's Network tab if your network doesn't hand out addresses automatically.
Troubleshooting
If the install script itself fails partway through, don't just re-run it against the same container ID — it isn't designed to resume a broken build cleanly. Delete the half-built container from the Proxmox UI (right-click it → Remove) and run the script again from scratch. It only takes a few minutes.
If Grocy loads but looks broken — no styling, missing icons — that's usually a browser cache issue after an update, not a server problem. Hard-refresh with Ctrl+Shift+R (or Cmd+Shift+R on a Mac) before assuming something's actually wrong.
For anything deeper, get a shell inside the container and check the logs directly:
pct enter 105
tail -n 50 /var/log/apache2/error.log
Nine times out of ten, the real error message is sitting right there, and it's far more useful than the vague message the browser shows you.
If you need to update Grocy later, the community script supports that too — run the exact same install command again against the existing container, and it'll detect the current version and update in place rather than building a new container.
Best Practices
- Change the default admin password before you add any real data — don't put this off "for later."
- Back up the container with Proxmox's built-in vzdump/backup tools once you've put real effort into your inventory. Losing a week of barcode scanning to a container you forgot to back up is a genuinely bad afternoon.
- Don't expose Grocy directly to the internet. If you want to reach it away from home, put it behind something like Tailscale or a reverse proxy with proper authentication, rather than forwarding a port straight to it.
- Stick with the default 1 vCPU / 512 MB unless you're running it alongside heavy barcode/OCR workflows — Grocy genuinely doesn't need more.
- Use the built-in barcode lookup feature (it queries Open Food Facts) instead of typing product names by hand. It's a small thing, but it's the difference between using this daily and abandoning it after a week.
Frequently Asked Questions
Does Grocy work on a phone?
Yes. There's no dedicated mobile app, but the web interface is responsive and works fine as a home-screen bookmark on iOS or Android. Some people pair it with the third-party Grocy Android app for faster barcode scanning.
Can I run Grocy in Docker instead of an LXC container?
Yes, an official Docker image exists. This guide covers the LXC route because it's a smaller footprint on Proxmox VE and doesn't require you to also run a Docker host inside a container or VM.
How much storage does Grocy actually need long-term?
For years of typical household use, the default 2 GB disk is enough. If you plan to attach a lot of photos to inventory items, bump it to 8-10 GB during Advanced Settings.
Is there a way to scan barcodes with my phone's camera?
Yes — Grocy's web UI supports camera-based barcode scanning in supported mobile browsers, no extra hardware needed.
What happens if I lose the container?
Everything lives inside that one container, including the database. If you haven't backed it up with Proxmox VE's vzdump tool, you lose your entire inventory history. This is the single best argument for setting up a backup job on day one, not after something breaks.
Conclusion
Grocy is a small, unglamorous project, and that's exactly why it's a good first LXC container to run on Proxmox VE. The install takes minutes, it barely touches your host's resources, and you get an immediate, practical reason to check it — an actual dent in food waste and a shopping list that writes itself. Once it's running, spend a weekend actually stocking it with your pantry, set a backup job, and change that admin password before you forget.