Acquia

Drupal-based enterprise cloud platform. Supports building, operating, and optimizing Drupal sites.

CMSEnterpriseDrupalPHPCloud PlatformDevOpsHosting
License
Commercial
Language
PHP (Drupal)
Pricing
Paid only
Official Site
Visit Official Site

CMS

Acquia

Overview

Acquia is a Drupal-based enterprise cloud platform that comprehensively supports the building, operation, and optimization of Drupal sites.

Details

Acquia is an enterprise-grade cloud platform specialized for Drupal. It combines Drupal core with advanced features developed by Acquia to support the building and operation of large-scale websites and applications. Acquia Cloud Platform provides an integrated offering of Drupal-optimized hosting environment, CI/CD, security management, and performance monitoring. Widely adopted especially by government agencies, universities, and non-profit organizations, it is the only FedRAMP-certified Drupal platform. In 2024, it began supporting Drupal 11 and provides innovative tools such as Acquia Code Studio (full-stack development platform), Acquia Cloud IDE (Web IDE), and Acquia Site Studio (low-code site builder). It is the largest contributor to the Drupal community and the only Drupal certification provider.

Pros and Cons

Pros

  • Drupal expertise: Deep specialization and support focused on Drupal
  • High-performance hosting: 7 global regions, 99.99% SLA
  • Comprehensive DevOps tools: Integrated CI/CD, Git integration, environment management
  • Enterprise security: FedRAMP, HIPAA, PCI, SOC compliance
  • Automated operations: Optimized deployment and scaling
  • 24/7 expert support: Continuous support from Drupal specialists
  • Integrated development environment: Code Studio, Cloud IDE, Site Studio

Cons

  • Drupal-only: Does not support other CMS platforms
  • High cost: Starting from $175/month, enterprise plans cost hundreds of thousands of yen or more
  • Vendor lock-in: Dependency on Acquia platform
  • Technical complexity: High learning curve for Drupal
  • Customization limitations: Constraints due to managed service
  • Scale-based costs: Cost increases with traffic growth

Key Links

Usage Examples

Acquia Cloud Environment Setup

# Install Acquia CLI
curl -OL https://github.com/acquia/cli/releases/latest/download/acli.phar
chmod +x acli.phar
sudo mv acli.phar /usr/local/bin/acli

# Authentication setup
acli auth:login

# Create new Drupal project
composer create-project acquia/drupal-recommended-project my-drupal-site
cd my-drupal-site

# Initialize Acquia environment
acli app:new

# Git repository setup
git init
git remote add acquia <acquia-git-url>
git add -A
git commit -m "Initial commit"
git push acquia master

Drupal Module Development

// modules/custom/my_module/my_module.info.yml
name: 'My Custom Module'
type: module
description: 'Custom functionality for Acquia Drupal site'
core_version_requirement: ^9 || ^10 || ^11
package: Custom
dependencies:
  - drupal:node
  - drupal:views
  - drupal:taxonomy

// modules/custom/my_module/src/Controller/MyController.php
<?php

namespace Drupal\my_module\Controller;

use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Cache\CacheableMetadata;

class MyController extends ControllerBase {
  
  protected $entityTypeManager;
  
  public function __construct(EntityTypeManagerInterface $entity_type_manager) {
    $this->entityTypeManager = $entity_type_manager;
  }
  
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('entity_type.manager')
    );
  }
  
  public function content() {
    // Utilizing Acquia cache tags
    $node_storage = $this->entityTypeManager->getStorage('node');
    $nodes = $node_storage->loadByProperties(['status' => 1, 'type' => 'article']);
    
    $build = [
      '#theme' => 'item_list',
      '#items' => [],
      '#title' => $this->t('Latest Articles'),
    ];
    
    foreach ($nodes as $node) {
      $build['#items'][] = [
        '#type' => 'link',
        '#title' => $node->getTitle(),
        '#url' => $node->toUrl(),
      ];
    }
    
    // Acquia cache optimization
    $cache_metadata = new CacheableMetadata();
    $cache_metadata->addCacheTags(['node_list:article']);
    $cache_metadata->addCacheContexts(['url.path', 'user.permissions']);
    $cache_metadata->applyTo($build);
    
    return $build;
  }
}

