Skip to main content

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 running Ubuntu 22.04+ / Debian 12+ or RHEL 9 / Rocky 9 / AlmaLinux 9.
  • Root access (or a user with sudo).
  • A valid MineStoreCMS license key.
  • Optional but recommended: a domain pointing to your VPS for SSL.
The installer pulls in Docker 20.10+ (or Podman 4.x+) and the compose plugin automatically as part of the dependency step below.

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

Install Dependencies

gettext / gettext-base provides envsubst, which the installer uses to render the docker-compose.yaml template. iproute2 provides ss, used for port-collision checks.
3

Clone the Container Repo

4

Run the Installer

5

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

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

Open the Admin Panel

Once the wizard finishes, open https://<your-domain>/admin and complete the in-browser setup.
Need SSL via Let’s Encrypt? If you plan to pick the certbot option in the wizard, install certbot and the matching plugin first:
Caddy and “Install Caddy” options issue certs automatically — no certbot needed.

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

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:
  • 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.