Overview
This guide walks you through the complete installation of Payara Qube on AWS.
By the end of it, you will be able to:
-
Prepare DNS,
-
Generate the installation bundle
-
Deploy the infrastructure with Pulumi and
-
Complete the initial post-install configuration
|
The wizard generates an Infrastructure-as-Code (IaC) project that uses Pulumi (an automation platform similar in concept to Terraform) to create all required AWS resources. You run the generated Pulumi project to install Payara Qube in your own AWS account. |
Prerequisites
Before you start, make sure you have:
-
An AWS account with sufficient permissions to create Route 53 zones and infrastructure resources.
-
AWS CLI installed and configured on the machine you will use for the installation.
-
A Payara Nexus account with access to the Qube artifacts (listed in your welcome pack).
-
Pulumi installed locally (install it in Windows or WSL if you are using Windows).
-
An SMTP server and credentials so Qube can send email (for example, Gmail with an app password).
-
A domain to dedicate to Qube. If you cannot delegate the full domain to AWS, plan a subdomain that you can manage via Route 53.
-
Helm (only needed if the deployment process prompts you for it).
|
DNS changes can take time to propagate. If you are pointing a domain or subdomain to AWS Route 53, allow extra time (up to 24 hours) before you run the Pulumi deployment. |
Step 1: Prepare Your Domain
Payara Qube requires two DNS zones: one for the control plane and one for applications. You can either delegate an entire domain to AWS or keep the parent domain with your current registrar and delegate only the required subdomains to AWS.
Option 1: Delegate the Entire Domain to AWS (Recommended)
-
Sign in to the AWS console and open Route 53.
-
Choose Hosted zones and select Create hosted zone.
-
Enter your domain name (for example,
example.com), leave Description empty, select Public hosted zone, and click Create hosted zone. -
Note the four name servers listed in the Value/Route traffic to column (for example,
ns-1147.awsdns-15.org.). -
Update the name server records at your domain registrar so they match the values provided by AWS.
Option 2: Use a Subdomain Without Delegating the Parent Domain
-
In Route 53, create a hosted zone for the control plane (for example,
qube.example.com). -
Note the AWS name servers for this hosted zone.
-
Create a second hosted zone for the applications (for example,
apps.qube.example.com) and note its name servers. -
Link the hosted zones:
-
Open the control plane hosted zone.
-
Choose Create record.
-
Set Record name to
apps(resulting inapps.qube.example.com), choose theNSrecord type, paste the four name servers from the application zone, optionally set TTL to 60, and click Create records.
-
-
Update DNS at your registrar so the subdomain (for example,
qube.example.com) points to the AWS name servers for the control plane zone. -
If your registrar requires one record per name server, create four individual NS records.
Step 2: Generate the Installation Bundle
Use the Payara Qube wizard to collect your installation bundle.
-
Navigate to https://billing.payara.cloud/install-qube/wizard (see your welcome pack for the exact URL) and authenticate with your Nexus credentials.
-
Give the installation a descriptive name. This value becomes your Pulumi stack name and prefixes the AWS resources that will be created.
-
Configure the DNS values. Use the zones you created earlier and append the stack name where required.
Field Example (stack name: turn, domain:qube.example.com)Control Plane Domain
turn.qube.example.comControl Plane DNS Zone
qube.example.comApplication Domain
turn.apps.qube.example.comApplication DNS Zone
apps.qube.example.comLet’s Encrypt Contact Email
admin@example.comEnsure that the Control Plane DNS Zone and Application DNS Zone exactly match the Route 53 hosted zones you created.
-
Provide SMTP settings so Qube can send email.
If you are using Gmail, configure SMTP similar to the following (replace with your details):
-
SMTP From:
youremailaddress@gmail.com -
SMTP Host:
smtp.gmail.com -
SMTP Port: 587
-
SMTP Username:
youremailaddress@gmail.com -
SMTP Password: Your Gmail app password
-
Use TLS: Yes
-
-
Review the default cluster settings. Leave the defaults unless you have a specific requirement. Avoid reducing the instance size below the defaults, as that can cause deployment timeouts.
-
Choose the AWS region where you want to deploy Qube. If you are adding an additional region to an existing Qube deployment, reuse the same stack name.
-
Click Generate installation data to download the installation zip file.
Step 3: Prepare the Installation Workspace
-
Move the downloaded zip file into an empty directory (for example,
~/qube) and unzip it.mkdir -p ~/qube mv ~/Downloads/qube-installation.zip ~/qube/ cd ~/qube unzip qube-installation.zip -
Verify that the directory contains files similar to the following (the stack name in
Pulumi.<stack>.yamlmatches the name you entered in the wizard):.npmrc Pulumi.turn.yaml Pulumi.yaml index.ts node_modules package-lock.json package.json tsconfig.json -
Decide where Pulumi will store its state and log in accordingly:
Pulumi keeps a state file that tracks every resource it creates so it can calculate updates safely. Pulumi Cloud hosts this state for you, while the local and self-managed options store it elsewhere.
# Pulumi Cloud (recommended) pulumi login # Azure Blob storage (example) pulumi login azblob://pulumi/?storage_account=stacc # Local filesystem (use only for short-lived evaluation) pulumi login --local -
Inspect the extracted
.npmrc. If it contains a Payara Nexus entry, copy the line into your global~/.npmrcso thatnpm installcan download the private Qube packages without prompting for credentials.
Step 4: Deploy with Pulumi
-
Install the project dependencies:
pulumi install -
Initialize the Pulumi stack (replace
turnwith your stack name) and synchronise the configuration:pulumi stack init turn pulumi refresh -y -
Start the deployment:
pulumi up
The first run downloads containers, provisions AWS infrastructure, and can take 45 minutes or more.
Because AWS and Kubernetes are eventually consistent, you may need to re-run pulumi up if the first attempt reports transient errors.
When the deployment finishes, Pulumi prints the outputs you will use to access Qube. You can retrieve them again at any time (including secrets) with:
pulumi stack output --show-secrets
The command returns the Keycloak URL, Payara Qube management URL, and initial administrative credentials.
Step 5: Post-Install Tasks
-
Sign in to the Keycloak admin interface (
userManagementUrl) with the temporary administrator credentials provided in the Pulumi outputs. -
Create a permanent administrator:
-
Go to Users → Add user, fill in the details, and create the user.
-
Open the new user, choose Credentials, set a strong password, and disable the Temporary flag.
-
In Role Mapping, assign the realm admin role.
-
-
Optionally disable the bootstrap administrator once the permanent account is confirmed.
-
Follow the Payara Qube Organisation Management guide to create your first organisation, invite users, and configure namespaces.
Troubleshooting
AWS credentials error
error: unable to validate AWS credentials
Verify your credentials with aws sts get-caller-identity and ensure you are targeting the correct AWS account.
Helm release timeout
error: Helm release failed to initialize completely
Run pulumi up again.
If the problem persists, inspect the release with the Helm CLI or the Kubernetes dashboard.
Domain resolution issues
qb02-import-realm failing/timing out
Confirm that both control plane and application domains resolve publicly and that the TLS certificate is valid at https://users.control.plane.domain.example.
General deployment retries
If a deployment step fails due to eventual consistency, rerun pulumi up.
Pulumi will converge the stack to the expected state.





