Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
c4eb880
Enable manually run build documentation in github actions
rbouma Sep 10, 2024
557657a
Refactored config loading with more dynamic loading of config files
rbouma Jun 4, 2025
fa758df
Added help files of version and install commands
rbouma Jun 4, 2025
a077b4c
Added new system for better command registry and auto discovery on ma…
rbouma Jun 4, 2025
f4cba0d
added docs for new registry system
rbouma Jun 4, 2025
0410ba4
update to new workflows
rbouma Jun 4, 2025
0c9a701
update backup and restore commands
rbouma Jun 4, 2025
3184637
update backup and restore commands docs
rbouma Jun 4, 2025
e217976
fix issue with user permissions
rbouma Jun 4, 2025
a7dab3d
fix encryption for backups
rbouma Jun 4, 2025
f42e996
fixes in backup / restore commands
rbouma Jun 4, 2025
e686fb1
fix in parameters in printf
rbouma Jun 4, 2025
ef85c28
Add environment duplication command
rbouma Jun 4, 2025
e1cc791
Fix parsing newline in status and correct install doc url
rbouma Jun 5, 2025
d05afb5
docs: fix typo in redis usage
rbouma Jun 5, 2025
1bfee0c
Fix mongodb env vars
rbouma Jun 5, 2025
0e5544b
Fix comment typo
rbouma Jun 5, 2025
446e2f4
Add shellcheck workflow
rbouma Jun 5, 2025
7d18d2f
Merge pull request #4 from dockergiant/codex/herstel-een-bug-in-de-co…
rbouma Jun 5, 2025
1233695
Merge pull request #5 from dockergiant/fast/fix-typo-in-docs/usage.md
rbouma Jun 5, 2025
efac482
Merge pull request #6 from dockergiant/fast/swap-mongo_initdb-values
rbouma Jun 5, 2025
2902545
Merge pull request #7 from dockergiant/fast/update-comments-in-env.cm…
rbouma Jun 5, 2025
22b3af3
Merge pull request #8 from dockergiant/fast/create-shellcheck-workflo…
rbouma Jun 5, 2025
196fe19
fixed issues with backup and restoring + full duplication command wor…
rbouma Jun 5, 2025
8103691
Merge pull request #9 from dockergiant/rebuild-config-and-command-loa…
rbouma Jun 5, 2025
cead4c6
Merge pull request #10 from dockergiant/advanced-rebuild-backup-resto…
rbouma Jun 5, 2025
9698a09
Tagged 0.3
invalid-email-address Jun 5, 2025
f75e888
add duplication docs
rbouma Jun 5, 2025
96bbb30
docs: add decrypt examples for restore-full
rbouma Jun 6, 2025
a446252
Show running services in status
rbouma Jun 6, 2025
8b13f22
Fix status command for macOS compatibility
rbouma Jun 10, 2025
b24df26
Fix last network lookup in status command
rbouma Jun 10, 2025
d503467
Merge pull request #12 from dockergiant/fast/fix-roll-status-command-…
rbouma Jun 10, 2025
ba1776f
Require explicit archive path for restore-full
rbouma Jun 10, 2025
2ad6776
Fix restore-full argument handling
rbouma Jun 10, 2025
42145d8
remove redundant exclude patterns from backup command
rbouma Jun 10, 2025
cecf4c6
use passphrase-fd for gpg decryption to handle password escaping and …
rbouma Jun 10, 2025
4841025
improve backup ID extraction logic to handle warnings in command output
rbouma Jun 10, 2025
9983567
add restore-full command to ROLL_CMD_ANYARGS list
rbouma Jun 10, 2025
bba42a5
Merge pull request #11 from dockergiant/fast/update-restore-command-t…
rbouma Jun 10, 2025
bc804af
Tagged 0.3.1
invalid-email-address Jun 10, 2025
0d3ea19
add magento2-init command, improve usage loading with dynamic paths, …
rbouma Jun 10, 2025
a028ac1
add magento2-init command for project initialization with dynamic con…
rbouma Jun 10, 2025
e0c03b6
add extensive documentation for magento2-init command, including a qu…
rbouma Jun 11, 2025
6cdd279
Tagged 3.2
invalid-email-address Jun 11, 2025
76299c2
Tagged 0.3.2
invalid-email-address Jun 11, 2025
e74fae0
add RedisInsight support to roll-docker-stack with configuration, env…
rbouma Jun 16, 2025
7107268
add comprehensive README to roll-docker-stack with installation steps…
rbouma Jun 16, 2025
1b8e57d
add comprehensive README to roll-docker-stack with installation steps…
rbouma Jun 16, 2025
e5c445b
Merge branch 'main' of github.com:dockergiant/rolldev
rbouma Jun 16, 2025
94a8e2b
Tagged 0.4.0
invalid-email-address Jun 16, 2025
3ad13c6
fix: resolve Magento 2.4.8+ 2FA configuration bug in magento2-init
rbouma Jun 19, 2025
085cda5
Merge branch 'main' of github.com:dockergiant/rolldev
rbouma Jun 19, 2025
1a1f746
Tagged 0.4.1
invalid-email-address Jun 19, 2025
a92428c
update: switch elasticvue to official image and adjust configuration
rbouma Jun 22, 2025
ac4c7ee
Tagged 0.4.2
invalid-email-address Jun 22, 2025
bb559f1
Update README
rbouma Aug 19, 2025
5ec5a3d
fix: handle empty projectNetworkList in status.cmd to avoid errors
rbouma Aug 19, 2025
d39b4b0
Tagged 0.4.3
invalid-email-address Aug 19, 2025
b88b1ac
add: New Relic monitoring configuration to all environment init files
rbouma Sep 11, 2025
50c7c84
remove: Blackfire profiling documentation from roll-docker-stack
rbouma Sep 11, 2025
d82f9b6
add: documentation for enabling New Relic monitoring with configurati…
rbouma Sep 11, 2025
02383d2
Merge branch 'main' of github.com:dockergiant/rolldev
rbouma Sep 11, 2025
e129c66
update: refine New Relic PHP agent documentation and add environment …
rbouma Sep 13, 2025
64f7168
Tagged 0.5.0
invalid-email-address Sep 13, 2025
b373514
add: multistore command for managing Magento multi-store configuratio…
rbouma Dec 10, 2025
27e387e
Tagged 0.5.1
invalid-email-address Dec 10, 2025
822b6e2
add: describe command to display RollDev environment details, includi…
rbouma Dec 10, 2025
5b128a1
add: describe subcommand to env.cmd and enhance multistore documentat…
rbouma Dec 10, 2025
28b9e56
Merge branch 'main' of github.com:dockergiant/rolldev
rbouma Dec 10, 2025
4bdb7c3
Tagged 0.5.2
invalid-email-address Dec 10, 2025
0af1b7a
fix: handle help flag to properly support commands with arguments
rbouma Dec 19, 2025
41b4755
Merge branch 'main' of github.com:dockergiant/rolldev
rbouma Dec 19, 2025
8524330
add: verbose logging support for restore and restore-full commands + …
rbouma Jan 19, 2026
6ddb218
update: remove Traefik version pinning in docker-compose and fix inde…
rbouma Jan 19, 2026
750d732
add: automated SSL certificate signing for environment domains in res…
rbouma Jan 19, 2026
f8bc097
update: refine Traefik rules for host matching v3 and add Traefik con…
rbouma Jan 19, 2026
70d04b9
add: enhance Magento multi-store support with extended docs, `multist…
rbouma Jan 19, 2026
dc17d46
Tagged 0.6.0
invalid-email-address Jan 19, 2026
3f7c5c8
update: improve logging in restore/restore-full commands for better p…
rbouma Jan 19, 2026
3f2035b
Merge branch 'main' of github.com:dockergiant/rolldev
rbouma Jan 19, 2026
4bae5e7
Tagged 0.6.1
invalid-email-address Jan 19, 2026
ba026da
update: simplify archive extraction for cross-platform compatibility …
rbouma Jan 25, 2026
8d667f4
Tagged 0.6.2
invalid-email-address Jan 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 14 additions & 5 deletions .github/workflows/build-documentation.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
name: Build documentation
on:
workflow_dispatch:
push:
paths:
- docs/**
Expand All @@ -12,13 +13,21 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Run Sphinx documentation build
uses: ammaraskar/sphinx-action@0.4
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
docs-folder: "docs/"
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r docs/requirements.txt
- name: Build documentation with Sphinx
run: |
cd docs
sphinx-build -b html . _build/html
- name: Upload documentation artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: documentation
path: docs/_build/html/
24 changes: 16 additions & 8 deletions .github/workflows/pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ on:
paths:
- docs/**
- .github/workflows/build-documentation.yml
- .github/workflows/pages.yml
- CHANGELOG.md

# Allows you to run this workflow manually from the Actions tab
Expand All @@ -33,18 +34,25 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Setup Pages
uses: actions/configure-pages@v3
- name: Run Sphinx documentation build
uses: ammaraskar/sphinx-action@0.4
uses: actions/configure-pages@v5
- name: Set up Python
uses: actions/setup-python@v5
with:
docs-folder: "docs/"
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r docs/requirements.txt
- name: Build documentation with Sphinx
run: |
cd docs
sphinx-build -b html . _build/html
- name: Upload artifact
uses: actions/upload-pages-artifact@v1
uses: actions/upload-pages-artifact@v3
with:
# Upload entire repository
path: 'docs/_build/html/'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v1
uses: actions/deploy-pages@v4
2 changes: 1 addition & 1 deletion .github/workflows/push-release-to-brew.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ jobs:
update-homebrew:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
token: ${{ secrets.TOKEN }}
repository: dockergiant/homebrew-roll
Expand Down
24 changes: 24 additions & 0 deletions .github/workflows/shellcheck.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: ShellCheck
on:
push:
paths:
- 'commands/*.cmd'
- 'utils/*.sh'
- '.github/workflows/shellcheck.yml'
pull_request:
paths:
- 'commands/*.cmd'
- 'utils/*.sh'
- '.github/workflows/shellcheck.yml'
workflow_dispatch:

jobs:
shellcheck:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Install shellcheck
run: sudo apt-get update && sudo apt-get install -y shellcheck
- name: Run shellcheck
run: shellcheck commands/*.cmd utils/*.sh
2 changes: 1 addition & 1 deletion .github/workflows/tag-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
create-tag:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Update Files
env:
VERSION: ${{ inputs.version }}
Expand Down
115 changes: 114 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,114 @@
# roll-docker-stack
# Roll Docker Stack

🚀 **A powerful, flexible Docker development environment for modern web applications**

Roll Docker Stack provides pre-configured Docker environments for various frameworks and CMS platforms, making it easy to spin up consistent development environments with all the tools you need.

## 🌟 Features

- **Multi-Framework Support**: Magento 2, Laravel, Symfony, TYPO3, Shopware, WordPress, and more
- **Service Integration**: PHP-FPM, Nginx, MySQL/MariaDB, Redis, Elasticsearch, RabbitMQ, Varnish
- **Developer Tools**: Xdebug, MailPit (Better Mailhog Alternative), Redis Insight, ElasticVue, and more
- **Cross-Platform**: macOS, Linux, and Windows (WSL2) support
- **Local Development**: Optimized for local development environments
- **Easy Configuration**: Environment-specific settings with sensible defaults

## 🚀 Installation

### Installing via Homebrew (Recommended)

RollDev may be installed via Homebrew on both macOS and Linux hosts:

```bash
brew install dockergiant/roll/roll
roll svc up
```

**Updating via Homebrew:**
```bash
brew upgrade dockergiant/roll/roll
roll svc restart
```


### Windows Installation (via WSL2)

1. Install and enable WSL2 in Windows 10
2. Install Ubuntu 20.04 or other compatible Linux version from the Windows store
3. Launch Docker for Windows, ensure WSL2 integration is enabled
4. Launch WSL from your terminal:

```bash
wsl
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
brew install dockergiant/roll/roll
roll svc up
```

> **⚠️ Performance Warning**: For optimal performance, code should be located in the WSL Linux home path (`~/code/projectname`) NOT the default `/mnt/c` path mapping.

> **💡 GUI Tools**: Windows GUI tools should use network paths: `\\wsl$\Ubuntu-20.04\home\<USER>\<PROJECTPATH>`

## ⚙️ Next Steps

### Automatic DNS Resolution

- **Linux**: Configure DNS to resolve `*.test` to `127.0.0.1` or use `/etc/hosts` entries
- **macOS**: Automatic via BSD per-TLD resolver at `/etc/resolver/test`
- **Windows**: Manual configuration of network adapter DNS server required

### Trusted CA Root Certificate

RollDev uses a CA root certificate for trusted SSL certificates. The CA root is located at `~/.roll/ssl/rootca/certs/ca.cert.pem`.

- **macOS**: Automatically added to Keychain (search for 'RollDev Proxy Local CA')
- **Linux**: Added to system trust bundle automatically
- **Firefox**: Import CA manually via Preferences → Privacy & Security → View Certificates → Authorities → Import
- **Chrome (Linux)**: Import CA via Settings → Privacy And Security → Manage Certificates → Authorities → Import

## 📚 Full Documentation

For complete installation instructions, configuration options, troubleshooting, and advanced usage, visit our comprehensive documentation:

**👉 [dockergiant.github.io/rolldev](https://dockergiant.github.io/rolldev)**

## 🛠️ Supported Environments

- **Magento 2** - Complete e-commerce development stack
- **Magento 1** - Legacy Magento support
- **Laravel** - Modern PHP framework environment
- **Symfony** - Professional PHP development
- **TYPO3** - Enterprise CMS platform
- **Shopware** - E-commerce platform
- **WordPress** - Popular CMS environment
- **Akeneo** - PIM platform support
- **PHP** - Generic PHP development environment

## 🤝 Contributing

We welcome contributions! Please see our [contribution guidelines](https://dockergiant.github.io/rolldev/contributing/) for details.

## 📄 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## 🔗 Links

- **Documentation**: [dockergiant.github.io/rolldev](https://dockergiant.github.io/rolldev)
- **CLI Repository**: [github.com/dockergiant/rolldev](https://github.com/dockergiant/rolldev)
- **Issues**: [github.com/dockergiant/rolldev/issues](https://github.com/dockergiant/rolldev/issues)
- **Container Packages**: [github.com/orgs/dockergiant/packages](https://github.com/orgs/dockergiant/packages?repo_name=rolldev)

---

<img src="https://files.disrex.nl/disrex-character.gif?t=572693425" alt="Disrex T-Rex Mascot Waving" width="150">

## Sponsored by

<picture>
<source srcset="https://files.disrex.nl/logos/logo-w.png" media="(prefers-color-scheme: dark)">
<img src="https://files.disrex.nl/logos/logo-b.png" alt="Disrex Logo" width="200">
</picture>


**Made with ❤️**
44 changes: 13 additions & 31 deletions bin/roll
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ readonly ROLL_DIR="$(
&& pwd
)"
source "${ROLL_DIR}/utils/core.sh"
source "${ROLL_DIR}/utils/config.sh"
source "${ROLL_DIR}/utils/registry.sh"
source "${ROLL_DIR}/utils/env.sh"

## verify docker is installed
Expand All @@ -38,45 +40,23 @@ declare ROLL_PARAMS=()
declare ROLL_CMD_VERB=
declare ROLL_CMD_EXEC=
declare ROLL_CMD_HELP=
declare ROLL_CMD_ANYARGS=(svc env db redis sync shell debug rootnotty rootshell clinotty root node npm cli copyfromcontainer copytocontainer composer grunt magento magerun)
declare ROLL_CMD_ANYARGS=(svc env db redis sync shell debug rootnotty rootshell clinotty root node npm cli copyfromcontainer copytocontainer composer grunt magento magerun backup restore restore-full duplicate magento2-init tapsync)

## parse first argument as command and determine validity
if (( "$#" )); then
## local project directory if running within one; don't fail if it can't be found
ROLL_ENV_PATH="$(locateEnvPath 2>/dev/null)" || true
ROLL_ENV_TYPE="$(renderEnvType 2>/dev/null)" || true

if [[ -f "${ROLL_HOME_DIR}/reclu/${1}.cmd" ]]; then
# Use registry system for command discovery
COMMAND_RESULT="$(findCommand "$1")"

if [[ "$COMMAND_RESULT" =~ ^found: ]]; then
ROLL_CMD_VERB="$1"
ROLL_CMD_EXEC="${ROLL_HOME_DIR}/reclu/${1}.cmd"
ROLL_CMD_HELP="${ROLL_HOME_DIR}/reclu/${1}.help"
shift
elif [[ -f "${ROLL_HOME_DIR}/reclu/${ROLL_ENV_TYPE}/${1}.cmd" ]]; then
ROLL_CMD_VERB="$1"
ROLL_CMD_EXEC="${ROLL_HOME_DIR}/reclu/${ROLL_ENV_TYPE}/${1}.cmd"
ROLL_CMD_HELP="${ROLL_HOME_DIR}/reclu/${ROLL_ENV_TYPE}/${1}.help"
shift
elif [[ -f "${ROLL_DIR}/commands/${1}.cmd" ]]; then
ROLL_CMD_VERB="$1"
ROLL_CMD_EXEC="${ROLL_DIR}/commands/${1}.cmd"
ROLL_CMD_HELP="${ROLL_DIR}/commands/${1}.help"
shift
elif [[ -f "${ROLL_DIR}/commands/${ROLL_ENV_TYPE}/${1}.cmd" ]]; then
ROLL_CMD_VERB="$1"
ROLL_CMD_EXEC="${ROLL_DIR}/commands/${ROLL_ENV_TYPE}/${1}.cmd"
ROLL_CMD_HELP="${ROLL_DIR}/commands/${ROLL_ENV_TYPE}/${1}.help"
shift
elif [[ -f "${ROLL_ENV_PATH}/.roll/commands/${1}.cmd" ]]; then
ROLL_CMD_VERB="$1"
ROLL_CMD_ANYARGS+=("$1")
ROLL_CMD_EXEC="${ROLL_ENV_PATH}/.roll/commands/${1}.cmd"
ROLL_CMD_HELP="${ROLL_ENV_PATH}/.roll/commands/${1}.help"
shift
elif [[ -f "${ROLL_HOME_DIR}/commands/${1}.cmd" ]]; then
ROLL_CMD_VERB="$1"
ROLL_CMD_ANYARGS+=("$1")
ROLL_CMD_EXEC="${ROLL_HOME_DIR}/commands/${1}.cmd"
ROLL_CMD_HELP="${ROLL_HOME_DIR}/commands/${1}.help"
# Extract cmd_path and help_path from "found:cmd_path:help_path"
COMMAND_RESULT="${COMMAND_RESULT#found:}"
ROLL_CMD_EXEC="${COMMAND_RESULT%%:*}"
ROLL_CMD_HELP="${COMMAND_RESULT#*:}"
shift
else
ROLL_HELP=1
Expand All @@ -89,6 +69,8 @@ fi
while (( "$#" )); do
case "$1" in
-h|--help)
## pass --help to command if it accepts any args, otherwise show roll help
containsElement "${ROLL_CMD_VERB}" "${ROLL_CMD_ANYARGS[@]}" && break
ROLL_HELP=1
break
;;
Expand Down
Loading