giriiş
“LAMP” yığını, genellikle PHP ile yazılmış dinamik web sitelerini ve web uygulamalarını barındırmak için bir sunucuya olanak sağlamak amacıyla birlikte kurulan bir grup açık kaynaklı yazılımdır. Terim, Linux işletim sistemi ve Apache web sunucusunu ifade eder. Site verileri MySQL veritabanında saklanır ve dinamik içerik PHP tarafından işlenir.
Bu kılavuzda, Ubuntu 22.04 sunucusunda bir LAMP yığını kuracaksınız. Bu adımlar Ubuntu 18.04 ve üzeri sürümler için de geçerlidir.
Ön koşullar
Bu eğitim setini tamamlamak için Ubuntu işletim sistemi çalıştıran bir sunucuya, sudo yetkilerine sahip root olmayan bir kullanıcıya ve aktif bir güvenlik duvarına ihtiyacınız olacak. Bunların nasıl kurulacağına dair talimatlar için lütfen bu listeden dağıtımınızı seçin ve ilk sunucu kurulum kılavuzumuzu takip edin.
Adım 1 – Apache'yi Kurun ve Güvenlik Duvarını Güncelleyin
Apache web sunucusu, dünyanın en popüler web sunucularından biridir. İyi belgelenmiş, aktif bir kullanıcı topluluğuna sahip ve web tarihinin büyük bir bölümünde yaygın olarak kullanılmış olması, onu web sitesi barındırma için mükemmel bir seçim haline getiriyor.
Paket yöneticisi önbelleğini güncelleyerek başlayın. Bu oturumda sudo'yu ilk kez kullanıyorsanız, apt ile sistem paketlerini yönetmek için gerekli ayrıcalıklara sahip olduğunuzu doğrulamak amacıyla kullanıcı parolanızı girmeniz istenecektir:
sudo apt updateArdından Apache'yi şu komutla başlatın:
sudo apt install apache2Apache kurulumunu onaylamanız istenecektir. Y tuşuna ve ardından ENTER tuşuna basarak onaylayın.
Kurulum tamamlandıktan sonra, HTTP trafiğine izin vermek için güvenlik duvarı ayarlarınızı yapılandırmanız gerekir. Ubuntu'nun varsayılan güvenlik duvarı yapılandırma aracı Uncomplicated Firewall (UFW) olarak adlandırılır. Kullanabileceğiniz çeşitli uygulama profilleri vardır. Mevcut tüm UFW uygulama profillerini listelemek için şu komutu çalıştırın:
sudo ufw app listOutput
Available applications:
Apache
Apache Full
Apache Secure
OpenSSHİşte bu profillerin her birinin anlamı:
- Apache: Bu profil yalnızca 80 numaralı bağlantı noktasını açar (normal, şifrelenmemiş web trafiği).
- Apache Full: Bu profil hem 80 numaralı bağlantı noktasını (normal, şifrelenmemiş web trafiği) hem de 443 numaralı bağlantı noktasını (TLS/SSL şifreli trafik) açar.
- Apache Secure: Bu profil yalnızca 443 numaralı bağlantı noktasını açar (TLS/SSL şifreli trafik).
Şimdilik, yalnızca 80 numaralı porta bağlantılara izin vermek en iyisidir, çünkü bu yeni bir Apache kurulumudur ve sunucunuzda HTTPS trafiğine izin verecek bir TLS/SSL sertifikası henüz yapılandırmadınız.
Yalnızca 80 numaralı porttan trafiğe izin vermek için Apache profilini kullanın:
sudo ufw allow in "Apache"Değişikliği şu şekilde onaylayın:
sudo ufw statusOutput
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)80 numaralı port üzerinden gelen trafiğe artık güvenlik duvarından geçiş izni veriliyor.
Sunucunuzun genel IP adresini bir web tarayıcısında ziyaret ederek her şeyin planlandığı gibi gittiğinden emin olmak için hemen hızlı bir kontrol yapabilirsiniz (bu bilgiye sahip değilseniz, genel IP adresinizin ne olduğunu öğrenmek için bir sonraki başlığın altındaki nota bakın. Daha önce, daha önce):
http://your_server_ipUbuntu'nun varsayılan Apache web sayfası bilgilendirme ve test amaçlıdır. Aşağıda Ubuntu 22.04 için varsayılan Apache web sayfasının bir örneği verilmiştir:
Bu sayfayı görebiliyorsanız, web sunucunuz doğru şekilde kurulmuş ve güvenlik duvarınızdan erişilebilir durumdadır.
Sunucunuzun genel IP adresini nasıl bulabilirsiniz?
Sunucunuzun genel IP adresini bilmiyorsanız, bunu bulmanın birkaç yolu vardır. Genellikle bu, sunucunuza SSH üzerinden bağlanmak için kullandığınız adrestir.
Bunu komut satırından yapmanın birkaç farklı yolu var. İlk olarak, şu komutu yazarak iproute2 aracını kullanarak IP adresinizi alabilirsiniz:
ip addr show ens3 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'Bu işlem iki veya üç satır döndürecektir. Bunların hepsi geçerli adreslerdir, ancak bilgisayarınız bunlardan yalnızca birini kullanabilir, bu nedenle her birini deneyin.
Alternatif bir yöntem ise, curl aracını kullanarak harici bir tarafla iletişime geçip ona sunucunuzu nasıl gördüğünü bildirmektir. Bu, belirli bir sunucuya IP adresinizin ne olduğunu sorarak yapılır:
curl http://icanhazip.comHangi yöntemi seçerseniz seçin, sunucunuzun çalışıp çalışmadığını kontrol etmek için IP adresinizi web tarayıcınıza yazın.
Adım 2 – MySQL Kurulumu
Artık bir web sunucunuz olduğuna göre, siteniz için verileri depolayıp yönetebileceğiniz bir veritabanı sistemi kurmanız gerekiyor. MySQL, PHP ortamlarında kullanılan popüler bir veritabanı yönetim sistemidir.
Bu yazılımı edinmek ve yüklemek için tekrar apt komutunu kullanın:
sudo apt install mysql-serverİstenildiğinde, Y yazarak ve ardından kurulumu onaylayarak işlemi gerçekleştirin. GİRMEK Onaylamak.
Kurulum tamamlandıktan sonra, MySQL ile birlikte önceden yüklenmiş olan güvenlik komut dosyasını çalıştırmanız önerilir. Bu komut dosyası, bazı güvensiz varsayılan ayarları kaldıracak ve veritabanı sisteminize erişimi kısıtlayacaktır.
Aşağıdaki komutu çalıştırarak etkileşimli betiği başlatın:
sudo mysql_secure_installationBu soru size isteyip istemediğinizi soruyor. ŞİFRE DOĞRULAMA EKLENTİSİ Yapılandırın.
Etkinleştirmeden devam etmek için Y veya başka bir şey yanıtlayın.
VALIDATE PASSWORD PLUGIN 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 plugin?
Press y|Y for Yes, any other key for No:"Evet" yanıtını verirseniz, bir parola doğrulama düzeyi seçmeniz istenecektir. En güçlü düzey olan 2'yi girerseniz, rakam, büyük ve küçük harf ve özel karakter içermeyen bir parola belirlemeye çalışırken hatalar 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'i ayarlamayı seçseniz de seçmeseniz de, sunucunuz daha sonra MySQL root kullanıcısı için bir parola seçmenizi ve onaylamanızı isteyecektir. Bu, sistem root'u ile karıştırılmamalıdır. Veritabanı root kullanıcısı, veritabanı sisteminde tam yetkiye sahip bir yönetici kullanıcıdır. MySQL root kullanıcısı için varsayılan kimlik doğrulama yöntemi parola kullanımını içermese de, bir parola ayarlanmış olsa bile, ek bir güvenlik önlemi olarak burada güçlü bir parola tanımlamalısınız.
Parola doğrulamasını etkinleştirdiyseniz, az önce girdiğiniz root parolasının gücü size gösterilecek ve sunucunuz bu parolayla devam etmek isteyip istemediğinizi soracaktır. Mevcut parolanızdan memnunsanız, istemde "evet" anlamına gelen Y girin:
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) : yGeri kalan sorular için, her bir istemde Y tuşuna ve ardından ENTER tuşuna basın. Bu işlem, bazı anonim kullanıcıları ve test veritabanını kaldıracak, uzaktan root girişlerini devre dışı bırakacak ve MySQL'in yaptığınız değişiklikleri hemen dikkate alması için bu yeni kuralları yükleyecektir.
İşlem tamamlandığında, aşağıdaki komutu yazarak MySQL konsoluna giriş yapıp yapamayacağınızı test edin:
sudo mysqlBu komut, sudo komutu çalıştırılırken kullanılan yönetici veritabanı kullanıcısı root olarak MySQL sunucusuna bağlanır. Aşağıda örnek bir çıktı bulunmaktadır:
Output
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 şunu yazın:
exitMySQL_secure_installation betiğini çalıştırırken bir parola tanımlamış olsanız bile, root kullanıcısı olarak bağlanmak için parola girmenize gerek olmadığını unutmayın. Bunun nedeni, yönetici MySQL kullanıcısı için varsayılan kimlik doğrulama yönteminin parola yerine unix_socket olmasıdır. Bu bir güvenlik endişesi gibi görünse de, veritabanı sunucusunu daha güvenli hale getirir çünkü MySQL root kullanıcısı olarak oturum açmasına izin verilen tek kullanıcılar, konsoldan veya aynı ayrıcalıklarla çalışan bir program aracılığıyla bağlanan sudo ayrıcalıklarına sahip sistem kullanıcılarıdır. Pratik olarak bu, PHP uygulamanızdan bağlanmak için yönetici veritabanı root kullanıcısını kullanamayacağınız anlamına gelir. MySQL root hesabı için bir parola belirlemek, varsayılan kimlik doğrulama yönteminin unix_socket'ten parolaya değişmesi durumunda bir güvenlik önlemi görevi görür.
Güvenliğinizi artırmak için, özellikle sunucunuzda birden fazla veritabanı barındırmayı planlıyorsanız, her veritabanı için daha az kapsamlı ayrıcalıklara sahip özel kullanıcı hesapları oluşturmanız en iyisidir.
MySQL sunucunuz artık kuruldu ve güvenliği sağlandı. Sonraki adımda, LAMP yığınının son bileşeni olan PHP'yi kuracaksınız.
Adım 3 – PHP'yi yükleyin
İçeriğinizi sunmak için Apache'yi ve verilerinizi depolamak ve yönetmek için MySQL'i kurdunuz. PHP, son kullanıcıya dinamik içerik göstermek için kodu işleyen kurulumumuzun bir parçasıdır. PHP paketine ek olarak, PHP'nin MySQL tabanlı veritabanlarıyla iletişim kurmasını sağlayan bir PHP modülü olan php-mysql'e ihtiyacınız var. Ayrıca, Apache'nin PHP dosyalarını işlemesini sağlamak için libapache2-mod-php'ye de ihtiyacınız var. Temel PHP paketleri otomatik olarak bağımlılık olarak yüklenir.
Bu paketleri yüklemek için aşağıdaki komutu çalıştırın:
sudo apt install php libapache2-mod-php php-mysqlKurulum tamamlandıktan sonra, PHP sürümünüzü doğrulamak için aşağıdaki komutu çalıştırın:
php -vOutput
PHP 8.1.2 (cli) (built: Mar 4 2022 18:13:46) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
with Zend OPcache v8.1.2, Copyright (c), by Zend TechnologiesApache dizinini değiştirin (isteğe bağlı)
Bazı durumlarda, Apache'nin bir dizine istek gönderirken dosyaları sunma şeklini değiştirmek isteyebilirsiniz. Şu anda, bir kullanıcı sunucudan bir dizin istediğinde, Apache önce index.html adlı bir dosyayı arar. Web sunucusuna PHP dosyalarına diğerlerinden daha fazla öncelik vermesini, yani Apache'nin önce index.php dosyasını aramasını söylemek istiyoruz. Bunu yapmazsanız, uygulamanın belge kök dizinine yerleştirilen bir index.html dosyası her zaman index.php dosyasına göre öncelikli olacaktır.
Bu değişikliği yapmak için, dir.conf yapılandırma dosyasını tercih ettiğiniz bir metin düzenleyicide açın. Burada nano'yu kullanacağız:
sudo nano /etc/apache2/mods-enabled/dir.conf
Şöyle görünecek:
<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>Yukarıda belirtilen PHP index dosyasını, DirectoryIndex belirtiminden sonraki ilk konuma şu şekilde taşıyın:
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>İşleminiz bittiğinde, CTRL+X tuşlarına basarak dosyayı kaydedin ve kapatın. Kaydetmeyi onaylamak için Y yazın ve ardından dosyayı kaydetmek istediğiniz konumu onaylamak için ENTER tuşuna basın.
Bundan sonra, değişikliklerinizin geçerli olması için Apache web sunucusunu yeniden başlatın. Bunu aşağıdaki komutla yapabilirsiniz:
sudo systemctl restart apache2Apache2 servisinin durumunu systemctl komutunu kullanarak da kontrol edebilirsiniz:
sudo systemctl status apache2Sample Output
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Thu 2021-07-15 09:22:59 UTC; 1h 3min ago
Main PID: 3719 (apache2)
Tasks: 55 (limit: 2361)
CGroup: /system.slice/apache2.service
├─3719 /usr/sbin/apache2 -k start
├─3721 /usr/sbin/apache2 -k start
└─3722 /usr/sbin/apache2 -k start
Jul 15 09:22:59 ubuntu1804 systemd[1]: Starting The Apache HTTP Server...
Jul 15 09:22:59 ubuntu1804 apachectl[3694]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' di
Jul 15 09:22:59 ubuntu1804 systemd[1]: Started The Apache HTTP Server.Bu durumdan kurtulmak için, Q Basmak .
PHP eklentilerini yükleyin (isteğe bağlı)
PHP'nin işlevselliğini genişletmek için birkaç ek modül yükleyebilirsiniz. PHP modülleri ve kütüphaneleri için mevcut seçenekleri görmek için, arama sonuçlarını diğer komutların çıktısını kaydırmanıza olanak tanıyan bir sayfalama aracı olan less'e girin:
apt search php- | lessYukarı ve aşağı hareket etmek için ok tuşlarını kullanın ve çıkmak için Q düğmesine basın.
Sonuçlar, yükleyebileceğiniz tüm isteğe bağlı bileşenleri gösterir. Her biri için kısa bir açıklama sunar:
bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64
Tracks usage of TCP/IP and builds html files with graphs
bluefish/bionic 2.2.10-1 amd64
advanced Gtk+ text editor for web and software development
cacti/bionic 1.1.38+ds1-1 all
web interface for graphing of monitoring systems
ganglia-webfrontend/bionic 3.6.1-3 all
cluster monitoring toolkit - web front-end
golang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-4 all
PHP-like Compression and Archive Extensions in Go
haserl/bionic 0.9.35-2 amd64
CGI scripting program for embedded environments
kdevelop-php-docs/bionic 5.2.1-1ubuntu2 all
transitional package for kdevelop-php
kdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 all
transitional package for kdevelop-php-l10n
…Her modülün ne işe yaradığı hakkında daha fazla bilgi edinmek için internette arama yapabilirsiniz. Ayrıca, aşağıdaki komutu yazarak uzun paket açıklamalarına da göz atabilirsiniz:
apt show package_nameModülün işlevselliğine dair daha ayrıntılı bilgi sağlayan "Açıklama" adlı bir alan da dahil olmak üzere çok sayıda çıktı olacaktır.
Örneğin, php-cli modülünün ne işe yaradığını öğrenmek için şunu yazabilirsiniz:
apt show php-cliDiğer pek çok bilginin yanı sıra, aşağıdaki gibi bir şey de bulacaksınız:
Output
…
Description: command-line interpreter for the PHP scripting language (default)
This package provides the /usr/bin/php command interpreter, useful for
testing PHP scripts from a shell or performing general shell scripting tasks.
.
PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used
open source general-purpose scripting language that is especially suited
for web development and can be embedded into HTML.
.
This package is a dependency package, which depends on Ubuntu's default
PHP version (currently 7.2).
…Araştırmalarınız sonucunda bir paket yüklemek istediğinize karar verirseniz, tıpkı diğer yazılımlarda olduğu gibi apt install komutunu kullanarak bunu yapabilirsiniz.
Eğer php-cli'ye ihtiyacınız olduğuna karar verirseniz, şunu yazabilirsiniz:
sudo apt install php-cliBirden fazla modül yüklemek istiyorsanız, her modülü bir boşlukla ayırarak ve ardından `apt install` komutunu yazarak aşağıdaki gibi yükleyebilirsiniz:
sudo apt install package1 package2 ...Bu aşamada, LAMP yığınınız kurulmuş ve yapılandırılmıştır. Başka bir şey yapmadan önce, sunucu yapılandırma ayrıntılarınızı saklayabilmeniz için bir Apache sanal sunucusu kurmanızı öneririz.
Bu aşamada LAMP yığınınız tamamen çalışır durumda, ancak kurulumunuzu bir PHP betiğiyle test etmeden önce, web sitenizin dosya ve klasörlerini barındıracak uygun bir Apache sanal sunucusu kurmanız iyi bir fikir olacaktır.
Adım 4 – Web siteniz için sanal bir ana bilgisayar oluşturun
Apache web sunucusunu kullanırken, yapılandırma ayrıntılarını kapsüllemek ve tek bir sunucudan birden fazla etki alanını barındırmak için sanal sunucular (Nginx'teki sunucu bloklarına benzer) oluşturabilirsiniz. Bu kılavuzda, your_domain adında bir etki alanı kuracağız, ancak bunu kendi etki alanı adınızla değiştirmeniz gerekir.
Ubuntu'da Apache, varsayılan olarak /var/www/html dizininden belge sunacak şekilde yapılandırılmış bir sanal sunucuya sahiptir. Bu, tek bir site için sorunsuz çalışsa da, birden fazla site barındırıyorsanız zahmetli hale gelebilir. /var/www/html'yi değiştirmek yerine, /var/www'de your_domain sitesi için bir dizin yapısı oluşturacağız ve istemci tarafından talep edilmedikçe /var/www/html'yi varsayılan sunulacak dizin olarak bırakacağız. Diğer sitelerle eşleştirin.
Aşağıdaki gibi your_domain için bir dizin oluşturun:
sudo mkdir /var/www/your_domainDaha sonra, sisteminizdeki geçerli kullanıcıyı ifade edecek olan $USER ortam değişkeniyle dizinin sahipliğini atayın:
sudo chown -R $USER:$USER /var/www/your_domainArdından, tercih ettiğiniz komut satırı düzenleyicisini kullanarak Apache sites-available dizininde yeni bir yapılandırma dosyası açın. Burada nano'yu kullanacağız:
sudo nano /etc/apache2/sites-available/your_domain.confBu işlem yeni ve boş bir dosya oluşturacaktır. Alan adınızla birlikte aşağıdaki temel yapılandırmayı ekleyin:
<VirtualHost *:80>
ServerName your_domain
ServerAlias www.your_domain
ServerAdmin webmaster@localhost
DocumentRoot /var/www/your_domain
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>İşiniz bittiğinde dosyayı kaydedin ve kapatın. Nano kullanıyorsanız, bunu CTRL+X tuşlarına, ardından Y tuşuna ve ENTER tuşuna basarak yapabilirsiniz.
Bu VirtualHost yapılandırmasıyla, Apache'ye alan adınızı /var/www/your_domain web kök dizinini kullanarak sunmasını söylüyoruz. Apache'yi alan adı olmadan test etmek istiyorsanız, ServerName ve ServerAlias seçeneklerini kaldırabilir veya her bir seçenek satırının başına bir "#" işareti (#) ekleyerek yorum satırı haline getirebilirsiniz.
Şimdi, yeni sanal sunucuyu etkinleştirmek için a2ensite'ı kullanın:
sudo a2ensite your_domainApache ile birlikte gelen varsayılan web sitesini devre dışı bırakmak isteyebilirsiniz. Özel bir alan adı kullanmıyorsanız bu gereklidir, çünkü bu durumda Apache varsayılan sanal sunucu ayarlarınızı geçersiz kılacaktır. Varsayılan Apache web sitesini devre dışı bırakmak için şunu yazın:
sudo a2dissite 000-default
Yapılandırma dosyanızda sözdizimi hataları olmadığından emin olmak için aşağıdaki komutu çalıştırın:
sudo apache2ctl configtestSon olarak, bu değişikliklerin etkili olması için Apache'yi yeniden yükleyin:
sudo systemctl reload apache2Yeni web siteniz artık yayında, ancak web kök dizini /var/www/your_domain hala boş. Sanal sunucunun beklendiği gibi çalıştığını test etmek için bu konumda bir index.html dosyası oluşturun:
nano /var/www/your_domain/index.htmlAşağıdaki içeriği bu dosyaya yerleştirin:
<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>Dosyayı kaydedip kapatın, ardından tarayıcınıza gidin ve sunucunuzun alan adını veya IP adresini açın:
http://server_domain_or_IPWeb sayfanız, az önce düzenlediğiniz dosyanın içeriğini yansıtmalıdır:
Bu dosyayı, yerine geçecek bir index.php dosyası oluşturana kadar uygulamanız için geçici bir açılış sayfası olarak bırakabilirsiniz. Bunu yaptıktan sonra, varsayılan olarak index.php dosyasına göre önceliğe sahip olduğu için, belge kök dizininden index.html dosyasını kaldırmayı veya yeniden adlandırmayı unutmayın.
Apache'de DirectoryIndex hakkında bir not
Apache'deki varsayılan DirectoryIndex ayarlarıyla, index.html adlı dosya her zaman index.php dosyasına göre önceliklidir. Bu, ziyaretçiler için bilgilendirici bir mesaj içeren geçici bir index.html dosyası oluşturarak PHP uygulamalarında bakım sayfaları oluşturmak için kullanışlıdır. Bu sayfa index.php sayfasına göre öncelikli olduğundan, uygulamanın açılış sayfası haline gelir. Bakım tamamlandıktan sonra, index.html yeniden adlandırılır veya belge kökünden kaldırılır ve normal uygulama sayfası geri yüklenir.
Bu davranışı değiştirmek istiyorsanız, /etc/apache2/mods-enabled/dir.conf dosyasını düzenlemeniz ve DirectoryIndex yönergesinde index.php dosyasının indeksleme sırasını değiştirmeniz gerekir:
sudo nano /etc/apache2/mods-enabled/dir.conf<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>Dosyayı kaydedip kapattıktan sonra, değişikliklerin geçerli olması için Apache'yi yeniden başlatmanız gerekir:
sudo systemctl reload apache2Sonraki adımda, PHP'nin sunucunuza doğru şekilde kurulup yapılandırıldığını test etmek için bir PHP betiği oluşturacağız.
Adım 5 – Web sunucunuzda PHP işlemlerini test edin
Artık web sitenizin dosyalarını ve klasörlerini barındıracak özel bir konumunuz olduğuna göre, Apache'nin PHP dosyalarına yönelik istekleri işleyip yönetebildiğini doğrulamak için bir PHP test betiği oluşturun.
Özel web kök klasörünüzde info.php adında yeni bir dosya oluşturun:
nano /var/www/your_domain/info.phpBu, boş bir dosya açacaktır. Geçerli bir PHP kodu olan aşağıdaki metni dosyaya ekleyin:
<?php
phpinfo();İşiniz bittiğinde dosyayı kaydedip kapatın.
Bu betiği test etmek için web tarayıcınıza gidin ve sunucunuzun alan adını veya IP adresini, ardından da betik adını (bu örnekte info.php) girerek erişim sağlayın:
http://server_domain_or_IP/info.phpİşte varsayılan bir PHP web sayfası örneği:
Bu sayfa, sunucunuz hakkında PHP bakış açısından bilgi sağlar. Hata ayıklama ve ayarlarınızın doğru şekilde uygulandığından emin olmak için faydalıdır.
Tarayıcınızda bu sayfayı görüyorsanız, PHP kurulumunuz beklendiği gibi çalışıyor demektir.
O sayfadaki PHP sunucunuzla ilgili bilgileri inceledikten sonra, oluşturduğunuz dosyayı silmeniz en iyisidir çünkü bu dosya PHP ortamınız ve Ubuntu sunucunuz hakkında hassas bilgiler içerir. Bunu yapmak için `rm` komutunu kullanın:
sudo rm /var/www/your_domain/info.phpBilgilere tekrar erişmeniz gerektiğinde bu sayfayı her zaman yeniden oluşturabilirsiniz.
Adım 6 – PHP'den Veritabanı Bağlantısını Test Etme (İsteğe Bağlı)
PHP'nin MySQL'e bağlanıp veritabanı sorgularını çalıştırıp çalıştıramadığını test etmek istiyorsanız, test verileri içeren bir test tablosu oluşturabilir ve içeriğini bir PHP betiğinden sorgulayabilirsiniz. Bunu yapmadan önce, bir test veritabanı ve ona erişmek için doğru şekilde yapılandırılmış yeni bir MySQL kullanıcısı oluşturmanız gerekir.
example_database adında bir veritabanı ve example_user adında bir kullanıcı oluşturun. 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şturun ve ona az önce oluşturduğunuz özel veritabanı üzerinde tam yetki verin.
Aşağıdaki komut, caching_sha2_password yöntemiyle kimlik doğrulaması yapılan example_user adında yeni bir kullanıcı oluşturur. Bu kullanıcı için parola olarak password değerini tanımlıyoruz, ancak bu değeri kendi seçtiğiniz güvenli bir parolayla değiştirmeniz gerekir.
CREATE USER 'example_user'@'%' IDENTIFIED BY 'password';Şimdi bu kullanıcıya example_database veritabanı üzerinde izinler verin:
GRANT ALL ON example_database.* TO 'example_user'@'%';
Bu, example_user kullanıcısına example_database veritabanına ilişkin tüm ayrıcalıkları verirken, kullanıcının sunucunuzdaki diğer veritabanlarını oluşturmasını veya değiştirmesini engeller.
Şimdi MySQL kabuğundan çıkın:
exitYeni kullanıcının uygun izinlere sahip olup olmadığını test etmek için, bu sefer özel kullanıcı kimlik bilgilerini kullanarak MySQL konsoluna tekrar giriş yapın:
mysql -u example_user -pBu komutta -p bayrağına dikkat edin; bu bayrak, example_user kullanıcısını oluştururken kullandığınız şifreyi seçmenizi ister. MySQL konsoluna giriş yaptıktan sonra, example_database veritabanına erişiminizin olup olmadığını doğrulayın:
SHOW DATABASES;Aşağıdaki çıktıyı alacaksınız:
Output
+--------------------+
| Database |
+--------------------+
| example_database |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)Ardından, `todo_list` adında bir test tablosu oluşturun. 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 veri ekleyin. Test tablonuzu doldurmak için aşağıdaki komutu farklı değerler kullanarak birkaç kez tekrarlayın:
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ı aşağıdaki gibidir:
Output
+---------+--------------------------+
| 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 çıkın:
exitŞimdi MySQL'e bağlanacak ve içeriğinizi arayacak PHP betiğini oluşturabilirsiniz. Tercih ettiğiniz editörü kullanarak özel web sitenizin kök dizininde yeni bir PHP dosyası oluşturun:
nano /var/www/your_domain/todo_list.phpAşağıdaki PHP betiği, bir MySQL veritabanına bağlanır, `todo_list` tablosunun içeriğini arar ve sonuçları bir listede görüntüler. Veritabanı bağlantısında bir sorun varsa istisna fırlatır.
Bu içeriği todo_list.php dosyanıza ekleyin, example_user ve şifrenizi değiştirmeyi unutmayın:
<?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ı kaydedip kapatın.
Artık bu sayfaya web tarayıcınızdan, web siteniz için yapılandırılmış alan adını veya genel IP adresini /todo_list.php adresini takip ederek erişebilirsiniz:
http://your_domain_or_IP/todo_list.phpBu web sayfası, test tablonuza eklediğiniz içeriği ziyaretçilerinize göstermelidir:
Bu, PHP ortamınızın MySQL sunucunuzla bağlantı kurmaya ve etkileşimde bulunmaya hazır olduğu anlamına gelir.
Sonuç
Bu kılavuzda, Apache'yi web sunucusu ve MySQL'i veritabanı sistemi olarak kullanarak ziyaretçilerinize PHP web siteleri ve uygulamaları sunmak için esnek bir temel oluşturdunuz.
Bir sonraki adım olarak, web sunucunuza olan bağlantıların HTTPS üzerinden sunulmasıyla güvenli olduğundan emin olmalısınız. Bunu yapmak için, Ubuntu 22.04 / 20.04 / 18.04 üzerinde Let's Encrypt kullanarak sitenizi ücretsiz bir TLS/SSL sertifikasıyla güvence altına alabilirsiniz.













