Cách giải thích cài đặt Django / Python cho Python-newbie đang chạy máy chủ IIS được chia sẻ [đã đóng]


9

Vì những lý do ngoài tầm kiểm soát của tôi, trang web của chúng tôi được lưu trữ với một nhà cung cấp dịch vụ lưu trữ sử dụng IIS cho máy chủ của họ. Họ hiện cung cấp PHP và ASP, và cả Python và Perl thông qua các tập lệnh cgi.

Tôi muốn thiết kế lại, viết lại trang web của chúng tôi và muốn thay đổi từ PHP sang thiết lập Python / Django. Nhà cung cấp dịch vụ lưu trữ mở cho các đề xuất, nhưng rõ ràng rằng "Chúng tôi không thực sự biết Python là gì hoặc nó hoạt động như thế nào, nhưng nếu bạn có thể giải thích cho chúng tôi, chúng tôi sẽ cố gắng thiết lập cho bạn bất cứ điều gì bạn cần" .

Tuy nhiên, tôi có thể biết cách thiết lập Django trong môi trường lưu trữ được chia sẻ trên apache / mod_python, nhưng tôi không biết làm thế nào nó sẽ được thiết lập trên IIS và chắc chắn không phải cách nó sẽ được thiết lập cho môi trường lưu trữ chia sẻ. Tôi đã googled một chút, nhưng hầu hết các tài nguyên tôi tìm thấy đều cho rằng sysadmin 1) biết Python / Django và 2) đang sử dụng lưu trữ IIS chuyên dụng cho trang web của mình.

Ai đó có thể giải thích làm thế nào tôi có thể giải thích quy trình cho nhà cung cấp dịch vụ lưu trữ của mình hoặc cung cấp cho tôi các gợi ý về các tài nguyên chi tiết, tốt mà tôi có thể chuyển tiếp đến nhà cung cấp dịch vụ lưu trữ của mình không? Hãy nhớ rằng những người chạy hosting có thể biết "mọi thứ" về IIS, nhưng không biết làm thế nào để đối phó với Python.

Câu trả lời:


8

Nếu bạn bị mắc kẹt với việc sử dụng IIS, hãy sử dụng PyISAPIe thay vì CGI nếu bạn có thể. Dưới đây là các hướng dẫn và liên kết cho PyISAPIe. Máy chủ web của bạn sẽ biết nhiều hơn về các tiện ích mở rộng ISAPI nếu chúng quản lý IIS hơn là về Python và chúng không cần biết nhiều về Python với PyISAPIe.

MỘT CÁCH TỐT HƠN SAU KHI LÀM VIỆC NÀY SỬ DỤNG PyISAPIe, MỘT VẤN ĐỀ ISAPI . PyISAPIe nhanh hơn nhiều so với CGI trên IIS7. Điều này không giống với mod_python trên Apache. Trang chủ dự án PyISAPIe có các hướng dẫn để thiết lập Django với WSGI trên PyISAPIe. Điều này sẽ mang lại hiệu suất của bạn lên đến tốc độ hợp lý cho một trang web lưu lượng truy cập công cộng / cao.

Thiết lập Django trong IIS + Python thông qua môi trường CGI sẽ chậm kinh khủng cho bất kỳ việc sử dụng sản xuất nào. Bạn không bao giờ nên sử dụng điều này cho một trang web mà bạn mong muốn phục vụ nhiều hơn một số yêu cầu mỗi phút. Nó cũng giới hạn bạn nghiêm ngặt về những gì bạn có thể lưu vào bộ nhớ trong khung bộ nhớ đệm của Django, vì quy trình của ứng dụng Django được khởi động lại với mỗi yêu cầu mới.

Trong một máy chủ web lành mạnh như Apache, lighttpd, v.v., với mod_python, trình thông dịch Python chạy tiến trình Django vẫn còn trong bộ nhớ và được khởi tạo với mỗi luồng công nhân Apache mới xử lý nhiều yêu cầu theo thời gian. Điều này có nghĩa là Python + Django không được thoát và khởi động lại cho mỗi yêu cầu mới. Trong thiết lập FastCGI, máy chủ web (ví dụ Apache hoặc lighttpd) tạo ra một ổ cắm (miền UNIX hoặc TCP) mà nó giao tiếp với ứng dụng FastCGI (ứng dụng web Django của bạn) qua giao thức FastCGI. Ditto cho các thiết lập proxy HTTP (họ nói HTTP thay vì FastCGI). Trong môi trường CGI, trình thông dịch Python được gọi là chạy ứng dụng Django, hoàn toàn mới cho mỗi yêu cầu, vì vậy ứng dụng không thể giữ trạng thái qua các yêu cầu trong bộ nhớ và không thể lưu trữ đúng cách bất cứ nơi nào ngoài cơ sở dữ liệu.

