Skip to content
Node.js LTS Production Stack product logo
  • AWSAvailable on Amazon Web Services
  • AzureAvailable on Microsoft Azure
  • GCP· nextGoogle Cloud is next on the roadmap
Available

Node.js LTS Production Stack

Node.js 24 LTS with PM2 behind an nginx 1.30 reverse proxy, alongside MySQL 8.0, Redis 7, phpMyAdmin and Webmin - everything a Node developer reaches for on a single server. The welcome page is itself an Express app under PM2, proving the whole chain works and doubling as the template you replace with your own app.

Version
v24.20.0
Operating system
Ubuntu 24.04 LTS
Architecture
x86_64
Support
Email support

What's installed

Every package and version on the image, identical on every cloud it ships on. Nothing else is installed.

  • Node.js 24.20.0 LTS
  • PM2 7.0.4
  • nginx 1.30.4
  • MySQL 8.0.46
  • Redis 7.0.15
  • phpMyAdmin 5.2.3
  • Webmin 2.660
  • yarn 1.22.22
  • pnpm 12.3.4
  • certbot 2.9.0

LicensingOpen source (MIT), no licence key required

Deploy anywhere

Node.js LTS Production Stack on AWS and Azure.

Google Cloud is next on the roadmap. One clean-room build, one first-boot credential model, one patch cadence — identical on every cloud you run. Every identifier below is the real one; copy it and launch.

  1. AWS
    Available

    Amazon Web Services

    AMI · v24.20.0

    AWS AMI ID

    Shown for your region on the AWS Marketplace launch page once you subscribe.

    Released
    Root volume
    gp3 · 20 GiB
    Instance types
    • t3a.medium
    • t3.medium
    • t3a.large
    • m6a.large
    Regions34 regions· show all
    • us-east-1
    • af-south-1
    • ap-east-1
    • ap-east-2
    • ap-northeast-1
    • ap-northeast-2
    • ap-northeast-3
    • ap-south-1
    • ap-south-2
    • ap-southeast-1
    • ap-southeast-2
    • ap-southeast-3
    • ap-southeast-4
    • ap-southeast-5
    • ap-southeast-6
    • ap-southeast-7
    • ca-central-1
    • ca-west-1
    • eu-central-1
    • eu-central-2
    • eu-north-1
    • eu-south-1
    • eu-south-2
    • eu-west-1
    • eu-west-2
    • eu-west-3
    • il-central-1
    • me-central-1
    • me-south-1
    • mx-central-1
    • sa-east-1
    • us-east-2
    • us-west-1
    • us-west-2

    5-day free trial, then from $0.03/hr software charge (larger instance sizes cost more) plus your own EC2 costs, billed by AWS.

    Subscriptions are open to AWS India (AISPL) accounts. Outside India? Ask us for a private build.

  2. Azure
    Available

    Microsoft Azure

    Compute Gallery image · Node 24.21.0 / nginx 1.30.5 / MySQL 8.0.46

    Azure Compute Gallery image ID

    Selected for you when you create the VM from the Azure Marketplace listing.

    Released
    OS disk
    Premium_LRS · 30 GiB
    VM sizes
    • Standard_D2as_v7
    • Standard_D2as_v5
    • Standard_B2ms
    • Standard_D4as_v7
    Regions50 regions· show all
    • eastus
    • australiacentral
    • australiaeast
    • australiasoutheast
    • austriaeast
    • belgiumcentral
    • brazilsouth
    • canadacentral
    • canadaeast
    • centralindia
    • centralus
    • chilecentral
    • denmarkeast
    • eastasia
    • eastus2
    • francecentral
    • germanywestcentral
    • indiasouthcentral
    • indonesiacentral
    • israelcentral
    • italynorth
    • japaneast
    • japanwest
    • jioindiawest
    • koreacentral
    • koreasouth
    • malaysiawest
    • mexicocentral
    • newzealandnorth
    • northcentralus
    • northeurope
    • norwayeast
    • polandcentral
    • qatarcentral
    • southafricanorth
    • southcentralus
    • southeastasia
    • southindia
    • spaincentral
    • swedencentral
    • switzerlandnorth
    • uaenorth
    • uksouth
    • ukwest
    • westcentralus
    • westeurope
    • westindia
    • westus
    • westus2
    • westus3
AWS

Getting started on Amazon Web Services

