Bagaimana menjelaskan instalasi Django / Python ke Python-newbie yang menjalankan server IIS bersama [ditutup]

9

Untuk alasan di luar kendali saya, situs web kami di-host dengan penyedia hosting yang menggunakan IIS untuk server mereka. Mereka saat ini menawarkan PHP dan ASP, dan juga Python dan Perl melalui cgi-scripts.

Saya ingin melakukan desain ulang, menulis ulang situs web kami, dan ingin mengubah dari PHP ke pengaturan Python / Django. Penyedia hosting terbuka untuk saran, tetapi jelas bahwa "Kami tidak benar-benar tahu apa itu Python, atau bagaimana cara kerjanya, tetapi jika Anda bisa menjelaskannya kepada kami, kami akan mencoba mengatur Anda dengan apa pun yang Anda butuhkan" .

Namun, saya mungkin tahu cara mengatur Django di lingkungan hosting bersama di apache / mod_python, tapi saya tidak tahu bagaimana mengaturnya di IIS, dan tentu saja tidak bagaimana mengaturnya untuk lingkungan hosting bersama. Saya sudah googled sedikit, tetapi sebagian besar sumber yang saya temukan berasumsi bahwa sysadmin 1) tahu Python / Django dan 2) menggunakan hosting IIS khusus untuk situsnya.

Bisakah seseorang menjelaskan bagaimana saya bisa menjelaskan prosesnya kepada penyedia hosting saya, atau memberi saya petunjuk untuk sumber daya yang baik dan terperinci yang bisa saya teruskan ke penyedia hosting saya? Perlu diingat bahwa orang-orang yang menjalankan hosting mungkin tahu "segalanya" tentang IIS, tetapi tidak tahu bagaimana menghadapi Python.

Epcylon
sumber

Jawaban:

8

Jika Anda mengalami kesulitan menggunakan IIS, gunakan PyISAPIe alih-alih CGI jika Anda bisa. Instruksi dan tautan untuk PyISAPIe ada di bawah ini. Host web Anda akan tahu lebih banyak tentang ekstensi ISAPI jika mereka mengelola IIS daripada tentang Python, dan mereka tidak perlu tahu banyak tentang Python dengan PyISAPIe.

CARA YANG LEBIH BAIK UNTUK MELAKUKAN INI MENGGUNAKAN PyISAPIe, SEBUAH EKSTENSI ISAPI . PyISAPIe jauh, jauh lebih cepat daripada CGI di IIS7. Apa yang dilakukan ini mirip dengan mod_python di Apache. Situs proyek PyISAPIe memiliki instruksi untuk mengatur Django dengan WSGI melalui PyISAPIe. Ini akan membawa kinerja Anda ke kecepatan yang wajar untuk situs web lalu lintas publik / tinggi.

Menyiapkan Django dalam IIS + Python melalui lingkungan CGI akan menjadi sangat lambat untuk setiap penggunaan produksi. Anda tidak boleh menggunakan ini untuk situs web di mana Anda mengharapkan layanan lebih dari beberapa permintaan per menit. Ini juga membatasi Anda dalam apa yang Anda bisa cache dalam memori dalam kerangka kerja cache Django, karena proses aplikasi Django dimulai kembali dengan setiap permintaan baru.

Dalam server web yang waras seperti Apache, lighttpd, dll., Dengan mod_python, interpreter Python yang menjalankan proses Django tetap ada dalam memori dan diinisialisasi dengan setiap utas pekerja Apache baru yang menangani banyak permintaan selama waktu tertentu. Ini berarti bahwa Python + Django tidak keluar dan dimulai kembali untuk setiap permintaan baru. Dalam pengaturan FastCGI, server web (Apache atau lighttpd misalnya) membuat soket (domain UNIX atau TCP) yang digunakan untuk berkomunikasi dengan aplikasi FastCGI (aplikasi web Django Anda) melalui protokol FastCGI. Ditto untuk pengaturan proxy HTTP (mereka berbicara HTTP bukan FastCGI). Dalam lingkungan CGI, interpreter Python disebut yang menjalankan aplikasi Django, benar-benar baru untuk setiap permintaan, sehingga aplikasi tidak dapat menyimpan status lintas permintaan dalam memori dan tidak dapat melakukan cache dengan benar di mana pun kecuali dalam database.