Nếu bạn phải sử dụng IIS + CGI + Django, đây là cách để thực hiện điều kinh khủng này: Sử dụng đoạn mã sau để tạo tập lệnh CGI của riêng bạn chạy ứng dụng Django của bạn (nó dịch giữa CGI và WSGI). Bạn sẽ phải chỉnh sửa tập lệnh một chút để làm cho nó trỏ đến ứng dụng và mã Django của bạn. Đó là kịch bản CGI mà bạn sẽ cần để chuyển yêu cầu. Tiếp theo, bạn cần chuyển tiếp / viết lại tất cả các yêu cầu vào tập lệnh CGI của bạn ...

Trong IIS6, bạn sẽ cần một mod_rewrite tương đương như IISRewrite, mà tôi nghĩ là không miễn phí và là nguồn đóng. Trong IIS7, Microsoft cuối cùng đã bao gồm một mô-đun viết lại URL. Tài liệu cho nó được đặt ở đây . Hướng dẫn tạo quy tắc viết lại trong IIS7 có ở đây . Bạn sẽ muốn chuyển tiếp mọi thứ tại URL cơ sở đích để được xử lý bởi tập lệnh CGI của bạn.


Vì lưu trữ được chia sẻ, vấn đề chính là nhà cung cấp dịch vụ lưu trữ sẽ cấu hình PyISAPIe như thế nào để phù hợp với nhu cầu của tôi và cả các nhu cầu khác nhau của các khách hàng khác của họ. Tôi không thể tìm thấy các hướng dẫn để thiết lập Django với WSGI trên trang chủ ... Nếu vẫn thất bại, tôi sẽ chỉ sử dụng phương pháp CGI. Với ít hơn 400 yêu cầu mỗi tuần , tôi nghĩ chúng ta có thể sống với giải pháp CGI cho đến khi chúng ta quyết định chuyển đổi lưu trữ.
Epcylon

1

Cách thiết lập Python trên FastCGI trên IIS

Đây là cách thiết lập Python trên FastCGI IIS 7+ với cách mở đường cho một thiết lập DJango phong nha

... và có thể nối trình gỡ lỗi vào quy trình cho phép bạn chuyển qua mã Python của mình

Ví dụ này không sử dụng bảng điều khiển quản lý IIS nhưng liệt kê nội dung của tệp cấu hình kết quả

Bước 1

Cài đặt Python + trình gỡ lỗi tốt (ví dụ này sử dụng WingIDE mà tôi đã tìm thấy một công cụ tuyệt vời) Ví dụ này giả sử thư mục c: \ python27

Bước 2

Tạo một thư mục web, ví dụ: trên localhost c: \ inetpub \ wwwroot \ mypythonfolder và đặt tệp web.config sau vào đó:

Lưu ý | ký tự ống trong chỉ thị scriptProcessor. Điều này được IIS sử dụng để ánh xạ tập lệnh tới ứng dụng fastCgi (bước 3). Nó phải khớp từng ký tự theo ký tự fullpath + ký tự ống + cài đặt đối số từ bước 3 bên dưới.

Bước 3

Trong tệp apphost.config trong thư mục c: \ windows \ system32 \ inetsrc \ config đặt phần sau vào phần:

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

Bước 4

Trong c: \ python27 \ lib \ mylib \ myfcgi.py đặt mã sau đây:

import wingdbstub

nhập os, io, sys ret = "môi trường: \ r \ n" cho param trong os.envir.keys (): ret = ret + "% s =% s \ r \ n"% (param, os.envir [ param]) ret = ret + "\ r \ nArss:" for arg in sys.argv: ret = ret + arg handle = io.open ("c: \ temp \ myfcgi.log", 'wb') handle.write (ret) xử lý. Đóng ()

Bước 5

Đảm bảo IUSR có quyền ghi vào thư mục c: \ temp của bạn

Bước 6

Đặt wingdbstub.py và wingdebugpw vào thư mục c: \ python27 \ lib \ mylib \ của bạn. Điều này sẽ cho phép gỡ lỗi trong wingide. Những tập tin này được cung cấp với cài đặt cánh của bạn. Lưu ý: nếu Python cũng cần biên dịch mã của bạn thành wingstub.pyc, IUSR cần quyền ghi trên thư mục đó vì quy trình python sẽ được IIS khởi chạy trong tài khoản đó

