Documentation Index
Fetch the complete documentation index at: https://docs.minestorecms.com/llms.txt
Use this file to discover all available pages before exploring further.
Introduction
The Docker install path is an additional way to install MineStoreCMS alongside the bare-metal installer.sh. It packages the full stack (nginx, php-fpm, Next.js, workers, scheduler, Discord bot) into a single application container that talks to a separate MariaDB container.Docker mode supports multiple isolated instances on the same VPS out of the box — useful if you host more than one store from a single server.
Both Docker and Podman runtimes are supported. The installer auto-detects which one you have and uses the appropriate
compose command.Requirements
- A VPS with Docker 20.10+ or Podman 4.x+ installed.
composeplugin (docker compose/podman compose/podman-compose).- A valid MineStoreCMS license key.
- Optional but recommended: a domain pointing to your VPS for SSL.
Installation
The installer is a 6-step interactive wizard: instance name → license → domain → reverse-proxy choice → DB mode → confirm.Follow the Wizard
Enter the instance name (e.g.
greencraft), your license key, the domain you want to use, and pick a reverse-proxy option (see below).Wait for the Build
The first build takes 3–5 minutes — the image fetches the tarball for your license, installs system packages, Composer dependencies and the frontend.
Reverse-Proxy Options
The installer can generate a host-level vhost for several web servers, or skip proxying entirely if you handle TLS upstream (e.g. Cloudflare).| Option | Best for |
|---|---|
| Caddy | The simplest option — auto-issues a Let’s Encrypt certificate, no extra steps. |
| Install Caddy | If no web server is running, the installer installs Caddy and configures it. |
| Nginx | Generates an nginx vhost and runs certbot --nginx -d <domain> if you choose certbot SSL. |
| Apache2 | Generates an apache2 vhost and runs certbot --apache -d <domain> if you choose certbot. |
| Skip | The container only binds to 127.0.0.1:<HTTP_PORT> — route to it from your own proxy. |
When the host already runs a web server, the installer detects it and marks that option as (Recommended) — pressing Enter accepts the recommendation.
Day-2 Operations — minestore CLI
After installation, the host exposes a minestore command for ongoing operations.
Multi-Instance Hosting
Each instance lives under/opt/minestore/<name>/ with its own docker-compose.yaml. Compose project names are auto-prefixed as minestore-<name>, so containers, networks and volumes from different instances never collide.
Example — running GreenCraft and RedCraft on the same VPS:
The first instance takes port
80 by default. The installer offers to install Caddy and route by domain for subsequent instances.Updating
update runs compose build --no-cache — the image fetches the latest tarball for your license, the entrypoint runs artisan migrate --force, and the frontend is rebuilt only when package.json actually changed. All persistent state (database, .env, uploads, installed theme) survives the rebuild because it lives in named volumes.
Persistent Data
The following volumes survive container rebuilds:| Volume | Contents |
|---|---|
env | Your Laravel .env file. |
storage | Laravel storage/ (logs, sessions, framework cache). |
pub-img | User-uploaded images under public/img/. |
pub-assets | Theme assets and other generated files. |
frontend | Installed frontend (default theme or a third-party). |
db-data | MariaDB data directory. |
Backups
minestore backup <name> creates a single tarball containing:
- An atomic snapshot of every named volume above.
- A
mysqldumpof the database.
minestore restore <name> --from <file>. The restore replaces the current state — back up beforehand if you want to keep it.
Podman Notes
HEALTHCHECKis preserved because the installer passes--format=dockertopodman compose build.- For boot-time autostart:
sudo minestore install-systemd <name>generates Podman systemd units under/etc/systemd/system/. - SELinux — the default named volumes are unaffected by SELinux labels. If you switch to bind mounts, append
:Zto each mount.
Troubleshooting
App container is unhealthy
Run
sudo minestore logs <name>. The most common causes are: the DB container not yet ready, an invalid license key, or first-run pnpm install timing out on a slow disk.certbot fails to issue a certificate
DNS for the domain is not yet pointing to the host, or port 80 is firewalled. Fix DNS and then
sudo minestore proxy regenerate <name>.Admin 'Upgrade' button returns an error
Expected — auto-update is disabled in container mode. Run
sudo minestore update <name> from the host instead.Update doesn't apply
Confirm
compose build actually re-fetched the tarball — --no-cache is used automatically by minestore update. Verify the running version with sudo minestore artisan <name> "about".Next Steps
Webstore Setup
Configure your webstore by following the post-install setup.
Minecraft Server Connection
Install the plugin or use RCON to connect your Minecraft server.

