Deploy Docker Compose projects to VMs. The repository root is a compatibility
entrypoint for existing GCP callers. New callers should select exactly one
Terraform entrypoint under providers/: providers/gcp, providers/do, or
providers/linode. Each entrypoint loads only its target cloud provider.
Existing Debian/Ubuntu hosts can consume the same runtime contract through the
Ansible role or Salt formula.
Template defaults live in templates/apps.json and are shared by Terraform,
Ansible, and Salt. The default deployment shape is one app per VM or host; pass
runtime.compose.projects when several apps should share the same machine.
Terraform template presets include an exact, reviewed sitectl core/plugin
release set. Override individual selectors with
runtime.sitectl.package_versions when intentionally testing or promoting a
different compatible release set.
All presets use their coordinated sitectl v1.0.0 core/plugin release set. The
ISLE preset selects the libops/isle v1.1.0 template; every other application
preset remains on its v1.0.0 template contract. Keep each preset's complete
template and package set together when promoting an override.
GCP deployments have two Terraform ownership layers. Apply
modules/gcp-foundation once per service
project from a small, long-lived state; it owns required APIs, the Cloud Run
service identity, the reusable least-privilege power roles, and any Shared VPC
attachment and service-agent grants. Per-application states consume the role
names and bind their service accounts only to their own Compute Engine instance.
They must not recreate or destroy the singleton foundation. The
runtime contracts
cover the state boundary, Shared VPC setup, and Cloud Run Direct VPC egress
requirements.
| Name | Version |
|---|---|
| terraform | >= 1.3.0 |
| cloudinit | ~> 2.3 |
| ~> 7.0 | |
| time | ~> 0.14 |
No providers.
| Name | Source | Version |
|---|---|---|
| gcp | ./modules/gcp | n/a |
| managed_artifacts | ./modules/managed-artifacts | n/a |
No resources.
| Name | Description | Type | Default | Required |
|---|---|---|---|---|
| name | Deployment name. | string |
n/a | yes |
| cloud_provider | Compatibility selector for the root GCP entrypoint. Use providers/do or providers/linode for other clouds. | string |
"gcp" |
no |
| gcp | Google Cloud infrastructure settings. | object({ |
{} |
no |
| runtime | Provider-neutral compose/runtime settings. | object({ |
{} |
no |
| template | Optional compose template preset. Supported values are archivesspace, ojs, isle, drupal, wp, omeka-s, and omeka-classic. Explicit runtime settings override preset defaults. | string |
"" |
no |
| Name | Description |
|---|---|
| appGsa | The Google Service Account the app can use for app-scoped auth. |
| backend | Backend service ID for attaching Cloud Run ingress to an external HTTPS load balancer. |
| cloud_provider | Root entrypoint cloud provider (gcp). |
| compose_projects | Normalized compose project manifest. |
| external_ip | GCP VM public IPv4 address. |
| instance | GCP VM instance details. |
| instance_id | GCP VM instance ID. |
| internal_ip | GCP VM private IPv4 address. |
| network | Resolved GCP network and regional subnetwork. |
| primary_compose_project | Normalized primary compose project. |
| rollout | Optional rollout API endpoint details. |
| serviceGsa | The Google Service Account internal services run as. |
| sitectl_package_versions | Effective release selector for every installed sitectl package; values may be exact tags or latest. |
| template | Selected compose template preset. |
| urls | Cloud Run ingress URLs by region. |
| volumes | GCP persistent application-data and Docker-volume details. |