วิธีอธิบายการติดตั้ง Django / Python ไปยัง Python-newbie ที่รันเซิร์ฟเวอร์ IIS ที่ใช้ร่วมกัน [ปิด]


9

ด้วยเหตุผลที่นอกเหนือการควบคุมของฉันเว็บไซต์ของเราโฮสต์กับผู้ให้บริการโฮสต์ที่ใช้ IIS สำหรับเซิร์ฟเวอร์ของพวกเขา พวกเขาเสนอ PHP และ ASP และ Python และ Perl ผ่านสคริปต์ cgi

ฉันต้องการทำการออกแบบใหม่เขียนเว็บไซต์ของเราใหม่และต้องการเปลี่ยนจาก PHP เป็นการตั้งค่า Python / Django ผู้ให้บริการโฮสติ้งเปิดให้บริการสำหรับคำแนะนำ แต่ชัดเจนว่า "เราไม่ทราบว่า Python คืออะไรหรือทำงานอย่างไร แต่ถ้าคุณสามารถอธิบายให้เราได้เราจะพยายามตั้งสิ่งที่คุณต้องการ" .

อย่างไรก็ตามฉันอาจทราบวิธีตั้งค่า Django ในสภาพแวดล้อมการโฮสต์ที่ใช้ร่วมกันบน apache / mod_python แต่ฉันไม่รู้ว่าจะตั้งค่าบน IIS ได้อย่างไร ฉันไปเที่ยวกันนิดหน่อย แต่ทรัพยากรส่วนใหญ่ฉันคิดว่า sysadmin 1) รู้ Python / Django และ 2) กำลังใช้ IIS โฮสติ้งเฉพาะสำหรับเว็บไซต์ของเขา

ใครช่วยอธิบายวิธีที่ฉันสามารถอธิบายกระบวนการแก่ผู้ให้บริการโฮสต์ของฉันหรือให้คำแนะนำแก่ฉันเกี่ยวกับแหล่งข้อมูลที่ดีและมีรายละเอียดที่ฉันสามารถส่งต่อไปยังผู้ให้บริการโฮสต์ของฉันได้ โปรดทราบว่าผู้ที่ใช้งานโฮสติ้งอาจรู้จัก "ทุกอย่าง" เกี่ยวกับ IIS แต่ไม่รู้ว่าจะจัดการกับ Python ได้อย่างไร

คำตอบ:


8

หากคุณติดกับการใช้ IIS ให้ใช้ PyISAPIe แทน CGI ถ้าทำได้ คำแนะนำและลิงก์สำหรับ PyISAPIe อยู่ด้านล่าง เว็บโฮสต์ของคุณจะรู้มากขึ้นเกี่ยวกับส่วนขยายของ ISAPI หากพวกเขาจัดการ IIS มากกว่าเกี่ยวกับ Python และพวกเขาไม่จำเป็นต้องรู้เกี่ยวกับ Python กับ PyISAPIe มากนัก

มากวิธีที่ดีกว่าการทำเช่นนี้คือการใช้ PyISAPIe, ISAPI มี EXTENSION PyISAPIe นั้นเร็วกว่า CGI ใน IIS7 มาก สิ่งนี้คล้ายกับ mod_python บน Apache โฮมเพจโครงการ PyISAPIe มีคำแนะนำสำหรับการตั้งค่า Django ด้วย WSGI บน PyISAPIe วิธีนี้จะทำให้ประสิทธิภาพของคุณเร็วขึ้นพอสมควรสำหรับเว็บไซต์สาธารณะ / เว็บไซต์ที่มีการเข้าชมสูง

การตั้งค่า Django ใน IIS + Python ผ่านสภาพแวดล้อม CGI จะช้าลงอย่างมากสำหรับการใช้งานจริง คุณไม่ควรใช้สิ่งนี้กับเว็บไซต์ที่คุณคาดว่าจะให้บริการมากกว่าคำขอจำนวนหนึ่งต่อนาที นอกจากนี้ยัง จำกัด คุณอย่างรุนแรงในสิ่งที่คุณสามารถแคชในหน่วยความจำในกรอบการแคชของ Django เนื่องจากกระบวนการของแอป Django จะเริ่มต้นใหม่ด้วยการร้องขอใหม่แต่ละครั้ง