Cukup mengoceh, jika Anda harus menggunakan IIS + CGI + Django, inilah cara untuk mencapai hal mengerikan yang mengerikan ini: Gunakan kode berikut untuk membuat skrip CGI Anda sendiri yang menjalankan aplikasi Django Anda (ini diterjemahkan antara CGI dan WSGI). Anda harus mengedit skrip sedikit untuk membuatnya mengarah ke aplikasi dan kode Django Anda. Itulah skrip CGI yang harus Anda ajukan permintaan. Selanjutnya, Anda perlu meneruskan / menulis ulang semua permintaan ke skrip CGI Anda ...

Di bawah IIS6, Anda akan memerlukan setara mod_rewrite seperti IISRewrite, yang saya pikir tidak gratis dan merupakan sumber tertutup. Di bawah IIS7, Microsoft akhirnya menyertakan modul penulisan ulang URL. Dokumentasi untuk itu ada di sini . Petunjuk untuk membuat aturan penulisan ulang di IIS7 ada di sini . Anda akan ingin meneruskan semuanya di URL basis target untuk ditangani oleh skrip CGI Anda.

pengguna6281
sumber
Karena hosting dibagikan, masalah utama adalah bagaimana penyedia hosting mengkonfigurasi PyISAPIe agar sesuai dengan kebutuhan saya, dan juga berbagai kebutuhan pelanggan lainnya. Saya tidak dapat menemukan petunjuk untuk mengatur Django dengan WSGI di beranda ... Jika semuanya gagal, saya hanya akan menggunakan pendekatan CGI. Dengan kurang dari 400 permintaan per minggu , saya pikir kita bisa hidup dengan solusi CGI sampai kita memutuskan untuk beralih hosting.
Epcylon
1

Cara mengatur Python pada FastCGI di IIS

Berikut cara mengatur Python pada FastCGI IIS 7+ dengan membuka jalan bagi pengaturan DJango yang layak

... dan dapat mengaitkan debugger ke dalam proses yang memungkinkan Anda untuk menelusuri kode Python Anda

Contoh ini tidak menggunakan konsol manajemen IIS tetapi mencantumkan konten file konfigurasi yang dihasilkan

Langkah 1

Instal Python + debugger yang baik (contoh ini menggunakan WingIDE yang saya temukan alat yang sangat baik) Contoh ini mengasumsikan folder c: \ python27

Langkah 2

Buat folder web, misalnya di localhost c: \ inetpub \ wwwroot \ mypythonfolder dan letakkan file web.config berikut di dalamnya:

Perhatikan | karakter pipa dalam direktif scriptProcessor. Ini digunakan oleh IIS untuk memetakan skrip ke aplikasi fastCgi (langkah 3). Seharusnya cocok dengan karakter dengan karakter pengaturan jalur penuh + karakter pipa + argumen dari langkah 3 di bawah ini.

Langkah 3

Dalam file applicationHost.config di folder c: \ windows \ system32 \ inetsrc \ config letakkan yang berikut di bagian ini:

    <fastCgi>
        <application fullPath="c:\python27\python.exe" arguments="c:\python27\lib\mylib\myfcgi.py" monitorChangesTo="C:\Python27\Lib\r4a\r4afcgi.py" stderrMode="ReturnStdErrIn500" maxInstances="4" idleTimeout="300" activityTimeout="300" requestTimeout="90" instanceMaxRequests="200" protocol="NamedPipe" queueLength="1000" flushNamedPipe="true" rapidFailsPerMinute="10" />
    </fastCgi>

Langkah 4

Di c: \ python27 \ lib \ mylib \ myfcgi.py masukkan kode berikut:

import wingdbstub

impor os, io, sys ret = "environment: \ r \ n" untuk param di os.environ.keys (): ret = ret + "% s =% s \ r \ n"% (param, os.environ [ param]) ret = ret + "\ r \ nArgs:" untuk arg di sys.argv: ret = ret + arg handle = io.open ("c: \ temp \ myfcgi.log", 'wb') handle.write (ret) handle.close ()

Langkah 5

Pastikan IUSR memiliki hak untuk menulis ke folder c: \ temp Anda

Langkah 6

Masukkan wingdbstub.py dan wingdebugpw ke folder c: \ python27 \ lib \ mylib \ Anda. Ini akan memungkinkan debugging di wingide. File-file ini disediakan dengan instalasi sayap Anda. Catatan: jika Python juga perlu mengkompilasi kode Anda ke wingstub.pyc, IUSR perlu menulis hak pada folder itu karena proses python akan diluncurkan di bawah akun itu oleh IIS

