๐ 2025 Enterprise Infrastructure Deployment System Overview
This system architecture outlines the full professional-grade development and deployment framework used by JP Robotic LLC for 2025 cloud operations, DevOps automation, and Drupal delivery pipelines.
The full stack is divided into five distinct functional layers, fully isolated using dual WSL2 environments on Windows workstations:
๐ง Environment Structure:
- 1๏ธโฃ Dual WSL Design: Ubuntu for full-stack Drupal development; AlmaLinux for infrastructure automation and Vultr cloud provisioning.
- 2๏ธโฃ Complete Drupal Toolbox: Modern IDEs, debugging, security, testing, AI content tools, DevOps pipelines, commerce integrations, and more.
- 3๏ธโฃ Full Local Drupal 11 Stack: Ubuntu LTS with PHP 8.3, Composer, dual Apache+NGINX, multiple databases, and Docker support.
- 4๏ธโฃ Isolated Ansible Control Node: AlmaLinux 10 for Infrastructure-as-Code automation on Vultr cloud.
- 5๏ธโฃ Vultr Automation Preflight: Automated checks, API key management, SSH credential validation, and key ID extraction for secure provisioning.
This workflow ensures production environments are mirrored exactly, with enterprise-grade scaling, version-controlled automation, governance, security hardening, and Kubernetes-aligned container orchestration planning.
โ ๏ธ Primary Roles:
- Junior Staff: Work exclusively within Ubuntu for Drupal site-building and frontend workflows.
- Senior Ops Staff: Operate within AlmaLinux for cloud automation, orchestration, and cluster control.
๐ This model enables JP Robotic LLC to maximize agility and production stability through strict environment separation.
๐ฏ Dual WSL2 Enterprise Architecture (Strategic Isolation Model)
The JP Robotic LLC WSL2 system uses two isolated Linux environments to maintain clear separation of development and infrastructure roles.
1๏ธโฃ WSL Ubuntu (Drupal Development Environment)
- Ubuntu LTS with full Drupal 11 stack.
- Composer, PHP 8.3, Drush, Apache, NGINX, MariaDB, PostgreSQL.
- GUI tools: phpMyAdmin, Gedit, Nautilus, Xdebug, WebProfiler.
- Docker and DDEV for containerized environments.
- AMPPS supported for rapid PHP prototyping.
- Full IDE integration: PHPStorm, VSCode.
2๏ธโฃ WSL AlmaLinux 10 (Server Automation Control Node)
- Matches Vultr production servers.
- Dedicated Ansible control node for IaC pipelines.
- Server provisioning, OS hardening, firewalls, Cockpit, Podman, Fail2ban, Grafana.
- Portainer for container orchestration.
- NGINX prioritized for Kubernetes ingress alignment.
- Version-controlled playbooks for repeatable deployment.
โ ๏ธ Kubernetes-Aligned Forward Design
- NGINX ingress ready for Kubernetes clusters.
- Podman for daemonless container security.
- Portainer for junior ops training.
๐ฏ Docker Learning Tools
๐ This dual-stack model supports clear professional growth from developer to senior ops roles.
๐ฅ Local Development & IDEs
- DDEV: Docker-based Drupal environment manager.
- Lando: Docker dev environment with Drupal presets.
- DrupalPod: Browser-based full dev.
- GitPod: Cloud IDE for remote Drupal dev.
- Composer: Required PHP dependency manager.
- IDE: PHPStorm, VSCode with Drupal plugins.
๐ Debugging, Profiling & Inspection
- Devel: Inspect config & data.
- Xdebug: Step debugging with IDEs.
- WebProfiler: Query insights.
- Drush: CLI tasks.
- Enable full error reporting in
local.settings.php.
๐งน Code Quality, Linting & Upgrades
- Coder + PHPCS: Coding standards.
- PHPStan Drupal: Static analysis.
- Drupal Rector: Automatic code upgrades.
- Upgrade Status: Readiness checks.
- GrumPHP: Pre-commit checks.
๐งช Testing & Automated QA
- SimplyTest.me: Sandbox builder.
- Drupal Playground: Quick module tests.
- Nightwatch.js: E2E tests.
- PHPUnit: Backend tests.
๐ DevOps, Automation & CI/CD
- GitLab CI, GitHub Actions, Bitbucket Pipelines: Automate builds.
- Robo: Local PHP task runner.
- Terminus, Acquia CLI: Cloud CLI tools.
- Docker Compose, Ansible, Terraform: Infra automation.
๐จ Theming, Design Systems & UX
- Bootstrap Barrio: Popular Bootstrap theme.
- Gin Admin: Modern admin theme.
- UI Patterns: Components in Drupal.
- Layout Builder: Visual page building.
- Storybook: Design system docs.
- Figma: Design handoffs.
๐ก Security & Performance
- Security Review: Automated scans.
- Cloudflare WAF, ModSecurity: Web firewall.
- HSTS, CSP, HTTPS: Best practices.
- Redis, Memcached: Caching layers.
- Varnish: HTTP acceleration.
- Blackfire.io, Tideways: PHP profiling.
๐บ APIs, Headless & Decoupled
- JSON:API: Core REST API.
- GraphQL: Flexible headless API.
- Subrequests: HTTP2 backend aggregation.
- Next.js, Nuxt, Astro, Gatsby, SvelteKit: Frontend frameworks.
๐ค AI, Content Automation & ML
- OpenAI Module: GPT content generation.
- Whisper: Audio transcription.
- AI media tagging: Image analysis.
- DeepL, Google Translate API: Auto-translation.
๐ Monitoring & Logs
- New Relic: Full app monitoring.
- Prometheus + Grafana: Metric visualization.
- ELK Stack: Log analysis.
- Sentry.io: Error tracking.
๐ Community & Contribution
- Drupal Slack: Live chat.
- Mentoring Program: New contributor help.
- Core Issue Queues: Contribute patches.
๐ฐ Commerce & SaaS
- Drupal Commerce: Full eCommerce.
- Stripe, PayPal, Authorize.net: Payment gateways.
- Salesforce, HubSpot, Mautic, Mailchimp: CRM & marketing integrations.
โ๏ธ Config Management
- Config Split: Per-environment configs.
- Config Ignore: Prevent sensitive overrides.
- Config Readonly: Lock production configs.
โฟ Accessibility
- Siteimprove, axe-core, WAVE: WCAG scans.
- Color contrast testing: Design checks.
- Accessibility Module: Manual audits.
๐ฅ 2025 Pro Tips
- Track Drupal Core Release Cycles.
- Export configs early (drush cex/cim).
- Separate site building from custom modules.
- Adopt CI & regression tests.
- Profile staging performance regularly.
๐ฏ Audience
A step-by-step, professional Drupal 11 development stack for Windows using WSL2, Docker, GUI tools, Composer, and modern best practices.
โ๏ธ System Requirements
- Windows 10 (21H2+) or Windows 11
- Admin rights on Windows
- Good internet connection
๐พ Disk Space Estimates
- WSL2 + Ubuntu: ~2 GB
- PHP + Apache + NGINX: ~1 GB
- MariaDB + PostgreSQL: ~1.5 GB
- GUI Tools: ~2 GB
- Drupal (per project): ~500 MB
- PHPStorm IDE: ~1.5 GB
- Docker Desktop: ~4 GB
- Full stack: ~12โ14 GB
๐ Install WSL2 + Ubuntu
wsl --install
wsl --update๐ฅ Verify WSL & GUI (WSLg)
wsl --version
wsl -d Ubuntu
echo $WAYLAND_DISPLAY
sudo apt install -y x11-apps
xeyes๐ Update Ubuntu Packages
sudo apt update && sudo apt upgrade -y
sudo apt install -y git curl unzip wget๐ฆ Install PHP 8.3 + Composer
sudo apt install -y php php-cli php-fpm php-curl php-gd php-mbstring php-xml php-zip php-soap php-bcmath php-intl php-mysql php-pgsql php-opcache
sudo apt install -y composer
composer self-update๐ Install Databases
sudo apt install -y mariadb-server mariadb-client
sudo service mariadb start
sudo apt install -y postgresql postgresql-contrib
sudo service postgresql start๐ Install Apache + NGINX
sudo apt install -y apache2 nginx
sudo service apache2 start
sudo service nginx start
sudo nano /etc/apache2/ports.conf # Change to Listen 8080
sudo service apache2 restartโ Verify Components
uname -a
php -v
composer --version
sudo service mariadb status
sudo service postgresql status
sudo service apache2 status
sudo service nginx status๐ง Install Drupal 11
mkdir ~/drupal-dev && cd ~/drupal-dev
composer create-project drupal/recommended-project mysite
cd mysite
cp web/sites/default/default.settings.php web/sites/default/settings.php
chmod -R 755 web/sites
touch web/sites/default/services.yml๐ Install phpMyAdmin
sudo apt install phpmyadmin
sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin๐ฅ Install GUI Tools
sudo apt install nautilus
geditTip: Use standalone apps; XFCE not recommended.
๐งน Install Drush
cd ~/drupal-dev/mysite
composer require drush/drush
vendor/bin/drush status๐ก Debugging & WebProfiler
sudo apt install php-xdebugEnable WebProfiler in Drupal Admin.
๐ Docker/DDEV (Optional)
- Install Docker Desktop (with WSL2 integration).
- Install DDEV for local containers.
๐ Daily Startup Cheat Sheet
wsl
sudo service apache2 start
sudo service nginx start
sudo service mariadb start
sudo service postgresql startOptional GUI:
nautilus &
gedit &๐ Access URLs
- NGINX Drupal: http://localhost
- Apache Drupal: http://localhost:8080
- phpMyAdmin: /phpmyadmin paths match web server.
โ Final Checklist
- WSL2 installed
- PHP, Composer, Drush verified
- Databases running
- Apache & NGINX dual stack working
- Drupal 11 via Composer
- phpMyAdmin accessible
- GUI tools functional
- Docker/DDEV ready (optional)
๐ Master Stack Complete!
You now have a full, enterprise-grade Drupal 11 stack on Windows, ready for serious development and teaching.
๐ฏ Purpose
Run an isolated Ansible automation control node inside WSL2 using AlmaLinux 10. This matches Vultr production servers for professional Infrastructure-as-Code.
โ๏ธ Requirements
- Windows 10 (21H2+) or Windows 11
- WSL2 installed and working
- Vultr cloud account for provisioning
๐ Install AlmaLinux 10 in WSL2
wsl --install -d AlmaLinuxOr list available distros:
wsl --list --online
wsl --install -d almalinux-10๐ Verify Installation
wsl --version
wsl -d AlmaLinux
whoami๐ฆ Update Packages & Enable Repos
sudo -i
dnf update -y
dnf install epel-release -y
/usr/bin/crb enable๐ Install nano (optional)
dnf install nano -y๐ Install Python & pip
dnf install python3 python3-pip -y
python3 -m pip install --upgrade --user pip๐งฐ Install Ansible
python3 -m pip install --user ansible
echo 'export PATH=$PATH:$HOME/.local/bin' >> ~/.bashrc
source ~/.bashrc
ansible --version๐ Ansible Workspace Structure
mkdir -p ~/ansible/{inventories,playbooks,roles,files}๐ Generate SSH Key
ssh-keygen -t ed25519 -C "vultr-alma10-bootstrap"
cat ~/.ssh/id_ed25519.pubUpload your public key to Vultr SSH Keys.
๐ Create Inventory File
nano ~/ansible/inventories/hosts.ini[all]
vultr1 ansible_host=YOUR_VULTR_IP ansible_user=root๐ Create ansible.cfg
nano ~/ansible/ansible.cfg[defaults]
inventory = ./inventories/hosts.ini
host_key_checking = False
retry_files_enabled = False
forks = 10
interpreter_python = auto_silentโ Stage 1 Complete
Your AlmaLinux control node is now fully configured for Vultr automation.
๐ Stage 2: Use the Ansible Control Node
๐ Enter AlmaLinux
wsl -d AlmaLinux๐ Enter Ansible Directory
cd ~/ansible
ls -la๐งช Verify Ansible
ansible --version๐ง Test Connection
ansible all -m pingโถ Run a Playbook
ansible-playbook playbooks/bootstrap.yml๐ก Tips
- Playbooks:
~/ansible/playbooks/ - Roles:
~/ansible/roles/ - Inventory:
~/ansible/inventories/hosts.ini
๐ Fully Operational
Youโre ready to provision, configure, and manage Vultr servers with Infrastructure-as-Code workflows!
โ Preflight Directory Setup
mkdir -p ~/ansible/group_vars/all ~/ansible/playbooks ~/ansible/inventories ~/ansible/files ~/ansible/rolesโ Generate Vultr SSH Key
mkdir -p ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t ed25519 -C "vultr-alma10-bootstrap"
cat ~/.ssh/id_ed25519.pubUpload your public key to Vultrโs SSH Keys panel.
โ Create Preflight Check Script
cd ~/ansible
nano preflight-check.shPaste the following:
#!/bin/bash
echo "========== Ansible Control Node Preflight =========="
# WSL Check
grep -q "microsoft" /proc/version && echo "โ
Running inside WSL" || { echo "โ Not WSL"; exit 1; }
# AlmaLinux Check
grep -q "AlmaLinux" /etc/os-release && echo "โ
AlmaLinux detected" || { echo "โ Not AlmaLinux"; exit 1; }
# Python
command -v python3 &>/dev/null && echo "โ
Python installed" || { echo "โ Python missing"; exit 1; }
# Ansible
command -v ansible &>/dev/null && echo "โ
Ansible installed" && ansible --version | head -n 1 || { echo "โ Ansible missing"; exit 1; }
# Vultr Collection
ansible-galaxy collection list | grep -q "vultr.cloud" && echo "โ
Vultr collection installed" || { echo "โ Vultr collection missing"; exit 1; }
# Credentials
[ -f "$HOME/ansible/group_vars/all/vultr.yml" ] && echo "โ
vultr.yml exists" || { echo "โ vultr.yml missing"; exit 1; }
grep -q "vultr_api_key" "$HOME/ansible/group_vars/all/vultr.yml" && echo "โ
Vultr API key present" || { echo "โ API key missing"; exit 1; }
# ansible.cfg
[ -f "$HOME/ansible/ansible.cfg" ] && echo "โ
ansible.cfg found" || { echo "โ ansible.cfg missing"; exit 1; }
# SSH Key
[ -f "$HOME/.ssh/id_ed25519" ] && echo "โ
SSH key found" || { echo "โ SSH key missing"; exit 1; }
# Inventory
[ -f "$HOME/ansible/inventories/hosts.ini" ] && echo "โ
Inventory hosts.ini found" || { echo "โ hosts.ini missing"; exit 1; }
echo "========== Preflight Passed โ
=========="Make it executable:
chmod +x ~/ansible/preflight-check.sh
~/ansible/preflight-check.shโ Install jq & Create Vultr ID Extractor
sudo dnf install jq -y
cd ~/ansible
nano get-vultr-key-id.shPaste this:
#!/bin/bash
read -p "Enter your Vultr API key: " APIKEY
curl -s -H "Authorization: Bearer $APIKEY" https://api.vultr.com/v2/ssh-keys | \
jq -r '.ssh_keys[] | "\(.name): \(.id)"'Make executable:
chmod +x ~/ansible/get-vultr-key-id.sh
~/ansible/get-vultr-key-id.shโ Vultr Credentials File Reminder
In ~/ansible/group_vars/all/vultr.yml:
vultr_api_key: "YOUR-VALID-API-KEY"
vultr_ssh_key_id: "YOUR-SSH-KEY-ID"โ Optional: WSL AlmaLinux GUI Layer
Add Nautilus & GNOME utilities for occasional visual file management:
sudo dnf groupinstall "Server with GUI" -y
sudo dnf install xorg-x11-server-Xorg mesa-dri-drivers vulkan vulkan-loader -y
sudo dnf install gnome-terminal nautilus gedit xeyes -yRun Nautilus:
nautilus &๐งฎ Resource Notes
- Download: ~900 MB
- Disk usage: ~2 GB total
- Uses RAM only when GUI apps run
๐ฏ Summary
โ You now have:
- Full Ansible preflight checks
- Vultr SSH Key ID extractor
- Optional Nautilus GUI for easier YAML editing & file management
- Zero impact on production automation