Django'yu IIS'ye Kurmak: Adım Adım Bir Eğitim

Yayınlanan: 2022-03-11

Pek çok Django Geliştiricisi bunu küfür olarak görse de, özellikle altyapısını Windows ekosistemi etrafında kurmuş bir istemciyle çalışırken, bazen Django uygulamalarını Windows/IIS üzerinde dağıtmak gerçekten gerekli olabilir. “Küfür” kısmı, tümü Windows'a yabancı olan WSGI, FastCGI ve komut satırı araçları gibi özelliklere büyük ölçüde dayanan, Unix ortamını gerçekten hedef alan Django'dan gelir. Neyse ki, Django/IIS uyumluluğu, denklemin hem Windows hem de Python+Django taraflarındaki özelliklerin eklenmesi (aksi takdirde bir çamur olurdu) sayesinde gelişiyor ve böylece bu iki farklı teknik dünya arasındaki uyumluluk sorunlarının çözülmesine yardımcı oluyor.

Bu kısa, odaklı eğitim, Windows'ta bir Django projesinin temel kurulumunda size yol gösterir. Python, Django ve Django projesini hem bağımsız hem de FastCGI sunucusu olarak çalıştırmak da dahil olmak üzere ilgili araçların kurulumunu kapsar. IIS artık resmi olarak FastCGI'yi desteklediğinden (IIS 7+ üzerinde, CGI özelliğini yüklemeniz yeterlidir) bu arada, ikincisi giderek daha önemlidir.

Not: Bu eğitim, Windows hakkında bilgi sahibi olan ve IIS yönetim konsoluna aşina olan kişiler için hazırlanmıştır. Bu öğreticide kullanılan IIS sürümü 8.5'tir, ancak açıklamalar ve teknikler önceki sürümlerde benzerdir. Eğitim, projelerim için kullandığım sürümler olduğundan Python 2.7 ve Django 1.7'ye dayanmaktadır. Başka bir Django öğreticisini burada bulabilirsiniz.

Profesyonel ipucu: Birden fazla Django (hatta düz Python) projesi dağıtacaksanız veya geliştiriciyseniz, yalıtılmış Python ortamları oluşturmak için bir araç olan virtualenv'e bakmalısınız.

Python'u Windows'a Yükleme

İlk önce Python'u indirin. Hem 32-bit hem de 64-bit MSI yükleyicileri sağlanmıştır ve yüklediğiniz makineye uygun olanı seçmelisiniz.

PIP'nin Temelleri

PIP, Python kitaplıklarını kuran ve bakımını yapan araçtır (ki Django bunlardan yalnızca bir tanesidir). Komut isteminde pip komutu çalıştırılarak çağrılır. Birkaç alt komut uygular ve en kullanışlı olanlardan ikisi install ve frost'tur . Projede varsa, PIP ayrıca proje bağımlılıkları (ek kitaplıklar) yükleyecektir.

pip install <package_name> çalıştırıldığında, paketi ve tüm bağımlılıklarını (iç içe ve oldukça karmaşık olabilir) indirip yükleyecektir. pip install --upgrade <package_name> çalıştırıldığında, aynı şekilde mevcut bir paket en son sürümüne yükseltilir. PIP, bir paketin yalnızca "en yenisi" yerine kesin sürümlerini yüklemek için özel bir sözdizimini destekler. Paket adına bir operatör ve sürüm numarası eklenerek yapılır; örneğin "Jinja2==2.7.3" (kesin bir sürüm yüklemek için) veya "altı>=1.8" (belirtilen sürüm numarasına eşit veya daha büyük herhangi bir sürümü yüklemek için).

pip dondurmayı çalıştırmak, şu anda kurulu olan paketlerin listesini, pip kurulumu tarafından doğrudan kullanılabilen bir biçimde gösterir.

Bazı Python / PIP paketlerinin, paketin çalışması için derlenmesi gereken C ile yazılmış kitaplıklarla birlikte geldiğini unutmayın. Sisteminizi Python çalıştırılabilir dosyalarıyla da uyumlu çalışan bir C derleyicisine sahip olacak şekilde ayarlamazsanız, bu tür paketleri kuramazsınız. Django saf bir Python kitaplığıdır, bu nedenle yüklemek için bir C derleyicisi gerektirmez.

2.7.9 ile başlayan Python sürümleri, bu eğitimdeki diğer her şeyi yüklemek için kullanılan Python kitaplığı/paket/yazılım yöneticisi olan PIP'yi içerdiğinden, Python 2.7.9 veya sonraki bir sürümünü yüklemeniz önemlidir.

Kurulum işlemi çok basit ve basittir. Python'u C:\Python27 dizinine kurmayı teklif edecek, bunu sonradan hayatı kolaylaştıracağı için kabul etmelisiniz. Adlarında boşluk bulunan dizinlere bir şeyler yükleme Windows alışkanlığına kapılmamaya çalışın.

