Skip to content
LEMP Stack - nginx, MySQL and PHP product logo
  • AWS· soonComing soon on Amazon Web Services
  • Azure· nextMicrosoft Azure is next on the roadmap
  • GCP· nextGoogle Cloud is next on the roadmap
Coming soon

LEMP Stack - nginx, MySQL and PHP

A current LEMP stack: nginx 1.30.4 from the nginx.org stable branch, MySQL 9.7 LTS, PHP 8.5 with the common extensions, plus phpMyAdmin and Webmin - every component the newest stable release of its line. MySQL is pinned to loopback, phpMyAdmin's cookie key is per instance, and the management scripts live outside the web root.

Version
nginx 1.30.4 / MySQL 9.7.2 / PHP 8.5.10
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.

  • nginx 1.30.4
  • MySQL 9.7.2 LTS
  • PHP 8.5.10 (FPM + CLI)
  • phpMyAdmin 5.2.3
  • Webmin 2.660

Licensing Open source components (nginx BSD-2, MySQL GPL-2.0, PHP), no licence key required

Deploy anywhere

LEMP Stack - nginx, MySQL and PHP 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.

  1. AWS

    Amazon Web Services

    AMI · nginx 1.30.4 / MySQL 9.7.2 / PHP 8.5.10

    Coming soon

    AWS AMI ID

    ami-0337fcf01aef96623
    Released
    September 12, 2026
    Root volume
    gp3 · 10 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.

  1. Launch in us-east-1 with TCP 22, 80 and 8000 open; wait about two minutes for first boot.

  2. Open http://<instance-public-ip>/ for the landing page. phpMyAdmin is at /phpmyadmin with username root; Webmin is at http://<instance-public-ip>:8000 with username admin or root. The password for both is your EC2 Instance ID (for example i-0123456789abcdef0).

  3. To publish your site, replace the contents of /var/www/html. The server block is /etc/nginx/conf.d/provencloud-lemp.conf; for framework routing change try_files to $uri $uri/ /index.php?$query_string and reload nginx.

  4. SSH as ubuntu with your key pair. Change passwords with sudo bash /home/ubuntu/iscripts/pass_mysql.sh (this is the phpMyAdmin login) or pass_webmin.sh.

  5. MySQL (3306) listens on 127.0.0.1 only. Everything is plain HTTP; add a certificate when you have a domain.

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.

  • MySQL is pinned to 127.0.0.1 for both the classic and X protocols - Oracle's packages default to binding every interface, which would have exposed port 3306 to the internet.

  • MySQL administration needs no stored password: a maintenance account authenticates by Unix socket as the OS root user, so nothing secret ships in the image and recovery is always possible over SSH. phpMyAdmin's cookie encryption key is regenerated per instance.

  • Management scripts live in /home/ubuntu/iscripts, not the web root, so they are never served over HTTP; the landing page deliberately does not print the Instance ID because it is the default password.

  • 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.

  • The image is HTTP-only by design so it works at a bare IP with no certificate warnings: terminate TLS at a load balancer or add a certificate before exposing it publicly, and restrict port 22 and any admin ports to trusted IP ranges in your security group.