Cara Memasang Linux, Nginx, MySQL, PHP (tumpukan LEMP) pada Ubuntu
Pengenalan
Pakej perisian LEMP berfungsi untuk menyajikan halaman web dinamik dan aplikasi web yang ditulis dalam PHP. Ini adalah akronim yang menerangkan sistem operasi Linux, dengan pelayan web Nginx (dibaca seperti “Engine-X”). Data backend disimpan dalam pangkalan data MySQL dan pemprosesan dinamik dikendalikan oleh PHP.
Panduan ini menunjukkan cara memasang LEMP stack pada pelayan Ubuntu. Sistem operasi Ubuntu menguruskan bahagian Linux bagi stack tersebut. Kami akan menerangkan cara untuk mendapatkan komponen yang lain berfungsi dan berjalan.
Nota: Tutorial ini terutamanya ditujukan untuk Ubuntu 22.04 LTS dengan PHP 8.1. Bagi pengguna Ubuntu 24.04 LTS, laraskan rujukan versi PHP daripada
php8.1-fpmkepadaphp8.3-fpmdalam semua arahan. Selain itu, pastikan untuk mengemas kini sebarang laluan socket PHP-FPM dalam konfigurasi Nginx anda (contohnya, gunakan/run/php/php8.3-fpm.sockuntuk Ubuntu 24.04).
Cara Memasang Linux, Nginx, MySQL, PHP (tumpukan LEMP) pada Ubuntu
- Memasang Pelayan Web Nginx
- Memasang MySQL
- Memasang PHP
- Mengkonfigurasi Nginx untuk Menggunakan Pemproses PHP
- Menguji PHP Dengan Nginx
- Menguji Sambungan Pangkalan Data Dari PHP
Prasyarat
Gunakan pengguna sudo bukan root pada Ubuntu dengan firewall UFW diaktifkan. Ikuti panduan persediaan pelayan awal kami untuk Ubuntu untuk mengkonfigurasinya.
Langkah 1 – Memasang Pelayan Web Nginx
Untuk memaparkan halaman web kepada pelawat laman web, anda akan menggunakan Nginx, sebuah pelayan web berprestasi tinggi. Anda akan menggunakan pengurus pakej APT untuk mendapatkan perisian ini.
Kemas kini indeks pakej pelayan anda, kemudian pasang Nginx:
sudo apt updateSelepas itu, jalankan apt install untuk memasang Nginx:
sudo apt install nginxApabila diminta, tekan Y dan ENTER untuk mengesahkan bahawa anda ingin memasang Nginx. Setelah pemasangan selesai, pelayan web Nginx akan aktif dan berjalan di pelayan Ubuntu anda.
Sahkan bahawa Nginx sedang berjalan:
sudo systemctl status nginxAnda sepatutnya melihat output yang menunjukkan bahawa Nginx sedang aktif:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since...Pada Ubuntu, Nginx dikonfigurasikan untuk mula berjalan selepas pemasangan.
Benarkan trafik HTTP melalui firewall ufw. Nginx mendaftar beberapa profil aplikasi UFW semasa pemasangan. Semak profil yang tersedia:
sudo ufw app listAvailable applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSHAktifkan profil yang paling ketat yang membenarkan trafik yang diperlukan. Oleh kerana SSL belum dikonfigurasi, benarkan hanya trafik HTTP pada port 80:
Dayakan ini dengan menjalankan yang berikut:
sudo ufw allow 'Nginx HTTP'
Sahkan perubahan firewall:
sudo ufw statusOutput ini menunjukkan bahawa trafik HTTP kini dibenarkan:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)Untuk menguji fungsi domain pelayan Nginx, pergi ke http://your_domain menggunakan pelayar web pilihan anda.
Jika anda tidak mempunyai nama domain yang ditujukan ke pelayan anda dan anda tidak mengetahui alamat IP awam pelayan anda, anda boleh menentukannya dengan menjalankan salah satu daripada arahan berikut:
ip addr showhostname -IIni akan mencetak beberapa alamat IP. Anda boleh mencuba setiap satu daripadanya secara bergilir-gilir di pelayar web anda.
Sebagai alternatif, anda boleh menyemak alamat IP yang boleh diakses, seperti yang dilihat dari lokasi lain di internet:
curl -4 icanhazip.comTulis alamat yang anda terima di pelayar web anda dan ia akan membawa anda ke halaman utama lalai Nginx:
http://<server_domain_or_IP>Jika anda menerima halaman ini, ia bermakna anda telah berjaya memasang Nginx dan mengaktifkan trafik HTTP untuk pelayan web anda.
Langkah 2 — Memasang MySQL
Pasang MySQL untuk menyimpan dan mengurus data laman. MySQL adalah sistem pengurusan pangkalan data standard untuk persekitaran PHP.
Sekali lagi, gunakan apt untuk mendapatkan dan memasang perisian ini:
sudo apt install mysql-serverApabila diminta, sahkan pemasangan dengan menekan Y, dan kemudian ENTER.
Selepas pemasangan, jalankan skrip keselamatan untuk menghapuskan tetapan lalai yang tidak selamat dan mengunci akses pangkalan data:
sudo mysql_secure_installationAnda akan diminta dengan satu soalan yang bertanya sama ada anda ingin mengkonfigurasi VALIDATE PASSWORD PLUGIN.
Nota: Mengaktifkan ciri ini adalah sesuatu yang memerlukan pertimbangan. Jika diaktifkan, kata laluan yang tidak memenuhi kriteria yang ditetapkan akan ditolak oleh MySQL dengan ralat. Adalah selamat untuk membiarkan pengesahan dilumpuhkan, tetapi anda harus sentiasa menggunakan kata laluan yang kuat dan unik untuk kelayakan pangkalan data.
Jawab Y untuk ya, atau apa saja untuk terus tanpa mengaktifkan:
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: Jika anda menjawab “ya”, anda akan diminta untuk memilih tahap pengesahan kata laluan. Sila ingat bahawa jika anda memasukkan 2 untuk tahap paling kuat, anda akan mendapat ralat apabila cuba menetapkan kata laluan yang tidak mengandungi nombor, huruf besar dan kecil, serta aksara khas:
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1Tidak kira sama ada anda memilih untuk menetapkan VALIDATE PASSWORD PLUGIN, pelayan anda akan meminta anda memilih dan mengesahkan kata laluan untuk pengguna MySQL root. Ini tidak sama dengan root sistem. Pengguna root pangkalan data adalah pengguna pentadbir dengan keistimewaan penuh ke atas sistem pangkalan data. Walaupun kaedah pengesahan lalai untuk pengguna root MySQL tidak memerlukan kata laluan, walaupun apabila satu telah ditetapkan, anda harus menetapkan kata laluan yang kuat di sini sebagai langkah keselamatan tambahan. Kita akan membincangkannya sebentar lagi.
Jika anda mengaktifkan pengesahan kata laluan, anda akan ditunjukkan kekuatan kata laluan untuk kata laluan root yang anda masukkan dan server anda akan bertanya sama ada anda ingin meneruskan dengan kata laluan itu. Jika anda berpuas hati dengan kata laluan semasa anda, tekan Y untuk “ya” pada arahan:
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : yUntuk baki soalan, tekan Y dan tekan kekunci ENTER pada setiap arahan. Ini akan menghapuskan beberapa pengguna tanpa nama dan pangkalan data ujian, mematikan log masuk root jarak jauh, dan memuatkan peraturan baru ini supaya MySQL segera menghormati perubahan yang telah anda buat.
Apabila selesai, uji sama ada anda boleh log masuk ke konsol MySQL:
sudo mysqlIni akan menyambung ke pelayan MySQL sebagai pengguna pangkalan data pentadbir root, yang disimpulkan daripada penggunaan sudo semasa menjalankan arahan ini. Anda sepatutnya menerima output berikut:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.28-0ubuntu4 (Ubuntu)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>Untuk keluar dari konsol MySQL, tulis yang berikut:
exitPerhatikan bahawa anda tidak perlu menyediakan kata laluan untuk menyambung sebagai pengguna root, walaupun anda telah menetapkannya ketika menjalankan skrip mysql_secure_installation. Ini kerana, apabila dipasang di Ubuntu, kaedah pengesahan lalai untuk pengguna pentadbir MySQL adalah auth_socket, bukannya dengan kaedah yang menggunakan kata laluan. Ini mungkin kelihatan seperti kebimbangan keselamatan pada mulanya, tetapi ia menjadikan pelayan pangkalan data lebih selamat kerana satu-satunya pengguna yang dibenarkan log masuk sebagai pengguna MySQL root adalah pengguna sistem dengan keistimewaan sudo yang menyambung dari konsol atau melalui aplikasi yang dijalankan dengan keistimewaan yang sama. Dari segi praktikal, ini bermakna anda tidak akan dapat menggunakan pengguna pangkalan data pentadbir root untuk menyambung dari aplikasi PHP anda.
Untuk keselamatan yang lebih tinggi, adalah lebih baik mempunyai akaun pengguna khusus dengan keistimewaan yang lebih terhad untuk setiap pangkalan data, terutamanya jika anda merancang untuk mempunyai beberapa pangkalan data yang dihoskan di pelayan anda.
Nota: Sesetengah versi lama perpustakaan MySQL PHP asli mysqlnd tidak menyokong caching_sha2_authentication, kaedah pengesahan lalai untuk pengguna yang dibuat dalam MySQL 8. Oleh itu, apabila membuat pengguna pangkalan data untuk aplikasi PHP pada MySQL 8, anda mungkin perlu memastikan mereka dikonfigurasikan untuk menggunakan mysql_native_password sebaliknya. Kami akan menunjukkan cara melakukannya dalam Langkah 6.
Pelayan MySQL anda kini telah dipasang dan diamankan. Seterusnya, anda akan memasang PHP, komponen terakhir dalam pakej LEMP.
Langkah 3 – Memasang PHP
Pasang PHP untuk memproses kod dan menghasilkan kandungan dinamik. Nginx memerlukan program luaran untuk pemprosesan PHP.
PHP-FPM ("pengurus proses fastCGI") mengendalikan pemprosesan PHP dengan cekap dengan ciri keselamatan tambahan, memberikan prestasi yang lebih baik untuk laman web berasaskan PHP. Pasang php-fpm untuk mengarahkan permintaan PHP dari Nginx, dan php-mysql untuk membolehkan komunikasi PHP-MySQL. Pakej PHP teras dipasang secara automatik sebagai kebergantungan.
Untuk memasang pakej php8.1-fpm dan php-mysql, jalankan:
sudo apt install php8.1-fpm php-mysqlApabila diminta, tekan Y dan ENTER untuk mengesahkan pemasangan.
Sahkan bahawa PHP-FPM sedang berjalan:
sudo systemctl status php8.1-fpmAnda sepatutnya melihat output yang menunjukkan PHP-FPM sedang aktif:
● php8.1-fpm.service - The PHP 8.1 FastCGI Process Manager
Loaded: loaded
Active: active (running)Anda juga boleh menyemak versi PHP:
php -vPHP 8.1.x (cli) (built: ...)
Copyright (c) The PHP Group
Zend Engine v4.1.xKonfigurasikan Nginx untuk menggunakan komponen PHP ini.
Langkah 4 — Mengkonfigurasi Nginx untuk Menggunakan Pemproses PHP
Cipta blok pelayan Nginx (serupa dengan hos maya Apache) untuk menyusun konfigurasi dan menghoskan pelbagai domain pada satu pelayan. Panduan ini menggunakan your_domain sebagai nama domain contoh.
Maklumat: Untuk mengetahui lebih lanjut mengenai cara menyediakan nama domain dengan Linux-Console.net, baca pengenalan kami mengenai DNS Linux-Console.net.
Pada Ubuntu 22.04, Nginx membolehkan satu blok pelayan lalai yang menyajikan dokumen dari /var/www/html. Untuk pelbagai tapak, buat struktur direktori di dalam /var/www untuk your_domain, dan biarkan /var/www/html sebagai direktori sandaran lalai.
Buat direktori web akar untuk your_domain seperti berikut:
sudo mkdir /var/www/your_domainSeterusnya, tetapkan pemilikan direktori dengan pemboleh ubah persekitaran $USER, yang akan merujuk kepada pengguna sistem semasa anda:
sudo chown -R $USER:$USER /var/www/your_domainKemudian, buka fail konfigurasi baru dalam direktori sites-available Nginx menggunakan penyunting baris perintah pilihan anda. Di sini, kita akan menggunakan nano:
sudo nano /etc/nginx/sites-available/your_domainIni akan mencipta fail baru yang kosong. Masukkan konfigurasi asas berikut:
server {
listen 80;
server_name your_domain www.your_domain;
root /var/www/your_domain;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}Ini adalah apa yang setiap arahan dan blok lokasi ini lakukan:
listen— Menentukan port yang akan didengar oleh Nginx. Dalam kes ini, ia akan mendengar pada port80, port lalai untuk HTTP.root— Menetapkan akar dokumen di mana fail yang dihidangkan oleh laman web ini disimpan.index— Menentukan dalam susunan mana Nginx akan mengutamakan fail indeks untuk laman web ini. Amalan biasa ialah menyenaraikan failindex.htmldengan keutamaan lebih tinggi daripada failindex.phpbagi membolehkan penyediaan halaman penyelenggaraan dengan cepat dalam aplikasi PHP. Anda boleh menyesuaikan tetapan ini untuk memenuhi keperluan aplikasi anda dengan lebih baik.server_name— Menentukan nama domain dan/atau alamat IP yang akan diterima oleh blok server ini. Tetapkan arahan ini kepada nama domain atau alamat IP awam server anda.location /— Blok lokasi pertama merangkumi arahantry_files, yang memeriksa kewujudan fail atau direktori yang sepadan dengan permintaan URL. Jika Nginx tidak dapat mencari sumber yang sesuai, ia akan memulangkan ralat 404.location ~ \.php$— Blok lokasi ini mengendalikan pemprosesan PHP sebenar dengan menunjuk Nginx ke fail konfigurasifastcgi-php.confdan failphp8.1-fpm.sock, yang menyatakan soket mana yang dikaitkan denganphp8.1-fpm.location ~ /\.ht— Blok lokasi terakhir menguruskan fail.htaccess, yang tidak diproses oleh Nginx. Dengan menambah arahandeny all, jika terdapat sebarang fail.htaccessyang terselit dalam akar dokumen, ia tidak akan dihantar kepada pelawat.
Apabila anda selesai mengedit, simpan dan tutup fail tersebut. Jika anda menggunakan nano, anda boleh melakukannya dengan menekan CTRL+X kemudian Y dan ENTER untuk mengesahkan.
Aktifkan konfigurasi anda dengan menghubungkan ke fail konfigurasi dari direktori sites-enabled Nginx:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/Kemudian, nyahpaut fail konfigurasi lalai dari direktori /sites-enabled/:
sudo unlink /etc/nginx/sites-enabled/defaultNota: Jika anda perlu memulihkan konfigurasi lalai, anda boleh melakukannya dengan mencipta semula pautan simbolik, seperti berikut:
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/Ini akan memberitahu Nginx untuk menggunakan konfigurasi tersebut pada kali berikutnya ia dimuat semula. Anda boleh menguji konfigurasi anda untuk kesilapan sintaks dengan menjalankan yang berikut:
sudo nginx -tJika sebarang kesilapan dilaporkan, kembali ke fail konfigurasi anda untuk menyemak kandungannya sebelum meneruskan.
Apabila anda bersedia, muat semula Nginx untuk menerapkan perubahan:
sudo systemctl reload nginxLaman web baru anda kini aktif, tetapi akar web /var/www/your_domain masih kosong. Buat fail index.html di lokasi itu supaya anda boleh menguji bahawa blok pelayan baru anda berfungsi seperti yang dijangkakan:
nano /var/www/your_domain/index.htmlSertakan kandungan berikut dalam fail ini:
<html>
<head>
<title>your_domain website</title>
</head>
<body>
<h1>Hello World!</h1>
<p>This is the landing page of <strong>your_domain</strong>.</p>
</body>
</html>Sekarang buka pelayar anda dan akses nama domain atau alamat IP pelayan anda, seperti yang disenaraikan dalam arahan server_name dalam fail konfigurasi blok pelayan anda:
http://server_domain_or_IPAnda akan menerima halaman seperti berikut:
Jika anda menerima halaman ini, ia bermaksud blok pelayan Nginx anda berfungsi seperti yang dijangkakan.
Anda boleh meninggalkan fail ini sebagai halaman pendaratan sementara untuk aplikasi anda sehingga anda menyiapkan fail index.php untuk menggantikannya.
Amaran: Selepas menambah fail index.php anda, pastikan untuk menghapuskan atau menamakan semula fail index.html dari akar dokumen anda. Jika kedua-dua fail wujud, Nginx akan menyajikan index.html secara lalai, dan halaman PHP anda tidak akan dipaparkan—ini adalah punca kekeliruan yang biasa bagi pengguna baru.
Stack LEMP anda kini telah dikonfigurasikan sepenuhnya. Dalam langkah seterusnya, anda akan membuat skrip PHP untuk menguji bahawa Nginx benar-benar mampu mengendalikan fail .php dalam laman web yang baru dikonfigurasikan anda.
Langkah 5 – Menguji PHP dengan Nginx
Stack LEMP anda kini sepatutnya telah dipasang sepenuhnya. Anda boleh mengujinya untuk mengesahkan bahawa Nginx boleh menyerahkan fail .php dengan betul kepada pemproses PHP anda.
Anda boleh melakukan ini dengan membuat fail PHP ujian dalam akar dokumen anda. Buka fail baru bernama info.php dalam akar dokumen anda menggunakan penyunting teks pilihan anda:
nano /var/www/your_domain/info.phpTambah baris berikut ke dalam fail baru. Ini adalah kod PHP yang sah yang akan memulangkan maklumat tentang pelayan anda:
<?php
phpinfo();Apabila anda selesai, simpan dan tutup fail tersebut.
Anda kini boleh mengakses halaman ini dalam pelayar web anda dengan melawat nama domain atau alamat IP awam yang telah anda tetapkan dalam fail konfigurasi Nginx anda, diikuti dengan /info.php:
http://server_domain_or_IP/info.phpAnda akan menerima halaman web yang mengandungi maklumat terperinci tentang pelayan anda:
Selepas memeriksa maklumat yang berkaitan tentang pelayan PHP anda melalui halaman itu, adalah lebih baik untuk menghapuskan fail yang anda cipta kerana ia mengandungi maklumat sensitif tentang persekitaran PHP dan pelayan Ubuntu anda. Anda boleh menggunakan rm untuk memadam fail itu:
sudo rm /var/www/your_domain/info.phpAnda sentiasa boleh menjana semula fail ini jika anda memerlukannya kemudian.
Langkah 6 — Menguji Sambungan Pangkalan Data dari PHP (Pilihan)
Jika anda ingin menguji sama ada PHP mampu berhubung dengan MySQL dan menjalankan pertanyaan pangkalan data, anda boleh mencipta jadual ujian dengan data palsu dan membuat pertanyaan bagi kandungannya daripada skrip PHP. Sebelum berbuat demikian, anda perlu mencipta pangkalan data ujian dan pengguna MySQL baru yang dikonfigurasi dengan betul untuk mengaksesnya.
Nota: Sesetengah versi lama perpustakaan PHP MySQL asli mysqlnd tidak menyokong caching_sha2_authentication, kaedah pengesahan lalai untuk MySQL 8, anda mungkin perlu memastikan ia dikonfigurasikan untuk menggunakan mysql_native_password sebaliknya.
Kami akan mencipta pangkalan data bernama example_database dan pengguna bernama example_user, tetapi anda boleh menggantikan nama-nama ini dengan nilai yang berbeza.
Pertama, sambungkan ke konsol MySQL menggunakan akaun root:
sudo mysqlUntuk membuat pangkalan data baru, jalankan arahan berikut dari konsol MySQL anda:
CREATE DATABASE example_database;Sekarang anda boleh membuat pengguna baru dan memberi mereka keistimewaan penuh pada pangkalan data khusus yang telah anda cipta.
Perintah berikut mencipta pengguna baru bernama example_user, menggunakan mysql_native_password sebagai kaedah pengesahan lalai. Kami menetapkan kata laluan pengguna ini sebagai password, tetapi anda harus menggantikan nilai ini dengan kata laluan yang selamat pilihan anda sendiri.
CREATE USER 'example_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';Sekarang kita perlu memberi kebenaran kepada pengguna ini ke atas pangkalan data example_database:
GRANT ALL ON example_database.* TO 'example_user'@'%';Ini akan memberikan pengguna example_user semua keistimewaan ke atas pangkalan data example_database sambil menghalang pengguna ini daripada mencipta atau mengubah pangkalan data lain di pelayan anda.
Sekarang keluar dari shell MySQL dengan arahan berikut:
exitAnda boleh menguji sama ada pengguna baru mempunyai kebenaran yang betul dengan log masuk ke konsol MySQL sekali lagi, kali ini menggunakan kelayakan pengguna khusus. Perhatikan bendera -p dalam arahan ini, yang akan meminta anda memasukkan kata laluan yang digunakan semasa membuat pengguna example_user:
mysql -u example_user -pSelepas log masuk ke konsol MySQL, sahkan bahawa anda mempunyai akses ke pangkalan data example_database:
SHOW DATABASES;Ini akan menghasilkan output berikut:
+--------------------+
| Database |
+--------------------+
| example_database |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)Seterusnya, kami akan membuat jadual ujian bernama todo_list. Dari konsol MySQL, jalankan pernyataan berikut:
CREATE TABLE example_database.todo_list (
item_id INT AUTO_INCREMENT,
content VARCHAR(255),
PRIMARY KEY(item_id)
);Masukkan beberapa baris kandungan dalam jadual ujian. Anda mungkin ingin mengulangi arahan seterusnya beberapa kali, menggunakan nilai yang berbeza:
INSERT INTO example_database.todo_list (content) VALUES ("My first important item");Untuk mengesahkan bahawa data telah berjaya disimpan ke dalam jadual anda, jalankan:
SELECT * FROM example_database.todo_list;Output anda harus dipaparkan seperti berikut:
+---------+--------------------------+
| item_id | content |
+---------+--------------------------+
| 1 | My first important item |
| 2 | My second important item |
| 3 | My third important item |
| 4 | and this one more thing |
+---------+--------------------------+
4 rows in set (0.000 sec)Selepas mengesahkan bahawa anda mempunyai data sah dalam jadual ujian anda, anda boleh keluar dari konsol MySQL:
exitSekarang anda boleh membuat skrip PHP yang akan menyambung ke MySQL dan membuat pertanyaan untuk kandungan anda. Buat fail PHP baru dalam direktori akar web tersuai anda menggunakan editor pilihan anda. Kami akan menggunakan nano untuk itu:
nano /var/www/your_domain/todo_list.phpSkrip PHP berikut menyambung ke pangkalan data MySQL dan membuat pertanyaan untuk kandungan jadual todo_list, memaparkan hasilnya dalam bentuk senarai. Sekiranya terdapat masalah dengan sambungan pangkalan data, ia akan memunculkan pengecualian.
Tambahkan kandungan berikut ke skrip todo_list.php anda:
<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";
try {
$db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
echo "<h2>TODO</h2><ol>";
foreach($db->query("SELECT content FROM $table") as $row) {
echo "<li>" . $row['content'] . "</li>";
}
echo "</ol>";
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
Simpan dan tutup fail selepas anda selesai mengedit.
Anda kini boleh mengakses halaman ini di pelayar web anda dengan melawat nama domain atau alamat IP awam yang dikonfigurasikan untuk laman web anda, diikuti dengan /todo_list.php:
http://server_domain_or_IP/todo_list.phpAnda sepatutnya menerima halaman seperti berikut, yang menunjukkan kandungan yang telah anda masukkan dalam jadual ujian anda:
Itu bermakna persekitaran PHP anda sudah bersedia untuk menyambung dan berinteraksi dengan pelayan MySQL anda.
Soalan Lazim
Apakah kegunaan LEMP stack?
Tumpukan LEMP mengehoskan laman web dan aplikasi dinamik berasaskan PHP termasuk WordPress, Laravel, Magento, Drupal, dan projek PHP tersuai. Ia amat berkesan untuk laman web dengan trafik tinggi yang memerlukan pengendalian sambungan serentak yang cekap.
Apakah perbezaan antara tumpukan LEMP dan LAMP?
LEMP menggunakan Nginx, yang mengendalikan sambungan secara tidak segerak dengan seni bina berasaskan acara—efisien untuk pengguna serentak. LAMP menggunakan Apache, yang secara tradisinya mencipta satu benang bagi setiap permintaan (walaupun Apache moden menyokong mod berasaskan acara). LEMP secara umumnya menawarkan prestasi yang lebih baik untuk kandungan statik dan senario berserenjang tinggi, manakala LAMP menyediakan konfigurasi .htaccess yang lebih mudah dan sokongan modul yang lebih meluas.
Versi Ubuntu mana yang patut saya gunakan untuk LEMP?
Ubuntu 22.04 LTS adalah sasaran utama bagi panduan ini, menampilkan PHP 8.1, MySQL 8.0, dan Nginx dengan sokongan jangka panjang. Ubuntu 24.04 LTS (rilis terkini) termasuk PHP 8.3 secara lalai dan boleh digunakan dengan panduan ini dengan menyesuaikan laluan soket PHP-FPM dan nombor versi yang berkaitan.
Bagaimana saya boleh memasang pakej LEMP pada Ubuntu 24.04?
Ikuti langkah-langkah utama ini:
- Pasang Nginx:
sudo apt install nginx - Pasang MySQL:
sudo apt install mysql-server - Jalankan skrip keselamatan MySQL:
sudo mysql_secure_installation - Pasang PHP-FPM:
sudo apt install php-fpm php-mysql - Konfigurasikan blok pelayan Nginx dengan integrasi PHP-FPM
- Uji dengan
info.phpdan sambungan pangkalan data
Lihat panduan lengkap dalam Langkah 1-6 di atas.
Versi PHP yang manakah patut saya pasang dengan Nginx dan MySQL?
Gunakan PHP lalai versi Ubuntu anda untuk keserasian terbaik:
- Ubuntu 22.04: PHP 8.1 (dipasang melalui
php8.1-fpm) - Ubuntu 24.04: PHP 8.3 (sesuaikan arahan kepada
php8.3-fpmuntuk versi ini)
Kedua-dua versi berfungsi dengan cemerlang dengan Nginx dan MySQL 8.0, menyokong rangka kerja moden, dan menerima kemas kini keselamatan secara aktif.
Bagaimana saya mengkonfigurasi Nginx untuk memproses fail PHP?
Tambah blok location ~ \.php$ ke konfigurasi pelayan Nginx anda yang mengarahkan permintaan PHP ke PHP-FPM melalui soket Unix:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}Laraskan laluan soket berdasarkan versi PHP anda, uji dengan sudo nginx -t, dan muat semula dengan sudo systemctl reload nginx.
Mengapa saya mendapat ralat “502 Bad Gateway” selepas memasang PHP-FPM?
Ralat 502 menunjukkan Nginx tidak dapat berkomunikasi dengan PHP-FPM. Punca biasa:
- PHP-FPM tidak berjalan: Semak dengan
sudo systemctl status php8.1-fpmdan mulakan jika perlu - Jalur soket salah: Sahkan
/run/php/php8.1-fpm.sockwujud dan sepadan dengan konfigurasi Nginx anda - Isu kebenaran: Pastikan pengguna Nginx (www-data) boleh mengakses soket
- Ralat konfigurasi PHP-FPM: Semak log di
/var/log/php8.1-fpm.log
Penyelesaian: Mulakan semula kedua-dua perkhidmatan:
sudo systemctl restart php8.1-fpm nginxBagaimana saya boleh mengamankan MySQL selepas pemasangan?
Jalankan skrip keselamatan terbina dalam:
sudo mysql_secure_installationIkuti arahan untuk:
- Dayakan pemalam pengesahan kata laluan
- Tetapkan kata laluan root yang kuat
- Buang pengguna tanpa nama
- Lumpuhkan log masuk root jauh
- Buang pangkalan data ujian
- Muat semula keistimewaan
Untuk pangkalan data aplikasi, buat pengguna khusus dengan keistimewaan terhad dan bukannya menggunakan akaun root.
Bolehkah saya menjalankan beberapa laman web pada satu pelayan LEMP?
Ya, buat blok pelayan Nginx yang berasingan untuk setiap domain:
- Cipta direktori:
sudo mkdir -p /var/www/second_domain - Buat blok pelayan:
sudo nano /etc/nginx/sites-available/second_domain - Konfigurasikan dengan arahan
server_namedanrootyang unik - Dayakan:
sudo ln -s /etc/nginx/sites-available/second_domain /etc/nginx/sites-enabled/ - Uji dan muat semula:
sudo nginx -t && sudo systemctl reload nginx
Setiap laman boleh mempunyai tetapan PHP dan pengguna pangkalan data yang berasingan.
Bagaimana saya boleh menaik taraf PHP ke versi yang lebih baru?
Peningkatan pakej Ubuntu mengendalikan versi kecil secara automatik. Untuk peningkatan versi utama:
Tambah PPA PHP Ondřej (repositori pihak ketiga yang dipercayai):
sudo add-apt-repository ppa:ondrej/php sudo apt updatePasang versi PHP-FPM baru:
sudo apt install php8.3-fpm php8.3-mysql -yKemas kini laluan soket konfigurasi Nginx kepada
/run/php/php8.3-fpm.sockUji dan muat semula Nginx
Secara pilihan, keluarkan versi lama:
sudo apt purge php8.1-fpm
Sentiasa uji dalam persekitaran staging sebelum menaik taraf sistem produksi.
Penyelesaian Masalah Biasa
Ralat Gerbang Buruk 502
Masalah LEMP stack yang paling biasa berlaku apabila Nginx tidak dapat berkomunikasi dengan PHP-FPM:
Semak Status PHP-FPM:
sudo systemctl status php8.1-fpmSahkan Laluan Soket:
ls -la /run/php/Output yang dijangka harus menunjukkan fail php8.1-fpm.sock.
Pembetulan Lazim:
- Mulakan semula PHP-FPM:
sudo systemctl restart php8.1-fpm - Periksa sama ada laluan soket blok pelayan Nginx sepadan dengan soket PHP-FPM sebenar
- Sahkan kebenaran fail:
sudo chown www-data:www-data /run/php/php8.1-fpm.sock
Ralat Kebenaran Ditolak
Betulkan kebenaran direktori web:
sudo chown -R www-data:www-data /var/www/your_domain
sudo chmod -R 755 /var/www/your_domainIsu Sambungan MySQL
Set Semula Kata Laluan root MySQL:
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
FLUSH PRIVILEGES;
EXIT;Semak perkhidmatan MySQL:
sudo systemctl status mysqlPHP Tidak Diproses
Sahkan modul PHP:
php -m | grep -E 'mysql|fpm'Semak konfigurasi PHP-FPM:
sudo nginx -t
sudo php-fpm8.1 -tSahihkan Ralat 404:
- Sahkan
index.phpdisenaraikan dalam arahanindexNginx - Semak sama ada fail wujud:
ls -la /var/www/your_domain/ - Semak log ralat Nginx:
sudo tail -f /var/log/nginx/error.log
Kesimpulan
Dalam panduan ini, anda telah membina asas yang fleksibel untuk menyajikan laman web dan aplikasi PHP kepada pelawat anda, menggunakan Nginx sebagai pelayan web dan MySQL sebagai sistem pangkalan data. Anda juga boleh melakukan ini dengan pelayan web Apache, lihat tutorial kami tentang Cara Memasang Tumpukan Linux, Apache, MySQL, PHP (LAMP) di Ubuntu. Anda juga boleh mengamankan laman web anda dengan Let’s Encrypt, yang menyediakan sijil percuma dan dipercayai. Ketahui cara melakukannya melalui panduan kami tentang Let’s Encrypt untuk Apache.
Terima kasih kerana belajar bersama Komuniti Linux-Console.net.