ในเว็บเซิร์ฟเวอร์ที่มีสติเช่น Apache, lighttpd และอื่น ๆ ด้วย mod_python ล่าม Python ที่รันกระบวนการ Django ยังคงอยู่ในหน่วยความจำและเริ่มต้นด้วยเธรดผู้ปฏิบัติงาน Apache แต่ละคนใหม่ที่จัดการคำขอจำนวนมากตลอดระยะเวลา ซึ่งหมายความว่า Python + Django จะไม่ออกและเริ่มใหม่สำหรับแต่ละคำขอใหม่ ในการตั้งค่า FastCGI เว็บเซิร์ฟเวอร์ (เช่น Apache หรือ lighttpd) จะสร้างซ็อกเก็ต (โดเมน UNIX หรือ TCP) ซึ่งจะสื่อสารกับแอปพลิเคชัน FastCGI (เว็บแอปพลิเคชัน Django ของคุณ) ผ่านโปรโตคอล FastCGI เหมือนกันสำหรับการตั้งค่าพร็อกซี HTTP (พวกเขาพูด HTTP แทน FastCGI) ในสภาพแวดล้อม CGI ตัวแปลภาษา Python จะถูกเรียกใช้ซึ่งเรียกใช้แอปพลิเคชัน Django อย่างสมบูรณ์สำหรับการร้องขอแต่ละครั้งดังนั้นแอปพลิเคชันจึงไม่สามารถระบุสถานะข้ามการร้องขอในหน่วยความจำและไม่สามารถแคชได้อย่างถูกต้อง

หากคุณต้องใช้ IIS + CGI + Django ต่อไปนี้เป็นวิธีการทำให้สิ่งที่น่าสยดสยองนี้สำเร็จ:ใช้รหัสต่อไปนี้เพื่อสร้างสคริปต์ CGI ของคุณซึ่งรันแอป Django ของคุณ (แปลระหว่าง CGI และ WSGI) คุณจะต้องแก้ไขสคริปต์เล็กน้อยเพื่อให้ชี้ไปที่แอป Django และรหัสของคุณ นั่นคือสคริปต์ CGI ที่คุณจะต้องส่งคำขอไป ถัดไปคุณต้องส่งต่อ / เขียนคำขอทั้งหมดไปยังสคริปต์ CGI ของคุณ ...

ภายใต้ IIS6 คุณจะต้องมี mod_rewrite เทียบเท่ากับ IISRewrite ซึ่งฉันคิดว่าไม่ฟรีและเป็นแหล่งข้อมูลปิด ภายใต้ IIS7 ในที่สุด Microsoft ก็รวมโมดูลการเขียน URL ใหม่อีกครั้ง เอกสารนั้นจะอยู่ที่นี่ คำแนะนำสำหรับการสร้างกฎการเขียนซ้ำใน IIS7 อยู่ที่นี่ คุณจะต้องการส่งต่อทุกสิ่งที่ URL ฐานเป้าหมายเพื่อจัดการโดยสคริปต์ CGI ของคุณ


เนื่องจากมีการแชร์โฮสติ้งปัญหาหลักคือผู้ให้บริการโฮสติ้งจะกำหนดค่า PyISAPIe ให้เหมาะสมกับความต้องการของฉันอย่างไรและยังตอบสนองความต้องการที่แตกต่างของลูกค้ารายอื่น ๆ ฉันไม่พบคำแนะนำสำหรับการตั้งค่า Django ด้วย WSGI ในหน้าแรก ... หากสิ่งอื่นล้มเหลวฉันจะใช้วิธี CGI ด้วยคำขอน้อยกว่า 400 คำขอต่อสัปดาห์ฉันคิดว่าเราสามารถใช้ชีวิตกับโซลูชัน CGI ได้จนกว่าเราจะตัดสินใจเปลี่ยนโฮสต์
Epcylon

1

วิธีการตั้งค่า Python บน FastCGI บน IIS

ต่อไปนี้เป็นวิธีตั้งค่า Python บน FastCGI IIS 7+ พร้อมเปิดทางสำหรับการตั้งค่า DJango ที่เหมาะสม

... และสามารถเชื่อมต่อดีบักเกอร์เข้ากับกระบวนการที่ทำให้คุณสามารถใช้รหัส Python ของคุณ

ตัวอย่างนี้ไม่ได้ใช้คอนโซลการจัดการ IIS แต่จะแสดงรายการเนื้อหาของไฟล์การกำหนดค่าผลลัพธ์

