惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
云风的 BLOG
云风的 BLOG
小众软件
小众软件
雷峰网
雷峰网
博客园 - 【当耐特】
V
V2EX
WordPress大学
WordPress大学
IT之家
IT之家
Last Week in AI
Last Week in AI
罗磊的独立博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
Visual Studio Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
有赞技术团队
有赞技术团队
The Cloudflare Blog
Jina AI
Jina AI
博客园 - 司徒正美
阮一峰的网络日志
阮一峰的网络日志
博客园 - 聂微东
大猫的无限游戏
大猫的无限游戏
博客园 - 三生石上(FineUI控件)
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Installing the LEMP Stack on Ubuntu 26.04
Aashish Chau · 2026-05-14 · via DEV Community

The LEMP stack — Linux, Nginx, MySQL, and PHP — powers dynamic web applications with Nginx's high-concurrency architecture at the front and PHP-FPM's FastCGI process pool handling PHP execution. Ubuntu 26.04 ships with PHP 8.5, giving you a modern base to build on. This guide sets up a production-ready LEMP stack, secures it with a Let's Encrypt certificate, and verifies the full setup with a PHP page that reads from MySQL. By the end, you'll have a fully operational LEMP server ready to host web applications.


Install Nginx

1. Update the APT package index:

$ sudo apt update

Enter fullscreen mode Exit fullscreen mode

2. Install Nginx:

$ sudo apt install nginx -y

Enter fullscreen mode Exit fullscreen mode

3. Enable and start the service:

$ sudo systemctl enable nginx
$ sudo systemctl start nginx

Enter fullscreen mode Exit fullscreen mode


Install MySQL

1. Install the MySQL server package:

$ sudo apt install mysql-server -y

Enter fullscreen mode Exit fullscreen mode

2. Enable and start the service:

$ sudo systemctl enable mysql
$ sudo systemctl start mysql

Enter fullscreen mode Exit fullscreen mode

3. Run the security script:

$ sudo mysql_secure_installation

Enter fullscreen mode Exit fullscreen mode

4. Set the root password in the MySQL shell:

$ sudo mysql

Enter fullscreen mode Exit fullscreen mode

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_strong_password';
FLUSH PRIVILEGES;
EXIT;

Enter fullscreen mode Exit fullscreen mode


Install PHP and PHP-FPM

PHP-FPM handles PHP execution through a FastCGI process pool, offering better isolation and performance than mod_php.

1. Install PHP and required extensions:

$ sudo apt install php php-fpm php-mysql php-cli -y

Enter fullscreen mode Exit fullscreen mode

What you just installed:

  • php: core PHP interpreter
  • php-fpm: FastCGI Process Manager for Nginx
  • php-mysql: MySQL driver for PHP database connections
  • php-cli: command-line PHP interpreter

2. Enable and start PHP-FPM:

$ sudo systemctl enable php8.5-fpm
$ sudo systemctl start php8.5-fpm

Enter fullscreen mode Exit fullscreen mode

3. Verify the installed version:

$ php --version

Enter fullscreen mode Exit fullscreen mode


Configure Firewall Rules

$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp

Enter fullscreen mode Exit fullscreen mode


Configure a Virtual Host

1. Create the web root directory:

$ sudo mkdir -p /var/www/app.example.com
$ sudo chown -R www-data:www-data /var/www/app.example.com

Enter fullscreen mode Exit fullscreen mode

2. Create a test HTML page:

$ echo "<h1>Hello from LEMP on Ubuntu 26.04</h1>" | sudo tee /var/www/app.example.com/index.html

Enter fullscreen mode Exit fullscreen mode

3. Create the virtual host configuration:

$ sudo nano /etc/nginx/sites-available/app.example.com.conf

Enter fullscreen mode Exit fullscreen mode

server {
    listen 80;
    server_name app.example.com;
    root /var/www/app.example.com;
    index index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.5-fpm.sock;
    }

    access_log /var/log/nginx/app.example.com-access.log;
    error_log /var/log/nginx/app.example.com-error.log;
}

Enter fullscreen mode Exit fullscreen mode

4. Enable the site, test the configuration, and reload:

$ sudo ln -s /etc/nginx/sites-available/app.example.com.conf /etc/nginx/sites-enabled/
$ sudo nginx -t
$ sudo systemctl reload nginx

Enter fullscreen mode Exit fullscreen mode


Secure with Let's Encrypt SSL

1. Install Certbot with the Nginx plugin:

$ sudo apt install certbot python3-certbot-nginx -y

Enter fullscreen mode Exit fullscreen mode

2. Generate and install the certificate:

$ sudo certbot --nginx -d app.example.com --agree-tos

Enter fullscreen mode Exit fullscreen mode

Certbot updates the virtual host to redirect HTTP to HTTPS automatically.

3. Test the auto-renewal timer:

$ sudo certbot renew --dry-run

Enter fullscreen mode Exit fullscreen mode


Test the LEMP Stack

1. Create the test database:

$ mysql -u root -p

Enter fullscreen mode Exit fullscreen mode

CREATE DATABASE lemp_test;
CREATE USER 'lemp_user'@'localhost' IDENTIFIED BY 'secure_password';
GRANT ALL PRIVILEGES ON lemp_test.* TO 'lemp_user'@'localhost';
USE lemp_test;
CREATE TABLE greetings (id INT AUTO_INCREMENT PRIMARY KEY, message VARCHAR(255));
INSERT INTO greetings (message) VALUES ('LEMP stack is working!');
FLUSH PRIVILEGES;
EXIT;

Enter fullscreen mode Exit fullscreen mode

2. Create the PHP test page:

$ sudo nano /var/www/app.example.com/test.php

Enter fullscreen mode Exit fullscreen mode

<?php
$conn = new mysqli('localhost', 'lemp_user', 'secure_password', 'lemp_test');
if ($conn->connect_error) { die('Connection failed: ' . $conn->connect_error); }
$result = $conn->query('SELECT message FROM greetings');
while ($row = $result->fetch_assoc()) { echo $row['message']; }
$conn->close();
?>

Enter fullscreen mode Exit fullscreen mode

3. Visit the test page:

Open https://app.example.com/test.php in a browser. The text LEMP stack is working! confirms Nginx, PHP, and MySQL are communicating correctly.

4. Remove the test file:

$ sudo rm /var/www/app.example.com/test.php

Enter fullscreen mode Exit fullscreen mode


Next Steps

The LEMP stack is now running and serving requests over HTTPS. From here you can:

  • Deploy WordPress or Laravel on this stack
  • Add phpMyAdmin for a browser-based database management interface
  • Enable HTTP/2 in Nginx by adding http2 to the listen directive

For the full guide with additional tips, visit the original article on Vultr Docs.