Skip to content
Deployments

Deploy the full-stack application template with OpenTofu

Deployment · Updated Jun 2026

Coming from another cloud?

▸AWS·3tier CF

This Quake AI feature maps to AWS’s 3tier CF.

▸Azure·ARM Webapp

This Quake AI feature maps to Azure’s ARM Webapp.

Deploy the full-stack application template with OpenTofu

Stand up a three-tier stack (Nginx web, Python app on port 8080, MariaDB with a Cinder data volume) on a private subnet using the validated OpenTofu template full-stack-app. One floating IP on the web tier exposes HTTP; the app and database tiers stay on private addresses only.

Monthly cost estimate

Pricing calculator ↗

Sized as a custom package on a mix of shared and dedicated vCPU.

Starting template$119.30/mo

Monthly total for the required template above. Use the configurator below to add optional pieces and see the total update.

What each resource is for

Web tier

s1a.small · 2 shared vCPU, 2 GiB RAM, 0.5 Gbps

$16.50/mo

App tier

s1a.medium · 4 shared vCPU, 4 GiB RAM, 0.5 Gbps

$33.00/mo

Database

m2a.large · 2 dedicated vCPU, 8 GiB RAM, 0.5 Gbps

$66.00/mo

Compute shown per role at custom-package rates ($29/dedicated vCPU, $7.25/shared vCPU, $1/GiB RAM). The headline above is the billed total: the cheaper of a named plan and the custom package, plus add-ons.

Included in baseline

s1a.small

2 shared vCPU, 2 GiB RAM, 0.5 Gbps

$16.50

s1a.medium

4 shared vCPU, 4 GiB RAM, 0.5 Gbps

$33.00

m2a.large

2 dedicated vCPU, 8 GiB RAM, 0.5 Gbps

$66.00

Compute + RAM rate basis

8 vCPU + 14 GiB RAM at $29/dedicated vCPU, $7.25/shared vCPU, $1/GiB RAM (regular). Totals apply the flat −$5/mo package promotion.

—

Block storage (110 GiB)

110 GiB at $0.08/GiB/mo

$8.80

Public IP (included)

1 included with the custom package

$0.00

Package promotional discount

Flat −$5.00/mo on the custom package (same promotion as named plans).

$-5.00

Included at no charge

These line items are zero on Quake AI. Many other providers meter them separately.

Data transfer (inbound and outbound)

Unlimited data transfer on every plan; Quake AI does not meter per-GB egress.

AWS, GCP, and Azure meter outbound transfer per GB. DigitalOcean and Hetzner include an allowance on compute plans, then charge overage.

Learn more
$0.00

Private networking

Private networks, subnets, Neutron routers, and security groups are included with the plan.

VPC objects are usually free to create elsewhere, but NAT gateways bill hourly plus per-GB processed. Quake AI uses router SNAT with no separate NAT line item.

$0.00

Control-plane API requests

OpenStack API calls for provisioning and management are included.

Some managed services on other clouds meter API calls or charge for premium control-plane features.

$0.00

Dev/test vs production

Start on shared CPU for dev/test, then promote to dedicated for production with a flavor resize. The network, storage, and template stay the same.

Dev/test on shared CPU

Burstable s1a flavors; suited to prototyping and low or bursty load.

$69.80/mo

Production on the configured CPU

The headline estimate above; predictable steady-load performance.

$119.30/mo

Saves $49.50/mo while you build on shared CPU.

Shared flavors carry less RAM (m2a.large (8 GiB RAM) -> s1a.small (2 GiB RAM)). A resize reboots the instance; data on attached volumes persists. Size the dedicated flavor for the RAM your production workload needs.

Pricing data last validated: . For current rates, check quake.ai/pricing.

Quake AIFloating IPport 80Private network192.168.50.0/24Block volume50 GB/var/lib/mysqlRouterto PublicStaticWeb tierNginxApp tierPython :8080DB tierMariaDB :3306 :8080:3306
Click to zoom
Full-stack topology: web, app, and database tiers on a private network with one floating IP on the web tier

Prerequisites#

You need:

Step 1: Configure variables#

Copy terraform.tfvars.example to terraform.tfvars and set:

HCL
key_name    = "YOUR_KEY_NAME"
db_password = "CHOOSE_A_STRONG_PASSWORD"

Defaults for flavors, volume size, and network CIDR are documented on the Full-Stack Application reference page.

Step 2: Apply the template#

From the template directory, run:

bash
tofu init
tofu plan
tofu apply

Type yes when prompted. Cloud-init on all three instances can take several more minutes after tofu apply returns.

When the run finishes, note web_floating_ip, app_private_ip, and db_private_ip from the outputs.

Step 3: Verify the web tier reaches the app and database tiers#

Fetch the public endpoint and request the root path:

bash
WEB=$(tofu output -raw web_floating_ip)
curl -s "http://${WEB}/"

When all three tiers are ready, the response body reads:

app tier OK; db says: full-stack-app database tier online

If MariaDB or the app service is still starting, you may see a 503 response. Wait two or three minutes and run the curl command again.

Optional: SSH to the web instance and confirm Nginx forwards to the app tier:

bash
ssh -i YOUR_PRIVATE_KEY_PATH ubuntu@${WEB}
systemctl is-active nginx
grep proxy_pass /etc/nginx/sites-available/default

Next steps#

Clean up#

Run tofu destroy from the project directory when finished. Type yes to confirm. Verify in the Console that all instances, the data volume, and the floating IP are gone.

Was this page helpful?