Acquia Cloud Hooks

#!/bin/bash
# hooks/common/post-code-deploy/update.sh
# Post-code deploy automatic execution script

site="$1"
target_env="$2"
source_branch="$3"
deployed_tag="$4"
repo_url="$5"
repo_type="$6"

# Enable Drupal maintenance mode
drush @$site.$target_env state:set system.maintenance_mode 1 --input-format=integer

# Execute database updates
drush @$site.$target_env updatedb -y

# Import configuration
drush @$site.$target_env config:import -y

# Clear cache
drush @$site.$target_env cache:rebuild

# Disable maintenance mode
drush @$site.$target_env state:set system.maintenance_mode 0 --input-format=integer

# Cache invalidation via Acquia Purge
drush @$site.$target_env ap:purge-all

echo "Deployment completed successfully"

Performance Optimization

// Acquia optimization settings in settings.php
<?php

// Detect Acquia environment
if (isset($_ENV['AH_SITE_ENVIRONMENT'])) {
  // Memcache configuration
  $settings['cache']['default'] = 'cache.backend.memcache';
  $settings['memcache']['servers'] = ['memcached:11211' => 'default'];
  
  // Redis configuration (if available)
  if (extension_loaded('redis')) {
    $settings['redis.connection']['interface'] = 'PhpRedis';
    $settings['redis.connection']['host'] = 'redis';
    $settings['cache']['default'] = 'cache.backend.redis';
  }
  
  // Acquia Search configuration
  $config['search_api.server.acquia_search_server'] = [
    'backend_config' => [
      'connector' => 'standard',
      'connector_config' => [
        'host' => $_ENV['ACQUIA_SEARCH_HOST'],
        'core' => $_ENV['ACQUIA_SEARCH_CORE'],
      ],
    ],
  ];
  
  // CDN configuration
  $config['acquia_purge.settings']['domains'] = [
    $_ENV['AH_SITE_NAME'] . '.prod.acquia-sites.com',
    'www.example.com',
  ];
}

// Performance tuning
$config['system.performance']['cache']['page']['max_age'] = 3600;
$config['system.performance']['css']['preprocess'] = TRUE;
$config['system.performance']['js']['preprocess'] = TRUE;

Site Studio Component Creation

# site_studio/components/hero/hero.yml
name: Hero Component
category: Layout
preview_image: hero.png
fields:
  title:
    type: text
    label: Title
    default: "Welcome to our site"
  subtitle:
    type: textarea
    label: Subtitle
  background_image:
    type: image
    label: Background Image
  cta_text:
    type: text
    label: CTA Button Text
  cta_link:
    type: link
    label: CTA Link
{# site_studio/templates/hero.html.twig #}
<section class="hero-component" style="background-image: url('{{ background_image.url }}')">
  <div class="hero-content">
    <h1>{{ title }}</h1>
    {% if subtitle %}
      <p class="hero-subtitle">{{ subtitle }}</p>
    {% endif %}
    {% if cta_text and cta_link %}
      <a href="{{ cta_link.url }}" class="btn btn-primary">
        {{ cta_text }}
      </a>
    {% endif %}
  </div>
</section>

Security and Compliance

// Custom security module
<?php

namespace Drupal\acquia_security\EventSubscriber;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;

class SecurityHeadersSubscriber implements EventSubscriberInterface {
  
  public static function getSubscribedEvents() {
    return [
      KernelEvents::REQUEST => ['onRequest', 100],
    ];
  }
  
  public function onRequest(RequestEvent $event) {
    $response = $event->getResponse();
    if (!$response) {
      return;
    }
    
    // Add security headers
    $response->headers->set('X-Content-Type-Options', 'nosniff');
    $response->headers->set('X-Frame-Options', 'SAMEORIGIN');
    $response->headers->set('X-XSS-Protection', '1; mode=block');
    $response->headers->set('Referrer-Policy', 'strict-origin-when-cross-origin');
    
    // Additional settings for HIPAA compliance
    if (getenv('ACQUIA_HIPAA_ENABLED')) {
      $response->headers->set('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
      $response->headers->set('Content-Security-Policy', "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';");
    }
  }
}