# Ubuntu 12.04’te mod_wsgi ile Uygulama Sunucusu Kurulumu
Ubuntu sunucularınızda Python web uygulamalarınızı hızlı ve güvenilir bir şekilde çalıştırmanın yollarını mı arıyorsunuz? Apache web sunucusu ile entegre çalışan mod_wsgi, bu konuda en etkili çözümlerden biridir. Bu makalede, Ubuntu 12.04 üzerinde mod_wsgi kullanarak Python uygulamalarınızı nasıl sunacağınızı adım adım öğreneceksiniz. Performans optimizasyonundan olası sorunlara kadar geniş bir yelpazede bilgi edineceksiniz. Hazırsanız, başlayalım!
Öğrenme Yol Haritası:
* Yeni Başlayan: mod_wsgi’nin ne olduğunu anlama, basit bir “Merhaba Dünya” uygulaması kurulumu.
* Orta: Gerçek bir Python web uygulamasının mod_wsgi ile entegre edilmesi, performans optimizasyonu ipuçları.
* İleri Düzey: Performans analizi, olası hataların giderilmesi ve edge case’lerin ele alınması.
1. mod_wsgi Nedir ve Neden Kullanmalıyım?
mod_wsgi, Apache HTTP sunucusunun bir modülüdür ve Python uygulamalarınızı Apache ile sorunsuz bir şekilde entegre etmenizi sağlar. Python’da yazılmış web uygulamalarınızı (Flask, Django gibi framework’ler kullanarak yazılmış olsun veya olmasın) Apache’nin gücüyle çalıştırmanıza olanak tanır. Bu sayede, performans, güvenlik ve ölçeklenebilirlik avantajlarından faydalanabilirsiniz. Direkt CGI (Common Gateway Interface) kullanmak yerine mod_wsgi, daha performanslı ve güvenli bir alternatif sunar. Çünkü uygulamalarınızı Apache’nin iş süreçleri içerisinde çalıştırır, her istek için yeni bir işlem başlatmak zorunda kalmaz. Bu da kaynak kullanımını optimize eder ve genel performansı artırır. Özellikle yüksek trafikli web sitelerinde bu avantaj daha da belirgin hale gelir. Eğer yüksek performanslı ve güvenilir bir Python web sunucusu kurmak istiyorsanız, mod_wsgi öğrenmek oldukça önemlidir.
2. Ubuntu 12.04’te Gerekli Yazılımların Kurulumu
Öncelikle, Ubuntu 12.04 sunucunuzda Apache web sunucusunu ve Python’ı kurmanız gerekiyor. Bu işlemi aşağıdaki komutlar ile gerçekleştirebilirsiniz:
sudo apt-get update
sudo apt-get install apache2 python python-dev libapache2-mod-wsgi
Bu komutlar, Apache web sunucusunu, Python yorumlayıcısını, Python geliştirme paketlerini ve en önemlisi mod_wsgi modülünü kuracaktır. Kurulum tamamlandıktan sonra, Apache sunucusunu yeniden başlatmanız gerekecektir:
sudo service apache2 restart
3. Basit Bir “Merhaba Dünya” Uygulaması Oluşturma (Yeni Başlayanlar İçin)
En basit Python web uygulamasını oluşturarak başlayalım. Aşağıdaki kodu hello.py adıyla kaydedin:
import sys
def application(environ, start_response):
status = '200 OK'
output = b'Merhaba Dünya!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
Bu kod, gelen her HTTP isteğine “Merhaba Dünya!” cevabını verecektir. Bu basit örnek, mod_wsgi’nin temel çalışma prensibini anlamanıza yardımcı olacaktır.
4. Apache Konfigürasyonunun Yapılandırılması
Şimdi, Apache’ye hello.py dosyamızı nasıl sunacağını anlatmamız gerekiyor. Bunun için Apache’nin sites-available dizinindeki varsayılan konfigürasyon dosyasını düzenleyeceğiz veya yeni bir virtual host oluşturacağız. Örnek olarak, 000-default.conf dosyasını düzenleyelim:
sudo nano /etc/apache2/sites-available/000-default.conf
Dosyanın içine aşağıdaki satırları ekleyin (dosyanın içeriğine göre uygun yere eklemeyi unutmayın):
<VirtualHost *:80>
ServerName localhost
WSGIScriptAlias / /var/www/hello.py
<Directory /var/www/>
<Files hello.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess hello user=www-data group=www-data threads=5
WSGIProcessGroup hello
</VirtualHost>
/var/www/ dizininde hello.py dosyasının bulunduğunu varsayıyoruz. Eğer farklı bir dizinde ise yolu buna göre güncellemelisiniz. threads=5 parametresi, aynı anda 5 istek işleyebilecek 5 iş parçacığı oluşturacaktır. Bu değeri sistem kaynaklarınıza göre ayarlayabilirsiniz. user=www-data ve group=www-data Apache’nin çalıştığı kullanıcı ve grubu belirtir. Bu ayarları değiştirmemeniz önerilir.
Değişiklikleri kaydettikten sonra Apache’yi yeniden başlatın:
sudo service apache2 restart
Şimdi tarayıcınızda http://localhost/ adresine girerek “Merhaba Dünya!” mesajını görmelisiniz.
5. Gerçek Dünya Senaryosu: Django Uygulamasının Dağıtımı (Orta Seviye)
Şimdi daha gerçekçi bir senaryo ele alalım. Varsayalım ki bir Django uygulamanız var ve bunu mod_wsgi ile sunmak istiyorsunuz. Öncelikle Django projenizi oluşturup, gerekli ayarları yapmanız gerekiyor. Sonrasında, Django’nun wsgi.py dosyasını Apache’ye yönlendirmeniz gerekiyor. Örneğin, Django projenizin adı myproject ise, myproject/myproject/wsgi.py dosyasını kullanacaksınız. Apache konfigürasyon dosyasında şu değişikliği yapmalısınız:
WSGIScriptAlias / /var/www/myproject/myproject/wsgi.py
Ayrıca, Django projenizin statik dosyalarını da sunmanız gerekebilir. Bunun için Apache’ye statik dosyaların yerini belirtmeniz gerekir. Bu, Alias direktifi ile yapılabilir.
6. Performans Optimizasyonu ve İpuçları
mod_wsgi performansını optimize etmek için birkaç önemli ipucu:
* İş Parçacığı Sayısı (threads): WSGIDaemonProcess direktifiyle belirlediğiniz iş parçacığı sayısını sisteminizin kaynaklarına göre ayarlayın. Çok fazla iş parçacığı, kaynak tüketimine neden olabilir.
* İşlem Sayısı (processes): WSGIDaemonProcess direktifi ile belirlediğiniz işlem sayısını sisteminizin kaynaklarına göre ayarlayın. Çok fazla işlem, kaynak tüketimine neden olabilir.
* Bellek Yönetimi: Python uygulamanızın bellek yönetimini optimize edin. Bellek sızıntılarını önlemek için dikkatli kod yazın.
* Caching: Uygulamanızda caching mekanizmaları kullanarak veritabanı sorgularının ve diğer pahalı işlemlerin tekrarını azaltın. Redis veya Memcached gibi önbellek sistemlerini kullanabilirsiniz. Fatih Soysal’ın blogunda [https://fatihsoysal.com](https://fatihsoysal.com) bu konuda daha detaylı bilgi bulabilirsiniz. (Buraya ilgili bir makale linki ekleyebilirsiniz.)
* Apache’nin Performans Ayarları: Apache sunucusunun performans ayarlarını inceleyin ve gerektiğinde optimize edin. Apache’nin bellek limitlerini ve diğer parametrelerini ayarlayabilirsiniz.
7. Hata Ayıklama ve Olası Sorunlar (İleri Düzey)
mod_wsgi kullanırken karşılaşabileceğiniz bazı sorunlar ve çözüm önerileri:
* 500 Internal Server Error: Bu hata, genellikle Python kodunuzda bir hata olduğunda oluşur. Apache error log dosyasını inceleyerek hatanın kaynağını belirleyebilirsiniz.
* ImportError: Gerekli Python kütüphanelerinin yüklü olmaması durumunda oluşur. Eksik kütüphaneleri pip ile yükleyin.
* Permission Denied: Apache’nin dosyalara erişim yetkisi olmaması durumunda oluşur. Dosya ve dizin izinlerini kontrol edin.
8. Performans Analizi ve Ölçeklendirme (İleri Düzey)
Uygulamanızın performansını analiz etmek için çeşitli araçlar kullanabilirsiniz. Apache’nin kendi log dosyaları, uygulamanızın performansını izlemek için önemli bilgiler sağlar. Ayrıca, ab (Apache benchmark) gibi araçları kullanarak uygulamanızın performansını test edebilirsiniz. Yüksek trafik durumlarında, yük dengeleme (load balancing) teknikleri kullanarak uygulamanızı ölçeklendirebilirsiniz.
Sonuç
Bu makalede, Ubuntu 12.04 üzerinde mod_wsgi kullanarak Python web uygulamalarınızı nasıl sunacağınızı öğrendiniz. Basit bir “Merhaba Dünya” uygulamasından gerçek bir Django uygulamasına kadar çeşitli senaryoları ele aldık. Performans optimizasyonu ve hata ayıklama konularına da değindik. Unutmayın ki, sisteminizin kaynaklarını ve uygulamanızın özelliklerini dikkate alarak ayarları yapmanız önemlidir. Daha fazla bilgi için Fatih Soysal’ın blogunu ziyaret etmeyi unutmayın: [https://fatihsoysal.com](https://fatihsoysal.com).
Sıkça Sorulan Sorular:
1. mod_wsgi’nin Apache’den farklı versiyonları var mı? Evet, Apache’nin farklı versiyonlarıyla uyumlu farklı mod_wsgi versiyonları mevcuttur. Kurulum yaparken doğru versiyonu seçmeniz önemlidir.
2. mod_wsgi’yi başka bir Linux dağıtımında kullanabilir miyim? Evet, mod_wsgi birçok Linux dağıtımında kullanılabilir. Ancak, kurulum adımları dağıtıma göre biraz farklılık gösterebilir.
3. mod_wsgi’nin performans avantajı nedir? mod_wsgi, uygulamalarınızı Apache’nin iş süreçleri içinde çalıştırarak, her istek için yeni bir işlem başlatma ihtiyacını ortadan kaldırır. Bu, kaynak kullanımını optimize eder ve performansı artırır.
4. Hata ayıklama için hangi araçları kullanabilirim? Apache error log dosyaları, Python hata mesajları ve debugger’lar hata ayıklama için kullanılabilir.
5. mod_wsgi’nin güvenlik avantajları nelerdir? mod_wsgi, CGI’ye göre daha güvenli bir yöntemdir çünkü uygulamalarınızı Apache’nin korumalı ortamında çalıştırır.
Yazar: Fatih Soysal