Skip to main content

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.
  • compose plugin (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.
1

Connect to Your VPS

SSH into your VPS as root or a user with sudo privileges.
2

Run the Bootstrap Command

curl -sSL https://minestorecms.com/docker-installer.sh | sudo bash
3

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).
4

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.
5

Open the Admin Panel

Once the wizard finishes, open https://<your-domain>/admin and complete the in-browser setup.

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).
OptionBest for
CaddyThe simplest option — auto-issues a Let’s Encrypt certificate, no extra steps.
Install CaddyIf no web server is running, the installer installs Caddy and configures it.
NginxGenerates an nginx vhost and runs certbot --nginx -d <domain> if you choose certbot SSL.
Apache2Generates an apache2 vhost and runs certbot --apache -d <domain> if you choose certbot.
SkipThe 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.
sudo minestore list                       # all instances on this host
sudo minestore status   <name>            # container health
sudo minestore logs     <name> [service]  # tail container logs
sudo minestore artisan  <name> <cmd>      # run any artisan command
sudo minestore update   <name>            # rebuild image + restart (preserves data)
sudo minestore backup   <name>            # tarball of all volumes + db dump
sudo minestore restore  <name> --from <file>
sudo minestore destroy  <name>            # remove one instance
sudo minestore uninstall                  # remove ALL instances and the CLI
sudo minestore proxy    create|regenerate|remove|list
sudo minestore install-systemd <name>     # autostart units (Podman)

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:
sudo minestore create greencraft     # picks port 80 if free
sudo minestore create redcraft       # offers a high port (e.g. 18001) or
                                     # installing Caddy as a shared front-end
The first instance takes port 80 by default. The installer offers to install Caddy and route by domain for subsequent instances.

Updating

sudo minestore backup <name>
sudo minestore update <name>
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.
Auto-update via the admin “Upgrade” button is disabled in Docker mode — it would write to the immutable image layer. Use sudo minestore update <name> from the host instead.

Persistent Data

The following volumes survive container rebuilds:
VolumeContents
envYour Laravel .env file.
storageLaravel storage/ (logs, sessions, framework cache).
pub-imgUser-uploaded images under public/img/.
pub-assetsTheme assets and other generated files.
frontendInstalled frontend (default theme or a third-party).
db-dataMariaDB data directory.

Backups

minestore backup <name> creates a single tarball containing:
  • An atomic snapshot of every named volume above.
  • A mysqldump of the database.
Restore with minestore restore <name> --from <file>. The restore replaces the current state — back up beforehand if you want to keep it.

Podman Notes

Rootful Podman is recommended (sudo bash docker-installer.sh). Rootless Podman cannot bind to privileged ports (80/443) without:
sudo sysctl net.ipv4.ip_unprivileged_port_start=80
  • HEALTHCHECK is preserved because the installer passes --format=docker to podman 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 :Z to 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.