4 Haziran 2014 Çarşamba

Django projesini Apache ve mod_wsgi ile Yayınlamak

Şuana kadar projeyi geliştirmek için Django sunucusunu kullandık. Fakat üretim için bu sunucu kullanılmamalıdır. Bu yüzden Django'yu üretim amaçlı bir sunucu ile bütünleştirmek gerekir. Django mod_wsgi destekli tüm web sunucuları ile çalışmaktadır. Geliştiricileri Apache sunucusunu önermektedirler. Bizde bu yazımızda Apache sunucusunda kullanımını anlatacağız. Daha fazla bilgiye buradan ulaşabilirsiniz.
Linux için
Linux dağıtımlarında apache sunucusu kurulu olarak gelmektedir. Ama biz yinede gösterelim.
$ sudo apt-get install apache2
$ sudo apt-get install libapache2-mod-wsgi
Kurulum işlemleri tamam ise basit bir proje oluşturarak apache serverda nasıl kullanacağımıza bakalım. İlk önce /var/www dizini içerisine girerek bir proje oluşturuyoruz.
$ django-admin.py startproject proje
Projeyi oluşturduktan sonra, bu projeyi apache üzerinde koşturabilmek için konfigürasyon ayarlarını yapmamız gerekiyor. Bunun için ilk önce /etc/apache2/sites-available dizini içerisinde bir .conf dosyası oluşturuyoruz. Bizim bu proje için oluşturacağımız proje.conf dosyasının içeriği şu şekilde olacaktır.
<VirtualHost *:80>
ServerAdmin mazlum.agar@gmail.com
ServerName proje.com
ServerAlias www.proje.com
DocumentRoot /var/www/proje


Alias /static/ /var/www/proje/static/
WSGIScriptAlias / "/var/www/proje/proje/wsgi.py"


<Directory /var/www/proje>
Order allow,deny
Allow from all
</Directory>


