One-command local Magento Open Source store using the Mage-OS Composer mirror (no Adobe Marketplace keys), with MariaDB, OpenSearch, Redis, RabbitMQ, and Mailpit.
Uses Mage-OS 2.3.0 (based on Magento Open Source 2.4.8). Mage-OS uses its own semver (2.3.0), not Adobe’s 2.4.8 tag.
- Docker Desktop (or Docker Engine + Compose v2)
- ≥ 8 GB RAM allocated to Docker (OpenSearch + MariaDB + PHP)
- Free ports:
8080,3306,9200,6379,5672,15672,1025,8025(configurable in.env)
First make setup typically takes 15–30 minutes (image build, Composer download, sample data, reindex).
cp .env.example .env # already present if you cloned this scaffold
make setupThen open:
| Service | URL | Credentials |
|---|---|---|
| Storefront | http://localhost:8080/ | — |
| Admin | http://localhost:8080/admin | admin / Admin123! |
| Mailpit | http://localhost:8025 | — |
| RabbitMQ | http://localhost:15672 | guest / guest |
Sample data includes the Luma catalog, categories, customers, CMS pages, and promotions.
make up # start all services
make down # stop (keep volumes)
make cli # bash in the PHP container
make magento c:f # any bin/magento command
make reindex
make flush
make logs
make prod # production mode + compile + static deploy
make destroy # stop and delete Docker volumes (keeps src/)
make seed-multiwebsite # add EU/US websites + multi-site demo products
make seed-sim # add SIM Point + SK-SIM (JPY) + SIM card productsWrappers (same as Makefile targets):
./bin/magento cache:flush
./bin/composer require vendor/packagemake seed-simCreates (idempotent):
| Website | Store view | Currency | Locale |
|---|---|---|---|
sim_point (SIM Point) |
sim_point |
JPY | ja_JP |
sk_sim (SK-SIM) |
sk_sim |
JPY | ja_JP |
Demo SIM SKUs (shared stock; different Japanese names/prices per store):
| SKU | SIM Point | SK-SIM |
|---|---|---|
SIM-DATA-3GB |
¥1,980 | ¥2,200 |
SIM-DATA-10GB |
¥3,480 | ¥3,980 |
SIM-UNLIMITED-30D |
¥4,980 | ¥5,480 |
SIM-ESIM-5GB |
¥2,480 | ¥2,680 |
SIM-POINT-STARTER |
exclusive | — |
SK-SIM-BUSINESS |
— | exclusive |
URLs:
Script: seed/sim.php.
After make setup, seed extra websites and demo products:
make seed-multiwebsiteCreates (idempotent):
| Website | Store views | Purpose |
|---|---|---|
base (existing) |
default |
Original Luma store |
eu |
eu_en, eu_de |
EU English / Deutsch |
us |
us_en |
US English |
Demo SKUs:
| SKU | Websites | Notes |
|---|---|---|
GLOBAL-YOGA-MAT |
base, eu, us | Shared product |
EU-ONLY-TEE |
eu | EU exclusive |
US-ONLY-HOODIE |
us | US exclusive |
REGIONAL-TEE |
base, eu, us | Different name/price on eu_en / us_en |
Store codes are enabled in URLs:
- http://localhost:8080/
- http://localhost:8080/eu_en/
- http://localhost:8080/eu_de/
- http://localhost:8080/us_en/
Catalog Price Scope is set to Website (catalog/price/scope=1), so one SKU can have a different price per website while sharing the same stock. Name overrides are per store view.
Script: seed/multiwebsite.php. Reference CSV: seed/fixtures/products_multi_website.csv.
| Container | Role |
|---|---|
nginx |
HTTP front door (:8080 → Magento) |
php |
PHP 8.3-FPM + Composer + Magento CLI |
cron |
Runs bin/magento cron:run every minute |
db |
MariaDB 11.4 |
opensearch |
OpenSearch 2.19 (catalog search) |
redis |
Cache, FPC, sessions |
rabbitmq |
Message queue (+ management UI) |
mailpit |
Catches all store email (SMTP + UI) |
Application code lives in ./src (bind-mounted to /var/www/html).
Copy .env.example → .env and adjust ports, DB credentials, admin user, and BASE_URL as needed. Re-run make setup after a clean destroy, or use Magento CLI for config changes on an existing install.
OpenSearch won't start / OOM
Raise Docker memory to ≥ 8 GB. Heap is capped at 512m via OPENSEARCH_JAVA_OPTS.
Port already in use
Change the matching *_PORT in .env and restart with make down && make up.
Admin login asks for 2FA
Setup disables Magento_TwoFactorAuth. Re-disable if needed:
./bin/magento module:disable Magento_TwoFactorAuth
make flushPermissions / Composer errors
CLI runs as www-data (UID 1000). If host files are root-owned:
docker compose exec -u root php chown -R www-data:www-data /var/www/html
Re-run install from scratch
make destroy
rm -rf src
mkdir src
make setupDeveloper mode is the default. For a production-like build:
make prodThat sets production mode, runs setup:di:compile, deploys static content, and flushes cache. Switch back with:
./bin/magento deploy:mode:set developer