Langkah 6

Buka wingdb dan atur breakpoint pada baris 'import os, io, sys'

Langkah 7

Hit di browser Anda http: // localhost / mypythonfolder

Jika semuanya berfungsi dengan benar, wingide sekarang seharusnya dipicu untuk menampilkan kode yang sedang berjalan di breakpoint Anda. Jika tidak: - ada masalah firewall. Proses python berkomunikasi dengan antarmuka WingIDE melalui koneksi tcp - atau ada masalah dengan keamanan di dalam wingide. Perlu versi yang tepat dari file wingdebugpw, yang pada dasarnya berisi kata sandi atau token yang memvalidasi akses terhadap instalasi wingide Anda. Jika ini tidak terjadi, siapa pun dengan akses tcp ke komputer Anda dapat melakukan debug terhadap kode Anda.

Langkah 8

Verifikasi bahwa di c: \ temp logfile dibuat. Ini juga harus bekerja jika Anda tidak dapat melanjutkan langkah 7

Langkah 9

Perhatikan bahwa halaman ini memicu debugger tetapi tidak mengembalikan halaman apa pun ke browser web. Beberapa latar belakang: server web berkomunikasi fastcgi melalui apa yang disebut 'catatan'. Ini berarti bahwa setiap permintaan pengguna tunggal masuk ke aplikasi Anda yang dikemas dalam beberapa 'catatan' terpisah. Setiap catatan adalah struktur data yang menunjukkan permulaan permintaan, querystring, variabel pos dll. Membatalkan pengemasan catatan ini ke satu permintaan agak rumit, mengikuti spesifikasi fastcgi http: //www.fastcgi .com / devkit / doc / fcgi-spec.html # S1

Sebagai isi dari c: \ python27 \ lib \ mylib \ myfcgi.py Saya baru saja memasukkan salinan zoofcgi.py yang disediakan oleh helicontech. File python ini dapat memecahkan kode catatan-catatan ini dan melayani halaman dan cukup menarik untuk di-debug. Perhatikan juga bahwa helicontech secara opsional menyediakan dll yang berada di antara IIS dan dan zoofcgi.py tetapi dll ini tidak sepenuhnya diperlukan. Saya percaya ini mengimplementasikan versi yang sedikit lebih baik dan generik dari implementasi fastcgi yang disediakan msft. Namun ketika Anda menggunakan dll mereka, ketika Anda ingin melangkah melalui kode Anda proses diakhiri dengan agak cepat dan IIS / DLL membunuh proses python Anda ketika menyimpulkan tidak ada respons yang akan kembali dalam hitungan detik atau 2.

Itu dia. Pada prinsipnya komunikasi antara IIS dan kode python Anda dilakukan dengan pipa bernama. Anda harus dapat mengaturnya menggunakan soket tcp tetapi saya tidak dapat menentukan port mana yang digunakan (saya percaya stdin harus diubah menjadi port yang kemudian dapat dipilih () tetapi saya tidak memberikannya usaha apapun)

Robert van Geel
sumber
0

Saya belum pernah mencoba ini dengan Python, tetapi bekerja sangat baik sebagai CGI dengan Perl. Produk ActiveState berintegrasi tanpa halangan dengan IIS. Saya sukses besar dengan ActivePerl. Mereka juga memiliki ActivePython yang mungkin (mungkin) juga akan melakukan trik di sana. Maka saya pikir Anda hanya akan mengunduh Django menginstalnya .

EDIT: Ok, jadi goreskan integrasi yang tak terlihat dengan IIS ... NAMUN, inilah artikel tentang cara mengintegrasikan ke dalam IIS . Anda mungkin juga mempertimbangkan Iron Python sebagai distro Anda untuk kotak Windows.

Untuk penyedia, saya akan ragu mereka perlu tahu lebih dari itu adalah platform pengembangan web seperti ASP / ASP.NET dan bahwa Python adalah bahasa yang digunakan untuk mengembangkan dengannya.

Sejauh instalasi yang saya sebutkan di atas, saya akan mencoba dan melihat bagaimana tarifnya. Saya akan memposting catatan di atasnya jika saya membuatnya berfungsi ok!

squillman
sumber