Kurulumdan sonra temel dizin, yaklaşık 8 alt dizin, bazı çeşitli dosyalar ve Python.exe ve PythonW.exe adlı iki yürütülebilir dosya içerecektir. Birincisi varsayılan komut satırı yorumlayıcısı ve Python kabuğu iken, ikincisi yalnızca yorumlayıcıdır, çağrılırsa bir konsol penceresi kullanmayacak (veya oluşturmayacak) ve bu nedenle GUI Python uygulamalarını çalıştırmak için uygundur.

Daha sonra Python, sistemin PATH ortam değişkenine eklenmelidir. Bu, Gelişmiş sekmesindeki Gelişmiş Sistem Ayarları'nda (veya Sistem Özellikleri ) Ortam Değişkenleri düğmesine tıklanarak yapılır. Eklenecek iki dizin vardır: C:\Python27 ve C:\Python27\Scripts . Bunlar, noktalı virgülle ( ; ) ayırarak PATH listesine eklenmelidir. PATH değişkeninizin sonu ;C:\Python27;C:\Python27\Scripts gibi görünmelidir.

Profesyonel ipucu: Cygwin'e benzer hafif bir Unix komut satırı yardımcı programı koleksiyonu olan GOW'u da kurmak isteyebilirsiniz. Size ls gibi araçlar sağlar, ayrıca make , wget , curl , ssh , scp , gzip ve tar gibi daha ilginç araçlar sağlar.

Django'yu Windows'a Yükleme

Django, pip install django gibi bir komutla PIP kullanılarak kurulabilir. İşlem, sisteminizde halihazırda mevcut değilse, bazı ek bağımlılıklar çekebilir. Aksi takdirde, aşağıdakine benzer bir çıktıyla yalnızca Django'yu yükleyecektir:

 Downloading/unpacking django Installing collected packages: django Successfully installed django Cleaning up...

Yeni bir Windows Komut İstemi başlatarak, python komutunu çalıştırarak ve Python isteminde import django komutunu girerek hem Python hem de Windows için Django'nun çalışıp çalışmadığını kontrol edebilirsiniz. Düzgün çalışıyorsa, import django komutundan sonra çıktı veya mesaj olmamalıdır; yani:

 Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import django >>>

Windows'ta bir Django projesi yükleme

Bir Django “projesi” bir veya daha fazla “uygulama”dan oluşur. Bir projenin üst düzey dizini genellikle ayarları ve bazı genel proje düzeyindeki bilgileri içeren özel bir proje alt dizini, uygulama başına bir alt dizin ve manage.py adlı bir komut satırı komut dosyası içerir. Örneğin:

 C:\Devel\djangoproject\src>dir Volume in drive C is OS Volume Serial Number is 6A3D-C1B8 Directory of C:\Devel\djangoproject\src 22/12/2014 04:25 <DIR> . 22/12/2014 04:25 <DIR> .. 22/12/2014 04:19 <DIR> project 22/12/2014 04:58 <DIR> djangoapp 16/12/2014 03:30 <DIR> templates 16/12/2014 00:50 250 manage.py 1 File(s) 250 bytes 5 Dir(s) 23,552,929,792 bytes free

Django projeleri, tüm proje dizinini arşivleyerek ve başka bir makinede sıkıştırarak kolayca dağıtılabilir. Yukarıdaki örnekte proje, project alt dizinini, djangoapp adlı uygulama dizinini ve bir yardımcı templates alt dizinini içerir.

manage.py betiği, Django uygulamalarının “İsviçre çakısı”dır. Yeni uygulamalar oluşturmaktan veritabanı geçişlerine, bir test (gömülü) HTTP sunucusu veya hatta bir FastCGI sunucusu çalıştırmaya kadar her şeyi yapar.

Bir test HTTP sunucusu çalıştırma

Proje ve uygulamaları işlevselse, aşağıdakine benzer bir çıktıyla sonuçlanacak olan manage.py runserver komutunu çalıştırarak varsayılan yalnızca geliştirme amaçlı Django HTTP sunucusunu başlatabilmeniz gerekir:

 C:\Devel\djangoproject\src>manage.py runserver Performing system checks... System check identified no issues (0 silenced). December 23, 2014 - 01:19:02 Django version 1.7.1, using settings 'project.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.

Mesajlardan da görebileceğiniz gibi bu, localhost, port 8000'de bir sunucu başlatır. Web tarayıcınız ile hemen erişebilirsiniz.

FastCGI sunucusunu yapılandırma ve çalıştırma

