Apache Web Sunucusunu Kurmak

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:

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:

Apache’nin kurulumu tamamlandıktan sonra servisin çalışıp çalışmadığını kontrol etmek için systemctl komutundan yararlanabilirsiniz:

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:

Varsayılan Apache sayfası

Apache web sunucusunu dilediğiniz zaman durdurabilir veya başlatabilirsiniz:

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.

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.

İ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.

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):

Modülün aktif hale gelmesi için apache2 servisini yeniden başlatın:

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:

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.

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)

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:

Eğer apache’yi yapılandırma dosyaları ile birlikte kaldırmak isterseniz purge seçeneğini de kullanmanız gerekir:

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:

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.

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:

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.

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.

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:

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:

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:

Ö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:

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:

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] 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

Yazar: Özgür Koca

Yazar - Tankado.com

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.