Skip to main content

CloudForge CMS Guides

Guides for deploying PHP CMS, e-commerce, forum, and LMS applications with CloudForge using the cms-service topology.

What cms-service Provides​

In addition to the resources every CloudForge service gets (VPC, ALB, EFS, ECS service or Auto Scaling group, CloudWatch logs), the cms-service topology reads the CMS plugin's declared capabilities (CmsSpec) and conditionally provisions:

InfrastructureConditionDetails
S3 media bucketCmsSpec.supportsS3MediaStorage()Private, versioned, public access blocked; SSE-S3 (SSE-KMS for production). Bucket name is generated by CloudFormation.
ElastiCache RedisCmsSpec.supportsObjectCache() and preferredCacheBackend() is redisSingle-node Redis 7.0 cluster on port 6379, reachable from the VPC CIDR. Node type: cache.t4g.micro (dev), cache.t4g.medium (staging), cache.r6g.large (production).
CloudFront CDNCmsSpec.supportsCdnIntegration() and an S3 media bucketALB origin for dynamic pages, S3 origin for media paths.
Route53 DNSA hosted zone and a domain/subdomain are configuredA + AAAA alias records.
ECS auto-scalingminInstanceCapacity > 0, maxInstanceCapacity > 1, and enableAutoScaling not falseCPU target tracking (cpuTargetUtilization, default 60).

The topology accepts runtime: fargate or runtime: ec2 only.

Current limitations (see each guide for details):

  • The Redis endpoint and S3 bucket name are not injected into the container environment. Look them up in the CloudFormation console or with the AWS CLI and configure the CMS cache/media plugin yourself.
  • The task role is not granted access to the media bucket. Add an IAM policy (or use plugin-level credentials) before enabling S3 offloading.
  • Database connection variables are set on Fargate only when provisionDatabase is true. On EC2, the UserData installs the web stack but does not write database settings.

Available CMS Applications​

All IDs below are registered in cloudforge-api and accepted by the cms-service topology.

Content Management​

ApplicationIDPHPGuide
WordPresswordpress8.2WordPress Guide
Drupaldrupal8.2Drupal Guide
Joomlajoomla8.2—
TYPO3typo38.2—
Concrete CMSconcrete-cms8.2—
October CMSoctober-cms8.2—

E-Commerce​

ApplicationIDPHPGuide
WooCommercewoocommerce8.2WooCommerce Guide
Magentomagento8.2Magento Guide
PrestaShopprestashop8.1PrestaShop Guide
OpenCartopencart8.1—
Syliussylius8.3—
Bagistobagisto8.2—

Forums and Community​

ApplicationIDPHPGuide
phpBBphpbb8.2—
Flarumflarum8.2—
MyBBmybb8.2—
Dolphin/UNAdolphin-una8.2—

Business and Education​

ApplicationIDPHPGuide
SuiteCRMsuitecrm8.2—
MediaWikimediawiki8.2—
Moodlemoodle8.2Moodle Guide

Minimal Deployment Example​

All CMS apps follow the same pattern; only applicationId changes:

{
"stackName": "WordPress-Dev",
"runtime": "fargate",
"securityProfile": "dev",
"topology": "cms-service",
"applicationId": "wordpress",

"domain": "example.com",
"subdomain": "blog",
"enableSsl": true,

"authMode": "alb-oidc",
"cognitoAutoProvision": true,
"cognitoDomainPrefix": "myapp-auth",

"provisionDatabase": true
}

Switch to a different CMS by changing "applicationId" to "drupal", "magento", and so on. See the configuration reference for every deployment-context property.


Authentication​

ModeDescription
alb-oidcCognito authentication at the ALB. Requires enableSsl: true.
application-oidcThe CMS handles OIDC itself through its own plugin or module (see each app's OIDC integration).
noneNo authentication in front of the application.

With alb-oidc, the ALB protects only the application's admin paths by default (for CMS applications, CmsSpec.protectedPaths() returns the same list as cdnAdminPaths()). Public pages remain reachable without signing in. For example:

ApplicationPaths protected by default
WordPress, WooCommerce/wp-admin/*, /wp-login.php
Drupal/admin/*, /user/*, /update.php
Magento/admin/*, /backend/*, /setup/*
PrestaShop/admin*, /admin-dev/*, /install/*
Moodle/admin/*, /login/*

An application whose protected-path list is empty is protected on every path.


Database​

All CMS applications require a relational database. When the deployment is prepared by the Interactive Deployer or CloudForgeDeployment, provisionDatabase is set to true automatically for these applications. Every built-in CMS specification declares MySQL 8.0 as its default engine.

CMSSupported engines (per plugin metadata)
WordPress, WooCommerceMySQL, MariaDB
DrupalMySQL, MariaDB, PostgreSQL (the Fargate auto-install uses MySQL)
MagentoMySQL, MariaDB
MoodleMySQL, MariaDB, PostgreSQL
PrestaShopMySQL, MariaDB
{
"provisionDatabase": true,
"databaseEngine": "mysql",
"databaseVersion": "8.0",
"databaseInstanceClass": "db.t3.medium",
"databaseAllocatedStorageGB": 50
}