From launch to signed in, step by step.

  1. Subscribe on AWS Marketplace and launch in your region with TCP 22, 80 and 8000 open; wait one to two minutes.

  2. Open http://<instance-public-ip>/ for the welcome app. phpMyAdmin: /phpmyadmin (username root). Webmin: https://<instance-public-ip>:8000 (username admin; per-instance self-signed certificate, accept the one-time warning). The password for both is your EC2 Instance ID (for example i-0123456789abcdef0).

  3. SSH as ubuntu with your key pair. Deploy your app: cd /home/ubuntu/apps && git clone <your-repo> && cd <app> && npm ci --omit=dev && PORT=4000 pm2 start npm --name app -- start && pm2 save.

  4. Point nginx at your port in /etc/nginx/conf.d/provencloud.conf, then sudo nginx -t && sudo systemctl reload nginx, and retire the welcome page with pm2 delete provencloud-welcome && pm2 save.

  5. MySQL: host 127.0.0.1, user root, password the Instance ID (or create a user in phpMyAdmin). Redis: redis://127.0.0.1:6379. Free HTTPS once a domain points here: sudo certbot --nginx -d example.com.

  6. Change passwords with sudo bash /home/ubuntu/iscripts/pass_mysql.sh or pass_webmin.sh; nodejs_status.sh shows versions, PM2 processes and URLs.

Security posture

What this AWS image does and does not ship with, one fact per line.

  • Clean-room build on Canonical's official Ubuntu 24.04 LTS image: every component comes from its own official repository or release, nothing is copied from any third-party image, and the finished image was scanned for third-party vendor strings before capture.

  • No usable credential ships in the image; passwords are set on your instance at first boot from EC2 instance metadata (IMDSv2) and the scripts that set them delete themselves afterwards.

  • SSH is key-only, root login over SSH is refused, and build-time SSH keys, shell history and logs were removed before imaging.

  • No shared secret survives the image: first boot sets the MySQL root and Webmin passwords from the Instance ID, gives the MySQL maintenance account a fresh random password, regenerates the phpMyAdmin cookie key and control-user password, issues a fresh self-signed Webmin certificate naming this instance's public IP, and /etc/machine-id is emptied before imaging so systemd generates a unique one.

  • MySQL automation uses a socket-authenticated maintenance account usable only by root on the box, so no password exists to be stripped.

  • The Node app (3000), MySQL (3306/33060) and Redis (6379) are loopback-only; nginx on 80 is the only public web listener, and it serves a friendly 503 page rather than a bare 502 if the app is down.

  • Repository signing keys were fetched to files and inspected, never piped from curl to bash.

  • The bundled password tools enforce at least 10 characters with upper- and lower-case letters, a number and a symbol, and verify the new credential with a real sign-in before reporting success.

Azure

Getting started on Microsoft Azure

From launch to signed in, step by step.

  1. Create the VM from the Azure Marketplace listing with TCP 22, 80 and 8000 open in your network security group. Choose ubuntu as the administrator username so SSH and the script paths match. Wait about two minutes for first boot.

  2. Open http://<vm-public-ip>/ for the welcome application. phpMyAdmin is at /phpmyadmin (username root). Webmin is on port 8000 over HTTPS with a per-VM self-signed certificate, so use https://<vm-public-ip>:8000 and accept the warning (username admin or root).

  3. The password is your VM ID: in the Azure portal open the virtual machine, choose Properties and copy VM ID - a 36-character value such as 02aab8a4-74ef-476e-8182-f6d2ba4166a6, typed exactly as shown in lower case.

  4. Deploy your own app with pm2 start app.js as the ubuntu user, then pm2 save - the process list is restored on reboot. nginx proxies port 80 to 127.0.0.1:3000.

Security posture

What this Azure image does and does not ship with, one fact per line.

  • Clean-room build on Canonical's official Ubuntu image from the Azure Marketplace: every component comes from its own official source and no third-party image was launched or copied.

  • The MySQL root and Webmin passwords are set on first boot from your VM's own vmId.

  • Webmin's TLS certificate is generated per VM, so no private key is shared between deployments.

  • MySQL and Redis listen on loopback only.

  • The pre-image cleanup proves the build's own credentials are rejected before capture, and first boot sets every password from the new VM's own vmId, read from Azure IMDS.

  • The ubuntu login account ships password-locked with an empty authorized_keys, and cloud-init installs your own SSH key at deploy time.

  • Shell history, logs and cloud-init state are cleared before capture.

  • Verified against Microsoft's documented Linux certification test cases on a VM deployed from this gallery version - 13 passed, 0 failures - with VM extension provisioning confirmed and every helper script executed rather than only reviewed.

  • Restrict port 22 to trusted IP ranges, and put the consoles behind HTTPS with your own certificate before exposing them to the internet.