Apache Web Sunucu Yazılımının Logosu
Apache en popüler web sunucu yazılımdır[1]. Apache, Linux ve Windows gibi popüler işletim sistemlerinde başarıyla çalışabilen çok geniş bir desteğe sahip, hızlı ve güvenli bir web sunucusu yazılımı olarak bilinir. Apache’yi kullanarak web sitenizi veya dosyalarınızı yerel ağınızda ve internet ortamında yayına verebilir, ziyaretçilerinizi Raspberry Pi ile ağırlayabilirsiniz.
Bu bölümde Raspberry Pi’a Apache web sunucusunun kurulup, yapılandırmasının gerçekleştirilmesi ve basit bir web sayfasının yayına verilmesi adımları yer almaktadır. Apache’yi Raspberry Pi OS depolarından kurmadan önce sistemi güncellemek iyi olacaktır:
1 2 3 |
pi@raspberry ~ $ sudo apt update pi@raspberry ~ $ sudo apt full-upgrade pi@raspberry ~ $ sudo apt clean |
Raspberry Pi OS işletim sistemini ve depo adreslerini güncelledikten sonra Apache kurulumuna geçebiliriz. Apache web sunucusu apache2 adındaki paket ile kolayca kurulup hazır hale gelmektedir. Kurulum için aşağıdaki komutu verin:
1 2 3 4 |
pi@raspberry ~ $ sudo apt update pi@raspberry ~ $ sudo apt install apache2 -y pi@raspberry ~ $ sudo apt clean |
Apache’nin kurulumu tamamlandıktan sonra servisin çalışıp çalışmadığını kontrol etmek için systemctl komutundan yararlanabilirsiniz:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
pi@raspberry ~ $ sudo systemctl status apache2 ● apache2.service - LSB: Apache2 web server Loaded: loaded (/etc/init.d/apache2) Active: active (running) since Çrş 2016-03-02 18:55:01 UTC; 2min 40s ago CGroup: /system.slice/apache2.service ├─3050 /usr/sbin/apache2 -k start ├─3053 /usr/sbin/apache2 -k start └─3054 /usr/sbin/apache2 -k start Mar 02 18:55:00 pi5 apache2[3028]: Starting web server: apache2AH00558: apa...ge Mar 02 18:55:01 pi5 apache2[3028]: . Mar 02 18:55:01 pi5 systemd[1]: Started LSB: Apache2 web server. Hint: Some lines were ellipsized, use -l to show in full. pi@raspberry ~ $ apache2 -v Server version: Apache/2.4.10 (Raspbian) Server built: Jan 23 2016 22:26:49 |
Apache’nin running durumunda olduğunu gördükten sonra bir web tarayıcısına Raspberry Pi’ın IP adresini başına http:// koyarak yazıp web sayfasını görüntüleyin. Raspberry Pi’ın mevcut IP adresini görüntülemek için hostname komutundan faydalanabilirsiniz:
1 2 3 |
pi@raspberry ~ $ hostname -I 192.168.0.110 |
Varsayılan Apache sayfası
Apache web sunucusunu dilediğiniz zaman durdurabilir veya başlatabilirsiniz:
1 2 |
pi@raspberry ~ $ sudo systemctl stop apache2 pi@raspberry ~ $ sudo systemctl start apache2 |
Apache’nin varsayılan sayfasını değiştirmek
Apache’nin varsayılan web sayfası /var/www/html yayın dizini altındaki index.html dosyasıdır. Bu dosyayı değiştirerek veya yenisini hazırlayarak ilk sayfanızı yayına verebilirsiniz. Bir önceki konuda yer alan varsayılan web sayfası bu dosyadan yüklenmektedir.
1 2 3 4 5 6 7 8 |
pi@raspberry ~ $ cd /var/www/html pi@raspberry ~ $ ls –latoplam 20 drwxr-xr-x 2 root root 4096 Mar 2 18:54 . drwxr-xr-x 3 root root 4096 Mar 2 18:54 .. -rw-r--r-- 1 root root 11104 Mar 2 18:54 index.html |
Dosyayı silip yeni web sayfamızı yayına vermek için nano editöründen faydalanacağız. Nano editörü ile oluşturacağımız metin index.html isimli metin dosyasının içerisine aşağıdaki kodlarını yazarak basit bir HTML sayfası tasarlayabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
pi@raspberry ~ $ cd /var/www/html pi@raspberry ~ $ sudo rm index.html pi@raspberry ~ $ sudo nano index.html <html> <head> <title>Raspi</title> </head> <body> <center> <h2>Raspberry Pi Web Sunucuma </h2> <h1>Hosgeldiniz ! :)</h1> </center> </body> </html> |
İlk sayfamız yayında
Apache’nin yayın dizinini ayarlamak
Apache’nin varsayılan yayın dizini /var/www ‘dir. Sunucuya IP adresi ile erişildiğinde buradaki dosyalar sunulur. Apache aynı IP adresi üzerinden birden fazla web sitesine de konaklık yapabilir. Diğer bir ifade ile Raspberry Pi üzerinde tanımlı her kullanıcı kendi yayın dizinine sahip olabilir. Raspberry Pi’da ilk kurulumda sadece pi kullanıcısı tanımlı gelir. Dilerseniz yeni kullanıcılar ekleyip her birinin kendi web sitesine sahip olmasını ve web sitesi yayınlamasını sağlayabilirsiniz. Bu, hem güvenlik hem de kullanım kolaylığı açısından doğru bir yaklaşım olacaktır. Bu özellikle okul ve şirket gibi ortamlarda öğrenci veya çalışanlara kendi web hesaplarını kullandırmak için kullanışlı bir özelliktir.
Öncelikle pi kullanıcısının ev dizini içinde bir yayın dizini oluşturalım. İstediğiniz bir ad verebilirsiniz. Yayın dizini olarak en çok kullanılan standartlaşmış örnek dizin adları şunlardır: public_html, www, htdocs. Bunlardan birisini seçebilirsiniz. Ben public_html’i tercih ediyorum.
1 |
pi@raspberry ~ $ mkdir /home/pi/public_html |
Yayın dizininin yolunu değiştirmek için öncelikle userdir adlı Apache modülünü etkinleştirin. Bu modül her kullanıcının kendi yayın dizinine sahip olması sağlayan ilgili Apache modülünün, servisin başlangıcında yüklenmesini sağlar. Böylece her kullanıcı aynı IP adresi üzerinden kendi web yayın dizinlerine güvenli şekilde erişebilir. Modülü aktifleştirmek için a2enmod (apache2 enable module) aracından faydalanacağız (a2dismod aracı ile de tam tersi işlemi yapabilirsiniz):
1 2 3 4 5 6 7 |
pi@raspberry ~ $ sudo a2enmod userdir Enabling module userdir. To activate the new configuration, you need to run: service apache2 restart |
Modülün aktif hale gelmesi için apache2 servisini yeniden başlatın:
1 |
pi@raspberry ~ $ sudo service apache2 restart |
Son olarak /home/pi/public_html olan yayın dizinimizin altına nano ile aşağıdaki gibi bir karşılama sayfası hazırlayalım ve kaydedelim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
pi@raspberry ~ $ nano /home/pi/public_html/index.html <html> </head> <title>Pi Kullanicisi</title> </head> <body> <center> <h2>Pi Kullanicisinin sitesine hosgeldiniz ! </h2> <br> <br> : ) </center> </body> </html> |
Dilerseniz şimdi yayına verdiğimiz siteyi test edelim. Hatırlarsanız daha önce web sunucumuzun ana yayın dizinini ziyaret etmek için web tarayıcısının adres çubuğuna Raspberry Pi’ın IP adresini başına http:// takısını ekleyerek yazmıştık. Artık çok kullanıcılı bir web sunucusuna sahibiz ve adres çubuğunda ilgili kullanıcının da adını belirtmemiz gerekir. Linux tabanlı web sunucularda standart olmuş bir özellik de kullanıcı dizinini belirtmek için kullanılan ~ (tilda) karakteridir. Adresimizin sonuna bu işaret ile birlikte sitesini ziyaret etmek istediğimiz kullanıcıyı yazalım (örn.:http://192.168.0.110/~pi/).
Pi kullanıcısının yayın dizini
Diğer taraftan apache’nin ana yayın dizinini (kullanıcıların yayın dizinini değil) değiştirmek için nano ile ilgili ayar dosyasını (000-default.conf) açıp içerisinde yer alan DocumentRoot değerini istediğiniz bir dizine ayarlayabilirsiniz. Tabi ayarların geçerli olması için apache’nin yeniden başlatılması gerekir.
1 2 |
pi@raspberry ~ $ sudo nano /etc/apache2/sites-available/000-default.conf pi@raspberry ~ $ sudo service apache2 restart |
Apache’nin .conf uzantılı yapılandırma dosyalarında yapılan hatalı değişiklikler servisin düzgün çalışmamasına veya hiç başlayamamasına neden olabilir. Apache yapılandırma ayarlarının kurallarına uygun yapılıp yapılmadığını kontrol etmek için apachectl aracından faydalanabilirsiniz (Samba’nın testparm aracına benzer)
1 2 3 4 |
pi@raspberry ~ $ sudo apachectl configtest apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName Syntax OK |
Yukarıdaki apachectl çıktısında, 000-default.conf dosyasında ServerName ile belirtilen makine adının geçerli bir alan adına karşılık gelmeyebileceği ile ilgili bir uyarı alıyoruz. Bir alan adı üzerinden (siteadiniz.com) internete yayın yapmayacaksanız bu uyarıya kulak asmayın. Çıktının sonundaki Syntax Ok satırı Apache yapılandırmalarının herhangi bir yazım yanlışı içermediğini söyler.
Apache Web Sunucusunu Sistemden Kaldırmak
Apache’yi sistemden kaldırmak için apt aracını aşağıdaki kullanabilirsiniz. Bunu yapmadan önce servisi durdurmak gerekir:
1 2 3 |
pi@raspberry ~ $ sudo service apache2 stop pi@raspberry ~ $ sudo apt remove apache2 pi@raspberry ~ $ sudo apt autoremove |
Eğer apache’yi yapılandırma dosyaları ile birlikte kaldırmak isterseniz purge seçeneğini de kullanmanız gerekir:
1 2 3 |
pi@raspberry ~ $ sudo service apache2 stop pi@raspberry ~ $ sudo apt purge apache2 pi@raspberry ~ $ sudo apt autoremove |
Kaldırma işlemi sonrasında mevcut site dosyaları korunacaktır.
Apache’ye PHP Eklentisinin Kurulması
Şekil 12.1- PHP ‘nin logosu
PHP (açılımı PHP: Hypertext Preprocessor) geniş bir kitle tarafından kullanılan, özellikle web tabanlı siteler/uygulamalar geliştirmek için tasarlanmış HTML içine gömülebilen bir betik programlama dilidir[2].
PHP temel olarak sunucu-taraflı programlamaya odaklanmıştır; bu nedenle CGI uygulamalarının yaptığı her şeyi, örneğin formdan veri toplama, devingen sayfa içeriği oluşturma ya da çerez alıp gönderme ve veritabanı işlemleri gibi işlemleri yapabilir. PHP bir betik deli olarak kabuk ortamında da (php-cli) kullanılabilir. Başarımı, komut çeşitliliği ve kütüphane/eklenti desteği komut satırı ortamında da popüler olmasını sağlamıştır. Ancak PHP bunlardan çok daha fazlasını yapabilecek yetenektedir[3]. PHP eski ve köklü bir dil olmasının yanında düşük kaynak kullanımı ve esnek yapısı ile kayda değer bir kullanıcı kitlesine sahiptir. PHP+GTK eklentisi sayesinde masaüstü ortamı için GUI uygulamalar yazmak içinde kullanılabilir. PHP betikleri ELF ve EXE biçimine dönüştürülerek Linux ve Windows’da native olarak da çalıştırılabilir. LDAP, IMAP, SNMP, NNTP, POP3, HTTP ve COM (Windows için) gibi ağ tabanlı servis ve uygulamalar ile entegre çalışabilir.
Apache’nin PHP dosyalarını çalıştırabilmek için bir PHP yorumlayıcısına ihtiyaç duyar. Apache’ye PHP yorumlayıcısını bir modül olarak eklemek oldukça basittir. Bunu tek bir komut ile kolayca gerçekleştirebilir, modülü yükledikten sonra doğrudan kullanmaya başlayabilirsiniz.
Web ziyaretçisi, sunucudan bir PHP dosyası talep ettiğinde; Apache web sunucusu, dosyayı önce PHP modülüne gönderir modülden geçen çıktıyı da alarak ziyaretçinin tarayıcısına yönlendirir. PHP tabanlı web uygulamaları geliştirirken bu çalışma şeklini kavramak oldukça önemlidir. Aşağıdaki şekilde bu çalışma şekli gösterilmiştir.
PHP’nin çalışma yapısı
Yukarıdaki şekilden de görülebileceği gibi PHP kodlarına bir istek geldiğinde eğer sunucuda PHP modülü yüklüyse kodlar modül tarafından çalıştırılır ve çıktısı ziyaretçiye geri döndürülür. Yani ziyaretçiye hiçbir şekilde PHP kodlarının kendisi gösterilmez. Ancak PHP modülü yüklü değilse veya sunucuda yanlış bir yapılandırma yapılmışsa PHP ile yazılmış kodlar kullanıcının tarayıcısına metin biçiminde ulaştırılır. Böylece ziyareçi görmemesi gereken PHP kodlarını görmüş olur.
PHP’yi Rasppberry Pi ‘a bir Apache modülü olarak kurmak için aşağıdaki komutları kullanabilirsiniz. Tabi öncelikle Apache’nin durdurulması gerekir:
1 2 3 4 5 6 7 |
pi@raspberry ~ $ sudo apt update pi@raspberry ~ $ sudo apt full-upgrade pi@raspberry ~ $ sudo systemctl stop apache2 pi@raspberry ~ $ sudo apt install php libapache2-mod-php -y pi@raspberry ~ $ sudo systemctl start apache2 |
PHP’nin hata yakalama ve kaydetme seçeneklerini ayarlamak
PHP, kodlarınızda oluşan muhtemel hata ve uyarıları yakalamak için birçok ayar seçeneğine sahiptir. PHP’nin ana yapılandırma dosyası olan php.ini ile ayarlanabilecek bu değerler web sitesini oluşturan kodları hatalardan arındırıp güvenli hale getirmek için çok faydalıdır. Eğer PHP hata mesajları ziyaretçiye görüntüleyecek şekilde ayarlanmışsa dış dünyadaki kullanıcılar sitenizin dizin yapısı ve ne tür bir kod kullandığınıza dair bilgiler edinebilir. Diğer taraftan php kodlarınızı geliştirmeye devam ederken php’nin uyarı ve bilgilendirme mesajlarını da görmek isteyebilirsiniz. Uyarı (warning) ve bildirim (notice) mesajlarını görmek kodunuzu daha çevik hale getirmenize yardımcı olur.
PHP, web sunucusu (apache, nginx, lighthttpd vb.) ve terminal ortamı için (cli) ayrı yapılandırma dosyalarını kullanır. Buradan PHP betiklerinin terminal ortamında da kullanılabileceği, hatta en az diğer kabuk betikleri (bash, Python, perl vb.) kadar kullanışlı işler gerçekleştirmek için yararlanılabileceğini belirtmek isterim.
Hâlihazırdaki PHP kurulumuna ait yapılandırma dosyalarının patikalarını öğrenmek için çeşitli yöntemler vardır. Doğrudan kabuk ortamından çağrılan PHP betikleri (CLI) ve PHP Apache modülü tarafından çağrılan PHP betikleri farklı php.ini dosyalarını kullanır.
CLI ortamı için php.ini yolunu öğrenmek: Aşağıdaki ekran çıktısında da görüleceği gibi terminal ortamından çalıştırdığımız PHP yorumlayıcısı, yapılandırma dosyası olarak /etc/php/7.0/cli/php.ini dosyasını kullanmaktadır. Bu dosya web sunucu üzerinden çağırdığımız/çalıştırdığımız php sayfaları için geçerli değildir, buradaki ayarlar sadece komut satırından çalıştırdığımız PHP programları için geçerlidir.
1 2 3 4 5 6 7 |
pi@raspberry: ~$ php --ini Configuration File (php.ini) Path: /etc/php/7.0/cli Loaded Configuration File: /etc/php/7.0/cli/php.ini […] |
Web sunucu ortamı için php.ini yolunu öğrenmek: Web sunucumuzun php betiklerini çalıştırırken kullandığı yapılandırma dosyasının konumunu öğrenmek için web yayın dizini içinde aşağıdaki gibi PHP betiği oluşturabilirsiniz:
1 2 3 4 5 6 7 |
pi@raspberry:~ $ sudo nano /var/www/html/pinfo.php <?php echo php_ini_loaded_file(); ?> |
pinfo.php dosyasını web tarayıcınız ile ziyaret ettiğinizde mevcut web sunucu yazılımının kullandığı PHP yapılandırma dosyasının konumu ekranda görüntülenecektir. Dilerseniz bu php dosyasını terminal oturumundan da görüntüleyebilirsiniz. Bunun için wget aracını bir HTTP istemci olarak aşağıdaki gibi çalıştırabilirsiniz.
1 2 3 |
pi@raspberry:~ $ wget -q -O- http://localhost/pinfo.php /etc/php/7.0/apache2/php.ini |
PHP modüller sayesinde yetenekleri artırılabilen bir yorumlayıcıdır. Örneğin bir PHP betiği ile zip (sıkışmış arşiv dosyası) dosyaları üzerinde çalışmak isterseniz zlib modülü ihtiyacınızı görür. PHP betiği ile HTTP/HTTPS istekleri yapmak için ise Curl eklentisi yardımınıza yetişir. Hangi PHP modüllerinin etkinleştirileceği ya da devre dışı bırakılacağını ayarlamak için php.ini dosyasından yararlanılır. Komut satırında iken etkin PHP modüllerini görmek için –m seçeneğinden yararlanabilirsiniz.
1 |
pi@raspberry:~ $ php -m |
php.ini dosyasında haya yakalama ve görüntüleme seçeneklerini ile ilgili ayarlanabilecek başlıca anahtarlar aşağıda verilmiştir. Gerçekleştirilen değişikliklerin etkin olabilmesi için web sunucusunun yeniden başlatılması gerektiğini unutmayın. Örn:
1 |
pi@raspberry:~ $ sudo systemctl restart apache2 |
php.ini: display_errors seçeneği
display_errors değeri hata ve uyarı raporlarının çıktıda gösterilip gösterilmeyeceğini ayarlar. On ve off olmak üzere iki değer alabilir. Varsayılan değeri off yani kapalıdır. Etkinleştirmek için ilgili değeri aşağıdaki gibi ayarlayın:
1 |
display_errors = On |
php.ini: error_reporting seçeneği
error_reporting değeri, kodlarda oluşan ne tür hataların ve uyarıların raporlamaya dâhil edileceğini ayarlar. Sadece error_reporting ile tanımlanan hata türleri, ilgili log dosyasında kayıt altına alınır ve/veya ziyaretçiye gösterilir. Başlıca hata raporlama türleri şunlardır:
- E_ALL: Tüm hata ve uyarıları içeren en kapsamlı tanımlayıcıdır.
- E_ERROR: Sadece çalışma zamanında oluşan hataları ifade eder.
- E_WARNING: Büyük hataların dışında kalan uyarı mahiyetindeki hatırlatmalardır. Bu uyarılar genellikle kötü programlama alışkanlıklarından ve dikkat edilmeyen durumlardan kaynaklanır. Uyarıların dikkate alınarak giderilmesi gerekir.
- E_PARSE: Yazım hatalarıdır. Bir PHP komutunu ve deyimini yanlış yazdığınızda ortaya çıkar.
- E_NOTICE: İleride hatalara sebep olma ihtimali olan, kötü tasarlanmış kodlar hakkında uyarır.
- E_STRICT: PHP yazdığınız kodun diğer sistemler ile de uyumlu ve taşınabilir olması için tavsiyeler verir.
- E_DEPRECATED: PHP’inin ileriki versiyonlarında kullanımına son verilecek, desteği kesilecek olan deyim ve kullanımlar hakkında uyarı verir.
error_reporting değerinin kullanımına örnek vermek gerekirse; Eğer, uyarı (E_WARNING) ve bilgilendirmeler (E_NOTICE) dışındaki tüm mesajların raporlamaya dâhil edilmesini istiyorsanız php.ini içerisinde şu tanımlamayı kullanabilirsiniz:
1 |
error_reporting = E_ALL & ~E_WARNING& ~E_NOTICE |
Örnekte, önünde ~ (tilda) karakteri yer alan tanımlar, raporlamaya dâhil edilmeyecek raporlama türlerini ifade eder. Bu ayar ile tüm hata ve uyarılardan E_WARNING ve E_NOTICE haricinde olanlar raporlamaya dâhil edilir.
php.ini: log_errors seçeneği
PHP’de oluşacak hata ve uyarıların bir disk dosyasına (log: kayıt dosyası) kaydedilmesini sağlar. “on” ve “off” olmak üzere iki değere sahip olabilir. Bu ayar hataları kullanıcıya göstermeden daha sonra incelemek üzere kaydetmek için çok kullanışlıdır. Hata kaydetmeyi aktifleştirmek için php.ini içerisinde şu değerin yer almasını sağlayın:
1 |
log_errors = On |
php.ini: error_log seçeneği
PHP hata raporlarının kaydedileceği dosyayı tanımlamanızı sağlar. Raspberry Pi OS gibi Linux tabanlı bir dağıtım kullanıyorsanız varsayılan log dosyalarının konumu /var/log dizinidir. Bunun için php.ini’de aşağıdaki gibi bir tanımlama yapabilirsiniz:
1 |
error_log = /var/log/php_errors.log |
Apache’ye PHP-MySQL Eklentisinin Kurulması
PHP ile beraber MySQL veri tabanı kullanan uygulamalar geliştirmek istediğinizde PHP’nin MySQL eklentisini yüklemeniz gerekir. Modülü aşağıdaki şekilde yükledikten sonra PHP betikleri içerisinde MySQL fonksiyonlarını kullanabilirsiniz.
1 2 3 |
pi@raspberry ~ $ sudo apt update pi@raspberry ~ $ sudo apt install php-mysql -y |
[1] Apache Web Sunucusu – https://tr.wikipedia.org/wiki/Apache_HTTP_Sunucusu
[2] PHP nedir? – http://php.net/manual/tr/intro-whatis.php
[3] PHP neler yapabilir ? – http://php.net/manual/tr/intro-whatcando.php