ขั้นตอนที่ 1

ติดตั้ง Python + ตัวดีบั๊ก (ตัวอย่างนี้ใช้ WingIDE ซึ่งฉันพบเครื่องมือที่ยอดเยี่ยม) ตัวอย่างนี้ถือว่าโฟลเดอร์ c: \ python27

ขั้นตอนที่ 2

สร้างเว็บโฟลเดอร์เช่นบน localhost c: \ inetpub \ wwwroot \ mypythonfolder และวางไฟล์ web.config ต่อไปนี้ไว้ในนั้น:

หมายเหตุ | อักขระไพพ์ในคำสั่ง scriptProcessor IIS นี้ใช้เพื่อแมปสคริปต์กับแอปพลิเคชัน fastCgi (ขั้นตอนที่ 3) ควรจับคู่อักขระตามตัวอักษรการตั้งค่า fullpath + pipe character + อาร์กิวเมนต์จากขั้นตอนที่ 3 ด้านล่าง

ขั้นตอนที่ 3

ในไฟล์ applicationHost.config ในโฟลเดอร์ c: \ windows \ system32 \ inetsrc \ config วางสิ่งต่อไปนี้ในส่วน:

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

ขั้นตอนที่ 4

ใน c: \ python27 \ lib \ mylib \ myfcgi.py ใส่รหัสต่อไปนี้:

import wingdbstub

นำเข้าระบบปฏิบัติการ, io, sys ret = "สภาพแวดล้อม: \ r \ n" สำหรับพารามิเตอร์ใน os.environ.keys (): ret = ret + "% s =% s \ r \ n"% (พารามิเตอร์, os.environ [ param]) ret = ret + "\ r \ nArgs:" สำหรับ ARG ใน sys.argv: ret = ret + ARG จัดการ = io.open ("c: \ temp \ myfcgi.log", 'wb') handle.write (ret) หมายเลขอ้างอิงปิด ()

ขั้นตอนที่ 5

ตรวจสอบให้แน่ใจว่า IUSR มีสิทธิ์เขียนลงในโฟลเดอร์ c: \ temp ของคุณ

ขั้นตอนที่ 6

วาง wingdbstub.py และ wingdebugpw ไว้ในโฟลเดอร์ c: \ python27 \ lib \ mylib \ ของคุณ สิ่งนี้จะช่วยให้การดีบักใน wingide ไฟล์เหล่านี้มีให้พร้อมกับการติดตั้งแบบปีกของคุณ หมายเหตุ: ถ้า Python ต้องการคอมไพล์โค้ดของคุณใน wingstub.pyc IUSR จำเป็นต้องมีสิทธิ์ในการเขียนในโฟลเดอร์นั้นเนื่องจากกระบวนการ Python จะถูกเปิดใช้งานภายใต้บัญชีนั้นโดย IIS

ขั้นตอนที่ 6

เปิด wingdb และตั้งค่าเบรกพอยต์บนบรรทัด 'import os, io, sys'

ขั้นตอนที่ 7

เข้าสู่เบราว์เซอร์ของคุณที่http: // localhost / mypythonfolder

หากทุกอย่างทำงานถูกต้องตอนนี้ควรถูกเรียกใช้ปีกเพื่อแสดงรหัสการทำงานที่เบรกพอยต์ของคุณ ถ้าไม่: - อาจมีปัญหาไฟร์วอลล์ กระบวนการหลามสื่อสารกับอินเทอร์เฟซ WingIDE ผ่านการเชื่อมต่อ tcp หรือมีปัญหาด้านความปลอดภัยภายใน wingide มันต้องการไฟล์ wingdebugpw รุ่นที่เหมาะสมซึ่งโดยทั่วไปจะมีรหัสผ่านหรือโทเค็นที่ตรวจสอบการเข้าถึงการติดตั้ง wingide ของคุณ หากไม่ใช่กรณีนี้ใครก็ตามที่มีการเข้าถึง tcp ไปยังพีซีของคุณสามารถดีบักรหัสของคุณได้

ขั้นตอนที่ 8

ตรวจสอบว่าใน c: \ temp logfile จะถูกสร้างขึ้น สิ่งนี้จะทำงานได้หากคุณไม่สามารถทำขั้นตอนที่ 7

ขั้นตอนที่ 9

