Skip to main content
Version: Next

Nextcloud on Aruba Cloud

Deploy Nextcloud — a self-hosted file sync and collaboration platform — on Aruba Cloud with Apache 2.4, PHP 8.x, Redis for caching, and a Managed MySQL 8.0 DBaaS backend.

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


Introduction​

Nextcloud is a full-featured private cloud platform: file sync, calendar, contacts, document editing, video calls, and more. This example provisions a production-capable single-VM Nextcloud with a managed database — all bootstrapped by cloud-init with no manual steps.


Architecture Overview​


Infrastructure Created​

ResourceDescription
arubacloud_projectnc-prod
arubacloud_cloudservernc-prod-vm — Apache + PHP + Nextcloud
arubacloud_blockstorage80 GB boot disk (user data stored here)
arubacloud_dbaasManaged MySQL 8.0
arubacloud_databasenextcloud logical database
arubacloud_elasticip2× Elastic IPs (VM + DBaaS)
arubacloud_securitygroup2× security groups (VM + DBaaS)

VM Sizing​

Use casevCPURAMDiskFlavor
Personal / small team (< 10 users)48 GB80 GBCSO4A8 (default)
Medium team (10–50 users)816 GB200 GBCSO8A16
Large team1632 GB500 GB+CSO16A32

Estimated Monthly Cost​

ResourceSpecEst. cost/mo
CloudServer VMCSO4A8 — 4 vCPU / 8 GB~€35
Boot disk80 GB Performance~€10
Managed MySQLDBO2A8 — 2 vCPU / 8 GB~€40
DBaaS storage20 GB~€3
Elastic IPs × 2—~€10
Total~€98/mo

Variables​

Required​

VariableDescription
arubacloud_client_idOAuth2 client ID
arubacloud_client_secretOAuth2 client secret
ssh_public_keySSH public key
db_passwordMySQL password (min 16 chars, no newlines)
nc_admin_passwordNextcloud admin password (min 16 chars, no newlines)
nc_admin_emailAdmin email (also for ACME certificate registration)

Optional​

VariableDefaultDescription
domain""Domain for HTTPS — recommended for production
nc_admin_user"ncadmin"Admin username
vm_flavor"CSO4A8"VM size
vm_disk_size_gb80Disk — size for expected data volume
dbaas_flavor"DBO2A8"DBaaS flavor
db_storage_gb20DBaaS storage in GB
ssh_cidr"0.0.0.0/0"SSH CIDR — restrict to your IP

Deployment​

cd terraform-arubacloud-examples/nextcloud
cp terraform.tfvars.example terraform.tfvars
# Fill in passwords, email, optional domain
terraform init && terraform apply

Provisioning takes 12–18 minutes (VM boot + DBaaS + package install + occ install).

terraform output app_url # e.g. https://cloud.example.com
terraform output admin_user
terraform output -raw admin_password

Destroy​

terraform destroy

Security Recommendations​

  1. Always use HTTPS in production. Set domain and point DNS before terraform apply.
  2. Restrict SSH with ssh_cidr.
  3. Enable 2FA in Nextcloud Settings → Security → Two-Factor Authentication.
  4. Back up /var/www/nextcloud/data and the database regularly.
  5. Keep Nextcloud updated — run sudo -u www-data php occ upgrade after updating the files.

Post-Deployment Configuration​

ssh ubuntu@$(terraform output -raw public_ip)

# Check installation status
sudo -u www-data php /var/www/nextcloud/occ status

# Install recommended apps
sudo -u www-data php /var/www/nextcloud/occ app:install contacts
sudo -u www-data php /var/www/nextcloud/occ app:install calendar
sudo -u www-data php /var/www/nextcloud/occ app:install mail

# Set up a cron job for background tasks
echo "*/5 * * * * www-data php /var/www/nextcloud/occ background:cron" | sudo tee /etc/cron.d/nextcloud

Troubleshooting​

Nextcloud maintenance mode​

sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off

Database connection error​

  • Check the DBaaS security rule allows TCP 3306 from the VM IP
  • Verify arubacloud_databasegrant was created
  • Check cloud-init log: sudo tail -100 /var/log/cloud-init-output.log

"Trusted domain" error after changing the IP​

sudo -u www-data php /var/www/nextcloud/occ config:system:set trusted_domains 0 --value="<new-ip>"

References​