Bước 6

Mở wingdb và đặt điểm dừng trên dòng 'nhập os, io, sys'

Bước 7

Lượt truy cập trong trình duyệt của bạn http: // localhost / mypythonfolder

Nếu mọi thứ hoạt động chính xác, bây giờ wingide sẽ được kích hoạt để hiển thị mã đang chạy ở điểm dừng của bạn. Nếu không: - hoặc có vấn đề về tường lửa. Quá trình python giao tiếp với giao diện WingIDE thông qua kết nối tcp - hoặc có vấn đề với bảo mật trong wingide. Nó cần phiên bản thích hợp của tệp wingdebugpw, về cơ bản chứa mật khẩu hoặc mã thông báo xác thực quyền truy cập đối với cài đặt wingide của bạn. Nếu đây không phải là trường hợp, bất kỳ ai có quyền truy cập tcp vào máy tính của bạn đều có thể gỡ lỗi đối với mã của bạn.

Bước 8

Xác minh rằng trong c: \ temp logfile đã được tạo. Điều này cũng sẽ hoạt động nếu bạn không thể thực hiện bước 7

Bước 9

Lưu ý rằng trang này kích hoạt trình gỡ lỗi nhưng không trả lại bất kỳ trang nào cho trình duyệt web. Một số nền tảng: máy chủ web giao tiếp với fastcgi thông qua cái gọi là 'bản ghi'. Điều này có nghĩa là mỗi yêu cầu người dùng duy nhất đi vào ứng dụng của bạn được đóng gói trong nhiều 'hồ sơ' riêng biệt. Mỗi bản ghi là một cấu trúc dữ liệu cho biết bắt đầu một yêu cầu, chuỗi truy vấn, biến bài, v.v ... Việc không đóng gói các bản ghi này cho một yêu cầu là loại cồng kềnh, nó tuân theo đặc tả fastcgi của http: //www.fastcgi .com / devkit / doc / fcgi-spec.html # S1

Vì nội dung của c: \ python27 \ lib \ mylib \ myfcgi.py Tôi vừa bỏ vào một bản sao của zoustcgi.py do helicontech cung cấp. Tệp python này có thể giải mã các bản ghi này và phục vụ một trang và khá thú vị để gỡ lỗi. Cũng lưu ý rằng helicontech tùy chọn cung cấp một dll nằm giữa IIS và zoustcgi.py nhưng dll này không thực sự cần thiết. Tôi tin rằng nó triển khai một phiên bản cải tiến và chung chung của việc triển khai fastcgi mà msft cung cấp. Tuy nhiên, khi bạn sử dụng dll của họ, khi bạn muốn chuyển qua mã của mình, quy trình được kết thúc khá kỳ quặc và IIS / DLL sẽ giết quá trình python của bạn khi kết luận không có phản hồi nào quay lại trong vòng một hoặc 2 giây.

Đó là nó. Về nguyên tắc, giao tiếp giữa IIS và mã python của bạn được thực hiện với các đường dẫn có tên. Bạn sẽ có thể thiết lập nó bằng cách sử dụng ổ cắm tcp nhưng tôi không thể tìm ra cổng nào được sử dụng (tôi tin rằng stdin nên được chuyển đổi thành cổng mà sau đó có thể được chọn () ed nhưng tôi đã không cho điều đó bất kỳ nỗ lực nào)


0

Tôi đã không thử điều này với Python, nhưng nó hoạt động tuyệt vời như một CGI với Perl. Các sản phẩm của ActiveState tích hợp dường như với IIS. Tôi đã thành công lớn với ActivePerl. Họ cũng có ActivePython mà có lẽ (có thể) cũng sẽ thực hiện thủ thuật đó. Sau đó, tôi nghĩ rằng bạn sẽ chỉ cần tải xuống Django cài đặt nó .

EDIT: Ok, vì vậy hãy tích hợp dường như vô tận với IIS ... TUY NHIÊN, đây là một bài viết về cách tích hợp vào IIS . Bạn cũng có thể coi Iron Python là bản phân phối của mình cho hộp Windows.

Đối với nhà cung cấp, tôi nghi ngờ họ cần biết nhiều hơn là một nền tảng phát triển web như ASP / ASP.NET và Python là ngôn ngữ được sử dụng để phát triển cùng với nó.

Theo như cài đặt tôi đã đề cập ở trên, tôi sẽ thử nó và xem giá vé như thế nào. Tôi sẽ đăng ghi chú lên nó nếu tôi làm cho nó hoạt động tốt!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.