โปรดทราบว่าหน้านี้จะเปิดใช้งานตัวดีบั๊ก แต่จะไม่ส่งคืนหน้าใด ๆ ไปยังเว็บเบราเซอร์ พื้นหลังบางส่วน: เว็บเซิร์ฟเวอร์สื่อสาร fastcgi ผ่านที่เรียกว่า 'บันทึก' ซึ่งหมายความว่าคำขอของผู้ใช้แต่ละรายจะมาในแอปพลิเคชันของคุณซึ่งบรรจุใน 'บันทึก' แยกกันหลายรายการ แต่ละระเบียนเป็นโครงสร้างข้อมูลที่บ่งชี้ว่าจุดเริ่มต้นของการร้องขอสตริงการสืบค้นตัวแปรโพสต์ ฯลฯ ที่ยกเลิกการบรรจุของระเบียนเหล่านี้เพื่อคำขอเดียวเป็นชนิดของยุ่งยากมันเป็นไปตามข้อกำหนดของ fastcgi http: //www.fastcgi .com / devkit / doc / FCGI-spec.html # S1

ในฐานะที่เป็นเนื้อหาของ c: \ python27 \ lib \ mylib \ myfcgi.py ฉันเพิ่งวางสำเนาของ zoofcgi.py ที่ให้ไว้โดย helicontech ไฟล์ไพ ธ อนนี้สามารถถอดรหัสบันทึกเหล่านี้และให้บริการหน้าและค่อนข้างน่าสนใจในการแก้ปัญหา นอกจากนี้โปรดทราบว่า helicontech มีตัวเลือก dll ที่อยู่ระหว่าง IIS และ zoofcgi.py แต่ dll นี้ไม่จำเป็นอย่างเคร่งครัด ฉันเชื่อว่ามีการใช้งาน fastcgi รุ่นปรับปรุงเล็กน้อยและทั่วไปที่ msft นำเสนอ อย่างไรก็ตามเมื่อคุณใช้ dll ของพวกเขาเมื่อคุณต้องการที่จะก้าวผ่านรหัสของคุณกระบวนการจะถูกยกเลิกค่อนข้าง Quicly และ IIS / DLL ฆ่ากระบวนการหลามของคุณเมื่อมันสรุปว่าไม่มีการตอบสนองกลับมาภายในไม่กี่วินาทีหรือ 2

แค่นั้นแหละ. โดยหลักการแล้วการสื่อสารระหว่าง IIS และรหัสไพ ธ อนของคุณจะทำกับไพพ์ที่มีชื่อ คุณควรจะสามารถตั้งค่าโดยใช้ซ็อกเก็ต tcp แต่ฉันไม่สามารถคิดได้ว่าพอร์ตใดที่ใช้ (ฉันเชื่อว่า stdin ควรเปลี่ยนเป็นพอร์ตซึ่งสามารถเลือกได้) แต่ฉันไม่ได้ให้สิ่งนั้น ความพยายามใด ๆ )


0

ฉันไม่ได้ลองกับ Python แต่มันใช้งานได้ดีในฐานะ CGI กับ Perl ผลิตภัณฑ์ของ ActiveStateผสานรวมกับ IIS อย่างไร้ที่ติ ฉันประสบความสำเร็จอย่างมากกับ ActivePerl พวกเขายังมีActivePythonซึ่งอาจ (อาจ) จะทำเคล็ดลับที่นั่น แล้วผมก็คิดว่าคุณก็จะดาวน์โหลด Django ติดตั้ง

แก้ไข: ตกลงดังนั้นเกาบูรณาการ seemless กับ IIS ... แต่นี่เป็นบทความเกี่ยวกับวิธีการที่จะบูรณาการเข้าไป IIS คุณอาจพิจารณาIron Pythonเป็น distro ของคุณสำหรับกล่อง Windows

สำหรับผู้ให้บริการฉันสงสัยว่าพวกเขาจำเป็นต้องรู้มากกว่านั้นคือแพลตฟอร์มการพัฒนาเว็บเช่น ASP / ASP.NET และ Python เป็นภาษาที่ใช้ในการพัฒนาด้วย

เท่าที่การติดตั้งที่ฉันพูดถึงข้างต้นฉันจะลองและดูว่ามันเป็นอย่างไร ฉันจะโพสต์บันทึกเกี่ยวกับมันถ้าฉันทำให้มันทำงาน ok!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.