Daha ilginç bir seçenek, bir FastCGI sunucusunu etkinleştirmektir. FastCGI ile uygulamaya üretim ortamında hizmet vermek için IIS, Apache veya başka herhangi bir web sunucusunu kullanabilirsiniz. Bunun çalışması için fcgi.py'yi (Django'yu Windows üzerinde IIS ile FastCGI aracılığıyla çalıştırmak için Django yönetim komutu) indirmeniz ve onu Django uygulamasının (projenin değil!) alt dizininin management/commands alt dizinine koymanız gerekir. Hem management hem de commands alt dizinleri, __init__.py (bu dizinleri Python modüllerine dönüştüren) adlı boş bir dosyaya sahip olmalıdır .

fcgi.py , TCP soketi veya boru üzerinden dinlemeyi desteklemeyen ve tüm işlemlerini stdin ve stdout` kullanarak yapan çok basit ve minimalist bir WSGI to FastCGI adaptörüdür. Bu nedenle, nginx gibi modern web sunucuları ile kullanılamaz, ancak IIS ile çalışacaktır .

IIS'yi bir FastCGI uygulamasını çalıştıracak şekilde yapılandırma

FastCGI modülü IIS'ye (veya sadece IIS 7+'deki CGI modülü) yüklenirse, IIS yönetim konsolunda "FastCGI Ayarları" simgesi kullanılabilir. Django, kendi URL yönlendirmesine sahip bir çerçevedir, bu nedenle Django uygulamaları, belirli yollar için IIS'de bir "işleyici" olarak kurulmalıdır. IIS'nin Varsayılan Web Sitesine bir Django uygulaması yüklemek için yönetim konsolunda seçin ve İşleyici eşlemeleri yapılandırma özelliğini açın. İçinde Modül Eşleme Ekle… eylemine tıklayın ve aşağıdaki bilgileri girin:

  • İstek yolu : Tüm istekleri dahili Django yönlendirmesi ile işlemek için \* olarak ayarlayın
  • Modül : IIS'nin FastCGI modülünü kullanmak için FastCgiModule olarak ayarlayın
  • Yürütülebilir : Burada, hem python.exe yolu hem de komut satırı bağımsız değişkenleri, ayırıcı olarak boru karakteri ( | ) kullanılarak ayarlanmalıdır. Bu ayar için örnek bir değer: C:\Python27\python.exe|C:\app\src\manage.py fcgi --pythonpath C:\app\src --settings project.settings . manage.py betiği için fcgi komutunu belirtmeniz ve proje için Python yorumlayıcısının arama yolunu ve projenin ayar modülü için Python modül adını manuel olarak ayarlamanız gerektiğini unutmayın.
  • İsim : Bunu istediğiniz gibi ayarlayabilirsiniz.

Yapılandırma iletişim kutunuz şöyle görünmelidir:

iis yapılandırma iletişim kutusu

Ardından, Kısıtlama iste düğmesini tıklayın ve Eşleme sekmesini düzenleyin. “Yalnızca istek şuna eşlenmişse işleyiciyi çağır…” onay kutusunun işaretini kaldırın (aksi takdirde, IIS, URL isteğinde alt dizinler olduğunu düşündüğü şeyleri eşlemede sorun yaşar):

kısıtlama talep etmek

İşleyici bilgileri iletişim kutusunda Tamam'a tıklayın. Ardından IIS, onaylamanız gereken eşleşen bir FastCGI uygulama girişinin oluşturulmasını onaylamanızı isteyecektir. Bu giriş, IIS Yönetim Konsolunun kök ekranından erişilebilen FastCGI Ayarları özelliğinde görünecektir. IIS tarafından oluşturulan varsayılan giriş yeterlidir, ancak yararlanmak isteyebileceğiniz bazı isteğe bağlı ayarlar vardır:

  • Maksimum örnek : FastCGI uygulamalarını çalıştırmak için kullandığımız yaklaşım tek işlemli, tek iş parçacıklı, yani her eşzamanlı istek için ayrı bir Python yorumlayıcı işlemi başlatılacak. Bu ayar, eşzamanlı Django uygulama örneklerinin sayısını sınırlar.
  • Dosyadaki değişiklikleri izleyin : Varsayılan olarak, bir kez başlatıldığında, uygulama süreçleri ya manuel olarak kapatılana ya da Örnek MaxRequest isteklerini yerine getirene kadar etkin olacaktır. Bu ayarı kullanarak IIS, rastgele bir dosyanın zaman damgasını izler ve değişirse, durur ve uygulama örneklerini yeniden yükler. Bu, uygulamaların değiştirildiğinde yeniden yüklenmesine izin verdiği için hem geliştiriciler hem de üretim ortamları için uygundur. “Bir dosyanın yeniden yükleme göstergesi için zaman damgasını izleme” Windows'ta oldukça garip bir kavramdır, ancak Unix benzeri ortamlarda normaldir ve bu nedenle FastCGI ile buraya taşınmıştır.

FastCGI uygulaması ekle

Statik kaynak ve medya dizinlerini yapılandırma

Modern web uygulamaları, CSS, JavaScript ve diğerleri gibi birden çok kaynak dosyası kullanır ve Django uygulamaları istisna değildir. Django, geliştiricilerin gerekli kaynakları uygulama dizini ağacına entegre etmelerine izin veren, ancak Django tarafından ayıklanıp uygun, statik bir dizine kopyalanabilen çok kullanışlı bir özellik sağlar. Bu temelde geliştirici tarafından kontrol edilen bir özelliktir ve Django'nun statik dosyaları depolayacağı konumlar projenin settings.py dosyasında kontrol edilir. İyi niyetli projeler bunun için makul derecede mantıklı bir yol kullanacaktır, ancak standartlaştırılmamıştır.

Yüklenen dosyaları işleyen uygulamalar, bunları Django'da geleneksel olarak media olarak adlandırılan benzer şekilde yönetilen bir dizinde saklar. static ve media dizinlerinin, IIS yapılandırmasına sanal dizinler olarak eklenmesi gerekir:

Statik kaynak ve medya dizinlerini yapılandırma

Buradaki önemli adım, her bir dizin için İşleyici Eşlemeleri özelliğini yeniden yapılandırmak ve Django Uygulama işleyicisini kaldırmak, en önemlisi StaticFile işleyicisini bırakmaktır.

static dizinin (Django projesindeki diğer tüm dosya ve dizinlerin yanı sıra) IIS tarafından okunabilir olması gerektiğini, ancak media dizininin de IIS tarafından yazılabilir olması gerektiğini unutmayın. Son site yapılandırması aşağıdakine benzemelidir:

iis site yapılandırma örneği

Veritabanları hakkında bir not

SQLite, Unix benzeri sistemlerde olduğu gibi Windows'ta da varsayılan olarak çalışır. Diğer açık kaynak veritabanlarının çoğu artık Windows üzerinde çalışıyor, hatta önerdiğim PostgreSQL bile. Ancak mevcut Windows kurulumlarında, Django'yu MS SQL Server ile dağıtma gerekliliği olabilir. Bu, bir ODBC köprü sürücüsü veya yerel bir MS SQL sürücüsü kullanılarak mümkündür. Teorik olarak, ikisi de çalışır, ancak onları test etmedim. Yeni bir veritabanına geçmek için en azından veritabanı bağlantı parametrelerinin (projenin settings.py dosyasındaki) değiştirilmesi gerekir. Veri geçişinin manuel olarak yapılması gerekir.

SQLite veritabanı kullanılıyorsa, hem veritabanı dosyasının hem de bulunduğu dizinin IIS tarafından yazılabilir olması gerektiğini unutmayın.

Sorun giderme

Tanımlanan yapılandırma test edildi ve çalıştığı kanıtlandı, ancak bir şeyler ters giderse, Windows için Django yüklemenizde sorun gidermeye yönelik bazı temel adımlar şunlardır:

  1. FastCGI komut satırını kendiniz başlatmayı deneyin. Bu, FastCGI Ayarlarında yapılandırılan ve site için İşleyici Eşlemelerinde yapılandırılan komutla eşleşmesi gereken komuttur.
  2. IIS için İzleme özelliğini yükleyin, ardından tüm içeriği ( ), durum kodunu "500" ve olay önem derecesini "Hata" izlemek üzere Başarısız İstek İzleme Kurallarında Django sitesi için yapılandırın. İzlemeler, IIS'nin C:\inetpub\logs\FailedReqLogFiles dizininde (veya yapılandırmanıza bağlı olarak benzer bir dizinde) XML dosyaları (ekli XSLT ile) olarak kullanılabilir olacaktır. Ardından, *Yapılandır->Başarısız istek izleme… eyleminde belirli web sitesi (veya sanal dizin) için izlemeyi etkinleştirmeniz gerekir .

Çözüm

Elbette Django, Unix benzeri bir ortam için uyarlanmıştır ve Django'yu çalıştırmanın en yaygın ve desteklenen yolu bir Linux sistemidir (örneğin, uwsgi ve nginx ile).

Yine de, bu eğitimde gösterildiği gibi, Django'yu Windows üzerinde çalıştırmak çok fazla iş gerektirmez. Açıklanan adımlardan bazıları, saf Windows perspektifinden sezgisel görünebilir, ancak bunlar gereklidir ve neyse ki, yapılandırma için harcanan çaba yalnızca bir kereliktir. Django uygulaması yapılandırıldıktan sonra, bir Linux platformunda olduğu gibi davranmalıdır.