Skip to main content
Version: 0.5.4

Drupal on Aruba Cloud

Deploy Drupal 10 — a flexible, enterprise-grade open-source CMS — on Aruba Cloud using Terraform and cloud-init. Drupal is installed via Composer with a managed MySQL 8.0 DBaaS backend, following the same production pattern as the WordPress example.

Provider version: arubacloud/arubacloud ~> 0.5 | Terraform: ≥ 1.9


Introduction​

Drupal 10 is built on the drupal/recommended-project Composer template, which bundles Drupal core, Drush (the Drupal CLI), and sensible defaults for production. This example provisions:

  • Apache2 + PHP 8.1 with all Drupal-required extensions
  • Drupal 10 installed via Composer + Drush in fully unattended mode
  • Managed MySQL 8.0 via ArubaCloud DBaaS — Drupal never touches raw SQL
  • Ports 80 and 443 open to the internet
  • Optional HTTPS via Let's Encrypt when domain is set

Bootstrap time: Composer downloads ~80 MB of PHP packages. Expect 15–20 minutes before the site is reachable.


Architecture Overview​


Infrastructure Created​

ResourceName patternDescription
arubacloud_projectdrupal-prodProject container
arubacloud_vpcdrupal-prod-vpcVirtual Private Cloud
arubacloud_subnetdrupal-prod-subnetBasic subnet
arubacloud_securitygroupdrupal-prod-vm-sgVM security group
arubacloud_securitygroupdrupal-prod-dbaas-sgDBaaS security group
arubacloud_securityruledrupal-prod-vm-sshSSH ingress
arubacloud_securityruledrupal-prod-vm-httpHTTP ingress TCP 80
arubacloud_securityruledrupal-prod-vm-httpsHTTPS ingress TCP 443
arubacloud_securityruledrupal-prod-db-mysqlMySQL ingress from VM IP only
arubacloud_elasticipdrupal-prod-vm-eipVM public IP
arubacloud_elasticipdrupal-prod-dbaas-eipDBaaS public IP
arubacloud_blockstoragedrupal-prod-boot40 GB boot disk (Performance)
arubacloud_keypairdrupal-prod-keypairSSH public key
arubacloud_dbaasdrupal-prod-dbaasManaged MySQL 8.0
arubacloud_databasedrupalDrupal database
arubacloud_dbaasuserdrupalDrupal DB user
arubacloud_cloudserverdrupal-prod-vmCloudServer VM

Estimated Monthly Cost​

ResourceSpecEst. cost/mo
CloudServer VMCSO4A8 — 4 vCPU / 8 GB~€35
Boot disk40 GB Performance~€6
Elastic IP (VM)—~€3
MySQL DBaaSDBO2A8 + 20 GB~€30
Elastic IP (DBaaS)—~€3
Total~€77/mo

Requirements​

  • Terraform ≥ 1.9
  • ArubaCloud Terraform Provider ~> 0.5
  • An ArubaCloud account with OAuth2 API credentials
  • An SSH key pair

Variables​

Required​

VariableDescription
arubacloud_client_idArubaCloud OAuth2 client ID
arubacloud_client_secretArubaCloud OAuth2 client secret
ssh_public_keySSH public key content
db_passwordDrupal MySQL user password (min 16 chars)
admin_emailDrupal admin email address
admin_passwordDrupal admin password (min 16 chars)

Optional​

VariableDefaultDescription
app_name"drupal"Short name used in all resource names
environment"prod"Environment label
location"ITBG-Bergamo"ArubaCloud region
zone"ITBG-1"Availability zone
billing_period"Hour""Hour" or "Month"
vm_flavor"CSO4A8"CloudServer flavor
vm_image"LU22-001"Boot disk image (Ubuntu 22.04 LTS)
vm_disk_size_gb40Boot disk size in GB
ssh_cidr"0.0.0.0/0"CIDR for SSH — restrict in production
dbaas_flavor"DBO2A8"DBaaS instance flavor
db_storage_gb20DBaaS initial storage size in GB
site_name"My Drupal Site"Site display name
admin_user"admin"Drupal admin username
domain""Domain for automatic Let's Encrypt HTTPS

Outputs​

OutputDescription
site_urlDrupal site URL
admin_urlDrupal admin login URL
vm_public_ipPublic IP address of the VM
ssh_commandSSH command to connect to the VM
db_hostMySQL DBaaS host address

Deployment Instructions​

1. Clone and navigate​

git clone https://github.com/arubacloud/terraform-arubacloud-examples.git
cd terraform-arubacloud-examples/drupal

2. Configure variables​

cp terraform.tfvars.example terraform.tfvars

Set credentials, passwords, and admin email:

db_password = "your-strong-db-password"
admin_email = "admin@example.com"
admin_password = "your-strong-admin-password"

3. Deploy​

terraform init
terraform plan
terraform apply

Bootstrap takes 15–20 minutes — Composer downloads and DBaaS provisioning run in parallel.

4. Access Drupal​

terraform output site_url
terraform output admin_url

Log in with admin_user and admin_password.


Troubleshooting​

Site not loading after apply​

The bootstrap is still running. Check progress:

ssh ubuntu@$(terraform output -raw vm_public_ip)
sudo tail -f /var/log/cloud-init-output.log

Drush site:install failed​

Check if DBaaS was reachable:

nc -zv $(terraform output -raw db_host) 3306
sudo cat /var/log/cloud-init-output.log | grep -A5 "ERROR\|Waiting"

References​