Ubuntu'ya Linux, Nginx, MySQL, PHP (LEMP yığını) Nasıl Kurulur
Giriş
LEMP yazılım yığını, PHP ile yazılmış dinamik web sayfalarını ve web uygulamalarını sunar. Bu, bir Linux işletim sistemi, bir Nginx (okunuşu “Engine-X” olarak) web sunucusu, verilerin MySQL veritabanında saklanması ve dinamik işlemlerin PHP tarafından yürütülmesini tanımlayan bir kısaltmadır.
Bu kılavuz, bir Ubuntu sunucusuna LEMP yığını nasıl kurulacağını göstermektedir. Ubuntu işletim sistemi, yığının Linux kısmını halleder. Kalan bileşenlerin nasıl kurulup çalıştırılacağını açıklayacağız.
Not: Bu eğitim öncelikle PHP 8.1 ile Ubuntu 22.04 LTS kullanıcılarını hedeflemektedir. Ubuntu 24.04 LTS kullanıcıları için komutlarda PHP sürüm referanslarını
php8.1-fpmyerinephp8.3-fpmolarak güncelleyin. Ayrıca, Nginx yapılandırmanızdaki PHP-FPM soket yollarını da güncellediğinizden emin olun (örneğin, Ubuntu 24.04 için/run/php/php8.3-fpm.sockkullanın).
Ubuntu'ya Linux, Nginx, MySQL, PHP (LEMP yığını) Nasıl Kurulur
- Nginx Web Sunucusunu Kurma
- MySQL Kurulumu
- PHP Kurulumu
- Nginx'i PHP İşlemcisi ile Kullanacak Şekilde Yapılandırma
- PHP'yi Nginx ile Test Etmek
- PHP'den Veritabanı Bağlantısını Test Etme
Önkoşullar
UFW güvenlik duvarı etkin olan Ubuntu'da root olmayan bir sudo kullanıcısı kullanın. Bunu yapılandırmak için Ubuntu için başlangıç sunucu kurulum rehberimizi izleyin.
Adım 1 – Nginx Web Sunucusunu Kurma
Site ziyaretçilerine web sayfalarını göstermek için, yüksek performanslı bir web sunucusu olan Nginx'i kullanacaksınız. Bu yazılımı edinmek için APT paket yöneticisini kullanacaksınız.
Sunucunuzun paket dizinini güncelleyin, ardından Nginx'i kurun:
sudo apt updateBunun ardından Nginx'i kurmak için apt install komutunu çalıştırın:
sudo apt install nginxİstendiğinde, Nginx'i kurmak istediğinizi onaylamak için Y ve ENTER tuşlarına basın. Kurulum tamamlandıktan sonra, Nginx web sunucusu Ubuntu sunucunuzda etkin olacak ve çalışıyor olacaktır.
Nginx'in çalıştığını doğrulayın:
sudo systemctl status nginxNginx'in aktif olduğunu gösteren çıktıyı görmelisiniz:
● 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...Ubuntu'da, Nginx kurulumu sırasında otomatik olarak çalışacak şekilde yapılandırılır.
ufw güvenlik duvarı üzerinden HTTP trafiğine izin verin. Nginx, kurulumu sırasında birkaç UFW uygulama profili kaydeder. Mevcut profilleri kontrol edin:
sudo ufw app listAvailable applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSHGerekli trafiğe izin veren en kısıtlayıcı profili etkinleştirin. SSL henüz yapılandırılmadığı için sadece 80 numaralı port üzerinden HTTP trafiğine izin verin:
Bunu etkinleştirmek için aşağıdakileri çalıştırın:
sudo ufw allow 'Nginx HTTP'
Güvenlik duvarı değişikliğini doğrulayın:
sudo ufw statusBu çıktı, artık HTTP trafiğine izin verildiğini gösteriyor:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)Nginx sunucusunun alan adı işlevini test etmek için tercih ettiğiniz web tarayıcısını kullanarak http://your_domain adresine gidin.
Sunucunuza yönlendirilmiş bir alan adınız yoksa ve sunucunuzun genel IP adresini bilmiyorsanız, aşağıdaki komutlardan herhangi birini çalıştırarak bunu öğrenebilirsiniz:
ip addr showhostname -IBu, birkaç IP adresini ekrana yazdıracaktır. Her birini sırayla web tarayıcınızda deneyebilirsiniz.
Alternatif olarak, internetin diğer bölgelerinden hangi IP adresinin erişilebilir olduğunu kontrol edebilirsiniz:
curl -4 icanhazip.comWeb tarayıcınızda aldığınız adresi yazın ve bu sizi Nginx’in varsayılan ana sayfasına götürecektir:
http://<server_domain_or_IP>Bu sayfayı alıyorsanız, Nginx'i başarıyla kurmuş ve web sunucunuz için HTTP trafiğini etkinleştirmişsiniz demektir.
Adım 2 — MySQL Kurulumu
Site verilerini depolamak ve yönetmek için MySQL'i kurun. MySQL, PHP ortamları için standart veritabanı yönetim sistemidir.
Yine, bu yazılımı edinmek ve yüklemek için apt kullanın:
sudo apt install mysql-serverİstendiğinde, kurulumu onaylamak için Y tuşuna basın ve ardından ENTER tuşuna basın.
Kurulumdan sonra, güvenli olmayan varsayılan ayarları kaldırmak ve veritabanı erişimini kilitlemek için güvenlik betiğini çalıştırın:
sudo mysql_secure_installationSize VALIDATE PASSWORD PLUGIN öğesini yapılandırmak isteyip istemediğinizi soran bir ileti gösterilecektir.
Not: Bu özelliği etkinleştirmek bir tür değerlendirme gerektirir. Etkinleştirildiğinde, belirtilen kriterlere uymayan parolalar MySQL tarafından bir hata ile reddedilir. Doğrulamayı devre dışı bırakmak güvenlidir, ancak her zaman veritabanı kimlik bilgileri için güçlü ve benzersiz parolalar kullanmalısınız.
Evet için Y yazın, veya etkinleştirmeden devam etmek için başka bir şey yazın:
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: Eğer “evet” yanıtını verirseniz, bir parola doğrulama seviyesi seçmeniz istenecektir. En güçlü seviye için 2 girerseniz, sayı, büyük ve küçük harfler ile özel karakterler içermeyen herhangi bir parola belirlemeye çalıştığınızda hata alacağınızı unutmayın:
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: 1VALIDATE PASSWORD PLUGIN kurmayı seçip seçmediğinizden bağımsız olarak, sunucunuz MySQL root kullanıcısı için bir şifre belirlemenizi ve onaylamanızı isteyecektir. Bu, sistem root ile karıştırılmamalıdır. Veritabanı root kullanıcısı, veritabanı sistemi üzerinde tam yetkilere sahip bir yönetici kullanıcıdır. MySQL root kullanıcısının varsayılan kimlik doğrulama yöntemi şifre kullanımını gerektirmese de, bir şifre belirlense bile, ek bir güvenlik önlemi olarak burada güçlü bir şifre belirlemeniz önerilir. Bunu birazdan konuşacağız.
Parola doğrulamayı etkinleştirdiyseniz, girdiğiniz root parolası için parola gücü gösterilecek ve sunucunuz bu parola ile devam etmek isteyip istemediğinizi soracaktır. Mevcut parolanızdan memnunsanız, istemde Y tuşuna basarak "evet" diyebilirsiniz:
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) : yKalan sorular için her istemde Y tuşuna basın ve ENTER tuşuna basın. Bu, bazı anonim kullanıcıları ve test veritabanını kaldıracak, uzaktan root oturumlarını devre dışı bırakacak ve MySQL'in yaptığınız değişiklikleri hemen dikkate almasını sağlayacak bu yeni kuralları yükleyecektir.
Bitirdiğinizde, MySQL konsoluna giriş yapıp yapamadığınızı test edin:
sudo mysqlBu, bu komutu çalıştırırken sudo kullanıldığı için çıkarılan yönetici veritabanı kullanıcısı root olarak MySQL sunucusuna bağlanacaktır. Aşağıdaki çıktıyı almanız gerekir:
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>MySQL konsolundan çıkmak için, aşağıdakini yazın:
exitDikkat edin, mysql_secure_installation betiğini çalıştırırken bir şifre belirlemiş olmanıza rağmen, root kullanıcısı olarak bağlanmak için şifre girmeniz gerekmedi. Bunun nedeni, Ubuntu'ya yüklendiğinde yönetici MySQL kullanıcısı için varsayılan kimlik doğrulama yönteminin bir şifre kullanan yöntem yerine auth_socket olmasıdır. Bu ilk başta bir güvenlik endişesi gibi görünebilir, ancak veritabanı sunucusunu daha güvenli hale getirir çünkü root MySQL kullanıcısı olarak giriş yapmasına izin verilen tek kullanıcılar, terminalden veya aynı ayrıcalıklarla çalışan bir uygulama aracılığıyla bağlanan sudo yetkisine sahip sistem kullanıcılarıdır. Pratik anlamda, bu, PHP uygulamanızdan yönetici veritabanı root kullanıcısını kullanarak bağlanamayacağınız anlamına gelir.
Güvenliği artırmak için, özellikle sunucunuzda birden fazla veritabanı barındırmayı planlıyorsanız, her veritabanı için daha sınırlı yetkilere sahip özel kullanıcı hesapları oluşturmak en iyisidir.
Not: Yerel MySQL PHP kütüphanesi mysqlnd'nin bazı eski sürümleri, oluşturulan kullanıcılar için MySQL 8’in varsayılan kimlik doğrulama yöntemi olan caching_sha2_authentication'ı desteklememektedir. Bu nedenle, MySQL 8 üzerinde PHP uygulamaları için veritabanı kullanıcıları oluştururken, bunların yerine mysql_native_password kullanacak şekilde yapılandırıldığından emin olmanız gerekebilir. Bunu 6. Adımda nasıl yapacağımızı göstereceğiz.
MySQL sunucunuz artık kuruldu ve güvence altına alındı. Şimdi, LEMP yığınının son bileşeni olan PHP’yi kuracaksınız.
Adım 3 – PHP Kurulumu
Kodları işlemek ve dinamik içerik oluşturmak için PHP'yi kurun. Nginx, PHP işlemesi için harici bir programa ihtiyaç duyar.
PHP-FPM ("fastCGI işlem yöneticisi"), ek güvenlik özellikleriyle PHP işlemlerini verimli bir şekilde yönetir ve PHP tabanlı web siteleri için daha iyi performans sağlar. Nginx üzerinden PHP isteklerini yönlendirmek için php-fpm kurun ve PHP-MySQL iletişimini sağlamak için php-mysql kurun. Temel PHP paketleri bağımlılık olarak otomatik biçimde kurulur.
php8.1-fpm ve php-mysql paketlerini yüklemek için, şunu çalıştırın:
sudo apt install php8.1-fpm php-mysqlİstendiğinde, kurulumu onaylamak için Y ve ENTER tuşlarına basın.
PHP-FPM'nin çalıştığını doğrulayın:
sudo systemctl status php8.1-fpmPHP-FPM'in aktif olduğunu gösteren çıktıyı görmelisiniz:
● php8.1-fpm.service - The PHP 8.1 FastCGI Process Manager
Loaded: loaded
Active: active (running)Ayrıca PHP sürümünü de kontrol edebilirsiniz:
php -vPHP 8.1.x (cli) (built: ...)
Copyright (c) The PHP Group
Zend Engine v4.1.xNginx'i bu PHP bileşenlerini kullanacak şekilde yapılandırın.
Adım 4 — Nginx'i PHP İşlemcisi ile Kullanacak Şekilde Yapılandırma
Nginx sunucu blokları (Apache sanal sunucularına benzer) oluşturarak yapılandırmayı kapsülleyebilir ve bir sunucuda birden fazla alan adı barındırabilirsiniz. Bu kılavuzda örnek alan adı olarak your_domain kullanılmaktadır.
Bilgi: Linux-Console.net ile bir alan adı kurmayı öğrenmek için Linux-Console.net DNS hakkında giriş yazımızı okuyun.
Ubuntu 22.04 üzerinde, Nginx /var/www/html dizininden belgeler sunan bir varsayılan sunucu bloğunu etkinleştirir. Birden fazla site için, /var/www içinde your_domain için bir dizin yapısı oluşturun ve /var/www/html dizinini varsayılan yedek dizin olarak bırakın.
your_domain için kök web dizinini şu şekilde oluşturun:
sudo mkdir /var/www/your_domainSonraki adım olarak, mevcut sistem kullanıcıınızı referans alacak $USER ortam değişkeni ile dizinin sahipliğini atayın:
sudo chown -R $USER:$USER /var/www/your_domainSonra, tercih ettiğiniz komut satırı editörünü kullanarak Nginx’in sites-available dizininde yeni bir yapılandırma dosyası açın. Burada nano kullanacağız:
sudo nano /etc/nginx/sites-available/your_domainBu, yeni ve boş bir dosya oluşturacaktır. Aşağıdaki temel yapılandırmayı ekleyin:
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;
}
}İşte bu yönergelerin ve konum bloklarının her birinin yaptığı şey:
listen— Nginx'in hangi portu dinleyeceğini tanımlar. Bu durumda, HTTP için varsayılan port olan80numaralı portu dinleyecektir.root— Bu web sitesine ait dosyaların saklandığı belge kökünü tanımlar.index— Nginx'in bu web sitesi için hangi sırayla index dosyalarına öncelik vereceğini tanımlar. PHP uygulamalarında hızlıca bir bakım açılış sayfası oluşturmayı sağlamak için genellikleindex.htmldosyalarıindex.phpdosyalarından önce listelenir. Bu ayarları uygulamanızın ihtiyaçlarına daha uygun olacak şekilde değiştirebilirsiniz.server_name— Bu sunucu bloğunun hangi alan adlarına ve/veya IP adreslerine yanıt vereceğini tanımlar. Bu yönergeyi sunucunuzun alan adına veya genel IP adresine yönlendirin.location /— İlk location bloğu, bir URL isteğiyle eşleşen dosya veya dizinlerin varlığını kontrol eden birtry_filesyönergesini içerir. Nginx uygun kaynağı bulamazsa, 404 hatası döndürecektir.location ~ \.php$— Bu konum bloğu, Nginx'ifastcgi-php.confyapılandırma dosyasına vephp8.1-fpm.sockdosyasına yönlendirerek gerçek PHP işlemlerini yönetir; bu dosya, hangi soketinphp8.1-fpmile ilişkili olduğunu belirtir.location ~ /\.ht— Son location bloğu, Nginx tarafından işlenmeyen.htaccessdosyalarını ele alır.deny allyönergesini ekleyerek, herhangi bir.htaccessdosyası belge köküne ulaşırsa, ziyaretçilere sunulmayacaktır.
Düzenlemeyi bitirdiğinizde, dosyayı kaydedip kapatın. Eğer nano kullanıyorsanız, bunu CTRL+X tuşlarına basıp ardından onaylamak için Y ve ENTER tuşlarına basarak yapabilirsiniz.
Yapılandırma dosyasını Nginx’in sites-enabled dizininden bağlayarak yapılandırmanızı etkinleştirin:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/Ardından, varsayılan yapılandırma dosyasının /sites-enabled/ dizininden bağlantısını kaldırın:
sudo unlink /etc/nginx/sites-enabled/defaultNot: Varsayılan yapılandırmayı geri yüklemeniz gerekirse, bunu aşağıdaki gibi sembolik bağlantıyı yeniden oluşturarak yapabilirsiniz:
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/Bu, Nginx'e bir sonraki yeniden yüklemede yapılandırmayı kullanmasını söyleyecektir. Yapılandırmanızı sözdizimi hataları açısından test etmek için aşağıdakini çalıştırabilirsiniz:
sudo nginx -tHerhangi bir hata bildiriliyorsa, devam etmeden önce yapılandırma dosyanızın içeriğini gözden geçirmek için dosyaya geri dönün.
Hazır olduğunuzda, değişiklikleri uygulamak için Nginx'i yeniden yükleyin:
sudo systemctl reload nginxYeni web siteniz artık aktif, ancak web kökü /var/www/your_domain hâlâ boş. Yeni sunucu bloğunuzun beklendiği gibi çalışıp çalışmadığını test edebilmek için bu konumda bir index.html dosyası oluşturun:
nano /var/www/your_domain/index.htmlBu dosyaya aşağıdaki içeriği ekleyin:
<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>Şimdi tarayıcınızı açın ve sunucu bloğu yapılandırma dosyanızdaki server_name yönergesinde listelenen sunucunuzun alan adını veya IP adresini girin:
http://server_domain_or_IPAşağıdaki gibi bir sayfa alacaksınız:
Bu sayfayı alıyorsanız, bu Nginx sunucu bloğunuzun beklendiği gibi çalıştığı anlamına gelir.
Bu dosyayı, yerine geçecek bir index.php dosyası oluşturana kadar uygulamanız için geçici bir açılış sayfası olarak yerinde bırakabilirsiniz.
Uyarı: index.php dosyanızı ekledikten sonra, belge kök dizininizden index.html dosyasını kaldırdığınızdan veya yeniden adlandırdığınızdan emin olun. Her iki dosya da mevcutsa, Nginx varsayılan olarak index.html dosyasını sunar ve PHP sayfanız görüntülenmez—bu, yeni kullanıcılar için yaygın bir kafa karışıklığı kaynağıdır.
LEMP yığınınız artık tamamen yapılandırıldı. Bir sonraki adımda, Nginx’in gerçekten yeni yapılandırdığınız web sitesinde .php dosyalarını işleyip işleyemediğini test etmek için bir PHP betiği oluşturacaksınız.
Adım 5 – PHP'yi Nginx ile Test Etme
LEMP yığını artık tamamen kurulmuş olmalıdır. Nginx'in .php dosyalarını PHP işlemcinize doğru bir şekilde iletebildiğini doğrulamak için test edebilirsiniz.
Bunu, belge kökünüzde bir test PHP dosyası oluşturarak yapabilirsiniz. Tercih ettiğiniz metin düzenleyicide belge kökünüzde info.php adında yeni bir dosya açın:
nano /var/www/your_domain/info.phpYeni dosyaya aşağıdaki satırları ekleyin. Bu, sunucunuz hakkında bilgi döndürecek geçerli bir PHP kodudur:
<?php
phpinfo();İşi bitirdiğinizde, dosyayı kaydedin ve kapatın.
Artık bu sayfaya web tarayıcınızdan, Nginx yapılandırma dosyanızda belirlediğiniz alan adı veya genel IP adresini ziyaret ederek ve ardından /info.php ekleyerek erişebilirsiniz:
http://server_domain_or_IP/info.phpSunucunuz hakkında ayrıntılı bilgileri içeren bir web sayfası alacaksınız:
O sayfa üzerinden PHP sunucunuz ile ilgili ilgili bilgileri kontrol ettikten sonra, oluşturduğunuz dosyayı kaldırmanız en iyisidir çünkü bu dosya PHP ortamınız ve Ubuntu sunucunuz hakkında hassas bilgiler içermektedir. Bu dosyayı kaldırmak için rm komutunu kullanabilirsiniz:
sudo rm /var/www/your_domain/info.phpİhtiyacınız olursa bu dosyayı her zaman yeniden oluşturabilirsiniz.
Adım 6 — PHP'den Veritabanı Bağlantısını Test Etme (Opsiyonel)
PHP'nin MySQL'e bağlanıp bağlanamadığını ve veritabanı sorgularını çalıştırıp çalıştıramadığını test etmek istiyorsanız, sahte verilerle bir test tablosu oluşturabilir ve PHP betiğinden içeriğini sorgulayabilirsiniz. Bunu yapmadan önce, bir test veritabanı oluşturmanız ve buna erişebilecek şekilde doğru yapılandırılmış yeni bir MySQL kullanıcısı oluşturmanız gerekir.
Not: Yerel MySQL PHP kütüphanesinin bazı eski sürümleri olan mysqlnd, MySQL 8 için varsayılan kimlik doğrulama yöntemi olan caching_sha2_authentication’ı desteklememektedir; bunun yerine mysql_native_password kullanacak şekilde yapılandırıldıklarından emin olmanız gerekebilir.
example_database adlı bir veritabanı ve example_user adlı bir kullanıcı oluşturacağız, ancak bu isimleri farklı değerlerle değiştirebilirsiniz.
Öncelikle, root hesabını kullanarak MySQL konsoluna bağlanın:
sudo mysqlYeni bir veritabanı oluşturmak için MySQL konsolunuzdan aşağıdaki komutu çalıştırın:
CREATE DATABASE example_database;Şimdi yeni bir kullanıcı oluşturabilir ve ona oluşturduğunuz özel veritabanında tam yetki verebilirsiniz.
Aşağıdaki komut, varsayılan kimlik doğrulama yöntemi olarak mysql_native_password kullanarak example_user adlı yeni bir kullanıcı oluşturur. Bu kullanıcının parolasını password olarak belirliyoruz, ancak siz bu değeri kendi seçtiğiniz güvenli bir parola ile değiştirmelisiniz.
CREATE USER 'example_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';Şimdi bu kullanıcıya example_database veritabanı üzerinde izin vermemiz gerekiyor:
GRANT ALL ON example_database.* TO 'example_user'@'%';Bu, example_user kullanıcısına example_database veritabanı üzerinde tam yetki verirken, bu kullanıcının sunucunuzda başka veritabanları oluşturmasını veya değiştirmesini engelleyecektir.
Artık aşağıdaki komutla MySQL kabuğundan çıkabilirsiniz:
exitYeni kullanıcının uygun izinlere sahip olup olmadığını, bu sefer özel kullanıcı kimlik bilgilerini kullanarak MySQL konsoluna tekrar giriş yaparak test edebilirsiniz. Bu komuttaki -p bayrağına dikkat edin; bu, example_user kullanıcısını oluştururken kullanılan şifreyi girmenizi isteyecektir:
mysql -u example_user -pMySQL konsoluna giriş yaptıktan sonra, example_database veritabanına erişiminizin olduğunu doğrulayın:
SHOW DATABASES;Bu, aşağıdaki çıktıyı verecektir:
+--------------------+
| Database |
+--------------------+
| example_database |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)Sonraki adımda, todo_list adlı bir test tablosu oluşturacağız. MySQL konsolundan aşağıdaki ifadeyi çalıştırın:
CREATE TABLE example_database.todo_list (
item_id INT AUTO_INCREMENT,
content VARCHAR(255),
PRIMARY KEY(item_id)
);Test tablosuna birkaç satır içerik ekleyin. Sonraki komutu farklı değerler kullanarak birkaç kez tekrarlamak isteyebilirsiniz:
INSERT INTO example_database.todo_list (content) VALUES ("My first important item");Verilerin tablonuza başarıyla kaydedildiğini doğrulamak için şunu çalıştırın:
SELECT * FROM example_database.todo_list;Çıktınız aşağıdaki gibi görünmelidir:
+---------+--------------------------+
| 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)Test tablonuzda geçerli veriler bulunduğunu doğruladıktan sonra, MySQL konsolundan çıkabilirsiniz:
exitArtık MySQL’e bağlanacak ve içeriğinizi sorgulayacak PHP betiğini oluşturabilirsiniz. Tercih ettiğiniz düzenleyiciyi kullanarak özel web kök dizininizde yeni bir PHP dosyası oluşturun. Bunun için nano kullanacağız:
nano /var/www/your_domain/todo_list.phpAşağıdaki PHP betiği MySQL veritabanına bağlanır ve todo_list tablosunun içeriğini sorgular, sonuçları bir liste halinde gösterir. Veritabanı bağlantısında bir sorun olursa, bir istisna fırlatır.
todo_list.php betiğinize aşağıdaki içeriği ekleyin:
<?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();
}
Düzenlemeyi bitirdiğinizde dosyayı kaydedin ve kapatın.
Artık bu sayfaya web tarayıcınızdan, web siteniz için yapılandırılmış alan adı veya genel IP adresini ziyaret ederek ve ardından /todo_list.php ekleyerek erişebilirsiniz:
http://server_domain_or_IP/todo_list.phpTest tablonuza eklediğiniz içeriği gösteren aşağıdaki gibi bir sayfa almanız gerekir:
Bu, PHP ortamınızın MySQL sunucunuza bağlanmaya ve onunla etkileşimde bulunmaya hazır olduğu anlamına gelir.
Sıkça Sorulan Sorular
LEMP yığını ne için kullanılır?
LEMP yığını, WordPress, Laravel, Magento, Drupal ve özel PHP projeleri dahil olmak üzere dinamik PHP tabanlı web siteleri ve uygulamaları barındırır. Özellikle verimli eşzamanlı bağlantı yönetimi gerektiren yüksek trafikli siteler için oldukça etkilidir.
LEMP ve LAMP yığınları arasındaki fark nedir?
LEMP Nginx kullanır, bağlantıları olay odaklı bir mimari ile eşzamansız olarak yönetir—bu, aynı anda birçok kullanıcı için verimlidir. LAMP Apache kullanır, ki bu geleneksel olarak her istek için bir iş parçacığı oluşturur (modern Apache ise olay odaklı modları destekler). LEMP genellikle statik içerik ve yüksek eşzamanlılık senaryolarında daha iyi performans sunarken, LAMP daha kolay .htaccess yapılandırması ve daha geniş modül desteği sağlar.
LEMP için hangi Ubuntu sürümünü kullanmalıyım?
Ubuntu 22.04 LTS, bu rehberin ana hedefidir ve uzun süreli destek ile PHP 8.1, MySQL 8.0 ve Nginx içerir. Ubuntu 24.04 LTS (en son sürüm) varsayılan olarak PHP 8.3 ile gelir ve PHP-FPM soket yolları ve sürüm numaralarını buna göre ayarlayarak bu rehberle uyumlu çalışır.
Ubuntu 24.04 üzerinde LEMP yığını nasıl kurulur?
Bu temel adımları izleyin:
- Nginx'i yükleyin:
sudo apt install nginx - MySQL'i Yükleyin:
sudo apt install mysql-server - MySQL güvenlik betiğini çalıştırın:
sudo mysql_secure_installation - PHP-FPM'i yükleyin:
sudo apt install php-fpm php-mysql - PHP-FPM entegrasyonu ile Nginx sunucu bloğunu yapılandırın
info.phpve veritabanı bağlantısı ile test
Tüm adımları görmek için yukarıdaki 1-6 Adımlara bakın.
Nginx ve MySQL ile hangi PHP sürümünü yüklemeliyim?
En iyi uyumluluk için Ubuntu sürümünüzün varsayılan PHP’sini kullanın:
- Ubuntu 22.04: PHP 8.1 (yüklendi via
php8.1-fpm) - Ubuntu 24.04: PHP 8.3 (bu sürüm için komutları
php8.3-fpmolarak ayarlayın)
Her iki sürüm de Nginx ve MySQL 8.0 ile mükemmel çalışıyor, modern çerçeveleri destekliyor ve aktif güvenlik güncellemeleri alıyor.
Nginx'i PHP dosyalarını işlemek için nasıl yapılandırabilirim?
PHP isteklerini Unix soketi üzerinden PHP-FPM'ye yönlendiren Nginx sunucu yapılandırmanıza bir location ~ \.php$ bloğu ekleyin:
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;
}PHP sürümünüze göre soket yolunu ayarlayın, sudo nginx -t ile test edin ve sudo systemctl reload nginx ile yeniden yükleyin.
PHP-FPM kurulumundan sonra neden “502 Bad Gateway” hatası alıyorum?
502 hataları, Nginx’in PHP-FPM ile iletişim kuramadığını gösterir. Yaygın nedenler:
- PHP-FPM çalışmıyor:
sudo systemctl status php8.1-fpmile kontrol edin ve gerekirse başlatın - Yanlış soket yolu:
/run/php/php8.1-fpm.sockdosyasının var olduğunu ve Nginx yapılandırmanızla eşleştiğini doğrulayın - İzin sorunu: Nginx kullanıcısının (www-data) sokete erişebildiğinden emin olun
- PHP-FPM yapılandırma hatası: Kayıtları
/var/log/php8.1-fpm.logdosyasında kontrol edin
Çözüm: Her iki servisi yeniden başlatın:
sudo systemctl restart php8.1-fpm nginxMySQL'i kurduktan sonra nasıl güvene alabilirim?
Yerleşik güvenlik betiğini çalıştırın:
sudo mysql_secure_installationŞunları yapmak için yönergeleri izleyin:
- Parola doğrulama eklentisini etkinleştir
- Güçlü bir root şifresi belirleyin
- Anonim kullanıcıları kaldır
- Uzak root girişini devre dışı bırak
- Test veritabanını kaldır
- Yeniden yükleme ayrıcalıkları
Uygulama veritabanları için root hesabını kullanmak yerine sınırlı ayrıcalıklara sahip özel kullanıcılar oluşturun.
Tek bir LEMP sunucusunda birden fazla web sitesini çalıştırabilir miyim?
Evet, her alan adı için ayrı Nginx sunucu blokları oluşturun:
- Dizin oluştur:
sudo mkdir -p /var/www/second_domain - Sunucu bloğu oluşturun:
sudo nano /etc/nginx/sites-available/second_domain - Benzersiz
server_nameverootyönergeleriyle yapılandırın - Etkinleştir:
sudo ln -s /etc/nginx/sites-available/second_domain /etc/nginx/sites-enabled/ - Test edin ve yeniden yükleyin:
sudo nginx -t && sudo systemctl reload nginx
Her site ayrı PHP ayarlarına ve veritabanı kullanıcılarına sahip olabilir.
PHP’yi daha yeni bir sürüme nasıl yükseltebilirim?
Ubuntu paket yükseltmeleri küçük sürümleri otomatik olarak yönetir. Büyük sürüm yükseltmeleri için:
Ondřej'in PHP PPA'sını (güvenilir üçüncü taraf deposu) ekleyin:
sudo add-apt-repository ppa:ondrej/php sudo apt updateYeni PHP-FPM sürümünü yükleyin:
sudo apt install php8.3-fpm php8.3-mysql -yNginx yapılandırma soket yolunu
/run/php/php8.3-fpm.sockolarak güncelleNginx'i test et ve yeniden yükle
İsteğe bağlı olarak eski sürümü kaldırın:
sudo apt purge php8.1-fpm
Üretim sistemlerini yükseltmeden önce her zaman aşama ortamında test edin.
Yaygın Sorunları Giderme
502 Bad Gateway Hatası
En yaygın LEMP yığını sorunu, Nginx'in PHP-FPM ile iletişim kuramamasıdır:
PHP-FPM Durumunu Kontrol Et:
sudo systemctl status php8.1-fpmSoket Yolunu Doğrula:
ls -la /run/php/Beklenen çıktı php8.1-fpm.sock dosyasını göstermelidir.
Yaygın Düzeltmeler:
- PHP-FPM'i yeniden başlatın:
sudo systemctl restart php8.1-fpm - Nginx sunucu bloğu soket yolunun gerçek PHP-FPM soketiyle eşleşip eşleşmediğini kontrol edin
- Dosya izinlerini doğrulayın:
sudo chown www-data:www-data /run/php/php8.1-fpm.sock
İzin Reddedildi Hataları
Web dizini izinlerini düzelt:
sudo chown -R www-data:www-data /var/www/your_domain
sudo chmod -R 755 /var/www/your_domainMySQL Bağlantı Sorunları
MySQL root şifresini sıfırla:
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
FLUSH PRIVILEGES;
EXIT;MySQL servisini kontrol et:
sudo systemctl status mysqlPHP İşlem Yapmıyor
PHP modüllerini doğrulayın:
php -m | grep -E 'mysql|fpm'PHP-FPM yapılandırmasını kontrol edin:
sudo nginx -t
sudo php-fpm8.1 -tHata 404'ü Hata Ayıklama:
- Nginx
indexyönergesindeindex.php'nin listelendiğini doğrulayın - Dosyanın var olup olmadığını kontrol et:
ls -la /var/www/your_domain/ - Nginx hata günlüklerini inceleyin:
sudo tail -f /var/log/nginx/error.log
Sonuç
Bu kılavuzda, ziyaretçilerinize PHP web siteleri ve uygulamaları sunmak için esnek bir temel oluşturdunuz; web sunucusu olarak Nginx ve veritabanı sistemi olarak MySQL kullandınız. Bunu bir Apache web sunucusu ile de yapabilirsiniz; Ubuntu üzerinde Linux, Apache, MySQL, PHP (LAMP) yığını kurma konusundaki kılavuzumuza göz atın. Ayrıca, ücretsiz ve güvenilir sertifikalar sağlayan Let’s Encrypt ile sitenizi güvence altına alabilirsiniz. Bunu nasıl yapacağınızı, Apache için Let’s Encrypt kılavuzumuzdan öğrenin.
Linux-Console.net Topluluğu ile öğrenmeye katıldığınız için teşekkürler.



