
- AWSAvailable on Amazon Web Services
- Azure· nextMicrosoft Azure is next on the roadmap
- GCP· nextGoogle Cloud is next on the roadmap
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
- Community
What's installed
Every package and version on the image. 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
Licensing — Open source (MIT), no licence key required
Deploy anywhere
Node.js LTS Production Stack on AWS.
Microsoft Azure and Google Cloud are 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.
- AWSAvailable
Amazon Web Services
AMI · v24.20.0
AWS AMI ID
ami-059b326a0197f1363- Released
- September 6, 2026
- Root volume
- gp3 · 20 GiB
Instance types
- t3a.medium
- t3.medium
- t3a.large
- m6a.large
Regions
- us-east-1
Getting started
From launch to signed in, step by step.
Launch in us-east-1 with TCP
22,80and8000open; wait one to two minutes.Open
http://<instance-public-ip>/for the welcome app. phpMyAdmin:/phpmyadmin(usernameroot). Webmin:https://<instance-public-ip>:8000(usernameadmin; per-instance self-signed certificate, accept the one-time warning). The password for both is your EC2 Instance ID (for examplei-0123456789abcdef0).SSH as
ubuntuwith 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.Point nginx at your port in
/etc/nginx/conf.d/provencloud.conf, thensudo nginx -t && sudo systemctl reload nginx, and retire the welcome page withpm2 delete provencloud-welcome && pm2 save.MySQL: host
127.0.0.1, userroot, 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.Change passwords with
sudo bash /home/ubuntu/iscripts/pass_mysql.shorpass_webmin.sh;nodejs_status.shshows versions, PM2 processes and URLs.
Security posture
What this 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.