</VirtualHost>
Bu proje.conf dosyasının /etc/apache2/apache2.conf dosyası içerisine yüklenmesi gerekiyor. apache'de tüm konfigürsayon ayarlamaları bu dosya içerisinde yapılır ve eğer başka dosyalar varsa bu dosya içerisine yüklenir. Bizim yapacağımı gibi.
/etc/apache2/apache2.conf dosyası içerisine aşağıdaki satırlardan birini ekliyoruz.
#Bu satırı eklerseniz sites-available dosyası içerisindeki tüm .conf dosyaları yüklenecektir.
IncludeOptional sites-available/*.conf

#Bu satırı eklerseniz sadece oluşturmuş olduğumuz proje.conf dosyası yüklenecektir.
IncludeOptional sites-available/proje.conf
proje.conf dosyası içeriğini açıklayalım.
  • 1.satır: Bu satırda yöneticinin mail adresini belirtiyoruz.
  • 2.satır: Sitenin adını belirtiyoruz.
  • 3.satır: Sitenin takma adını belirtiyoruz.
  • 8.satır: Statik dosyaların url'ini ve yolunu belirtiyoruz.
  • 9.satır: Projemizi oluştururken oluşan wsgi.py dosyasının yolunu belirtiyoruz.
  • 12.satır: Bu satırlarda projemizin ve içerisindeki dizinleri okunabilmesi için izinleri veriyoruz.
Konigürasyon dosyamız bu kadar. Yukarıda dikkat ederseniz sitemizin adınıproje.com olarak belirttik. Peki bilgisayarımız bunu nasıl bilecek bunun için /etc/hosts dosyasına ekleme yapıyoruz.
127.0.0.1       localhost
127.0.1.1       mazlum
172.16.78.1     proje.com
....
İlk yazdığımız bilgisayarımızın ip adresi. Komut satırından ifconfig yazarak ip adresinizi öğrenebilirsiniz. Apache sunucusunun yeniden başlatılması gerekiyor. Şu komutu vererek yeniden başlatabilirsiniz.
$ sudo /etc/init.d/apache2 restart
Şimdi tarayıcıdan proje.com yazarak projeyi açabilirsiniz. Bunu yaptığınız zaman 500 Internal Server Error hatası alacaksınız. Bu hatanın önüne geçebilmek için; Projemiz içerisinde bulunan wsgi.py dosyasına projemizin yollarını ekliyoruz. Dosyanın son hali şu şekilde olacaktır.
/var/www/proje/proje/wsgi.py

import os,sys
sys.path.append('/var/www')
sys.path.append('/var/www/proje')

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "proje.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Tarayıcıdan proje.com yazarak giriş yaptığınızda şu şekilde bir çıktı alacaksınız.
Yapmamız gereken son bir işlem kaldı. Eğer tarayıcıdan proje.com/admin yazarsanız statik dosyaların(css,resim vb) dosyalarının yüklenmediğini göreceksiniz. Çünkü biz yukarıda şu satır ile statik dosyaların proje içerisinde static dizini içerisinde olacağını söyledik.
Alias /static/ /var/www/proje/static/
Bu dosya içerisinde dosyalar bulunamadığı için yüklenemiyor. Biz de Django'nun statik dosyalarını projemizin ana dizininde static dizini içerisine kopyalayacağız. Bunun için ilk önce settings.py dosyası içerisine ekleyeceğimiz şu satır ile dosyaların nereye kopyalanacağını belirtiyoruz.
STATIC_ROOT = '/var/www/proje/static'
Proje dosyamız içerisine girdikten sonra şu komutu vererek kopyalama işlemini yapıyoruz.
python manage.py collectstatic
Artık projemiz Apache üzerinde çalışır durumda. Şimdi bu işlemleri kendi hastahane projesi için yapabiliriz. Yaptığımız işlemler aynen geçerli sadece .conf dosyamızda biraz değişiklik olacak. Bunun için /etc/apache2/site-available içerisinde hastahane.conf oluşturuyoruz ve içeriği şu şekilde oluyor.
<VirtualHost *:80>
ServerAdmin mazlum.agar@gmail.com
ServerName hastahane.com
ServerAlias www.hastahane.com
DocumentRoot /home/mazlum/Django/hastahane


Alias /dosyalar/ /home/mazlum/Django/hastahane/static/
WSGIScriptAlias / "/home/mazlum/Django/hastahane/hastahane/wsgi.py"


<Directory /home/mazlum/Django/hastahane/static>
Order allow,deny
Allow from all
AllowOverride None
Require all granted
</Directory>

Burada sadece izin verme işlemi yaparken Require all granted satırını ekledik. Eğer bu satırı eklemez iseniz Forbidden 403 hatası ile karşılaşırsınız.
Projeyi bu şekilde taşıdığınızda bazı hatalar ile karşılaşıyor olabilirsiniz. Bu hataları tahmin ederek düzeltebilirsiniz. Düşünemediğimiz bazı şeylerden dolayı hatalar çıkabilir. Bu yüzden bizce en doğrusu projeyi doğrudan apache üzerinde geliştirmek. Bu şekilde taşırken hatalar ile karşılaşmamış olursunuz.
Windows için
Windows için apache'nin kurulması gerekiyor. Bunun için buradan Win32 için olan sürümünü indirin. İndirdikten sonra çift tıklayarak çıkan wizard'ı her zaman ki gibi kullanarak Apache'yi kuruyoruz. Apache kurulduktan sonra mod_wsgi'nin kurulması gerekiyor. Sisteminize uygun olanınını buradan indirebilirsiniz. Örneğin mod_wsgi‑3.4.ap22.win32‑py2.7.zip Bu indirilen dosyanın Apache'nin modül dizinine kayıt edilmelidir. Bunun için dosyayı şuraya kaydedin; c:\Program Files\Apache Software Foundation\Apache2.2\modules.
Son olarak mod_wsgi'nin Apache'nin yapılandırma dosyasına eklenmesi gerekiyor. Bunu Başlat/Tüm Programlar/Apache HTTP Server 2.2/Configure Apache Server/Edit the Apache http.conf Configuration File yolunu takip ederek yapabilirsiniz. Dosyanın en sonuna şu satırı eklemelisiniz.
LoadModule wsgi_module modules/mod_wsgi.so
Bu satır eklendikten sonra projemiz için de aynı dosyanın sonuna şu satırları eklemelisiniz.
Alias /static "D:/Django/hastahane/static"
WSGIScriptAlias / "D:/Django/hastahane/hastahane/wsgi.py"

<Directory D:/Django/hastahane>
Order allow,deny
Allow from all
</Directory>
 
<Directory D:/Django/hastahane/hastahane/static>
Order allow,deny
Allow from all
</Directory>
Bu işlemleri kaydettikten sonra apache'nin yeniden başlatılması gerekir. Bunun için yine Başlat/Tüm Programlar/Apache HTTP Server 2.2/ girdiğiniz zaman sağ taraftan Restart diyerek yeniden başlatabilirsiniz. Apache'yi de yeniden başlattığınıza göre tarayıcıdan http://localhost/yonetim diyerek projeye ulaşabilirsiniz. Eğer bir hata ile karşılaşırsanız Apache'nin log dosyalarından hataya bakarak araştırabilirsiniz.
Not: Bu kurulumları ve kullanımları yaparken dosya izinlerine değinilmemiştir. Burada dosya dizinleri önemlidir. Yaptığımız kurulumlarda Django kullanıcısı kullanılmıştır. Örneğin resim eklediğimiz hastahane/static/resimler/profil_resimleri dosyasında yazma izninin olması gerekir. Aksi halde dosyalar yüklenmeye çalışılırken hata ile karşılaşılacaktır. Güvenlik için de bu dosyaların izinleri çok önemlidir. Bu konulara bu yazının konusu dahilinde olmadığı için değinmiyoruz.
Kaynakça

3 yorum :