วิธีทำให้ Python ทำงานร่วมกับ Lighttpd ได้อย่างไร


25

ฉันได้ติดตั้ง Lighttpd ใน Raspberry Pi แล้ว แต่ฉันต้องการรับรหัสฝั่งเซิร์ฟเวอร์ใช้งานได้แล้ว ฉันคุ้นเคยกับ PHP แต่ฉันคิดว่าฉันควรลอง Python เพราะมันควรจะเป็นภาษา "go to" สำหรับ Raspberry Pi ฉันจะรับ Python จัดการโค้ดฝั่งเซิร์ฟเวอร์ผ่าน Lighttpd ได้อย่างไร


penzilla.net/tutorials/python/cgiลิงก์เสีย แต่ขอบคุณสำหรับการเขียนที่ยอดเยี่ยม Pi ของฉันมาถึงในวันพรุ่งนี้!

คำตอบ:


16

สิ่งที่คุณต้องการคือ CGI รองรับ lighttpd

เปิดไฟล์การกำหนดค่า lighttpd ( /etc/lighttpd/lighttpd.conf ) และยกเลิกการใส่เครื่องหมายบรรทัด "mod_cgi" (ลบ # ออกจากจุดเริ่มต้นของบรรทัดหากมี) หรือเพิ่มบรรทัดนี้หากไม่มีอยู่

server.modules = (
            "mod_access",
            "mod_alias",
            "mod_accesslog",
            "mod_auth",
            "mod_ssi",
            "mod_cgi",
            "mod_compress",
            "mod_fastcgi",
            "mod_rewrite",
            "mod_magnet",
)

เพิ่มสิ่งต่อไปนี้ไปที่ด้านล่างของไฟล์:

$HTTP["url"] =~ "^/cgi-bin/" {
        cgi.assign = ( ".py" => "/usr/bin/python" )
}

รีสตาร์ท lighttpd daemon:

sudo service lighttpd force-reload

จากนั้นสร้างไดเรกทอรีcgi-binภายใต้ไดเรกทอรีรากของเว็บเซิร์ฟเวอร์ของคุณ ไฟล์ใด ๆ ที่ลงท้ายด้วย. py ในไดเรกทอรีนี้จะถูกประมวลผลโดย Python

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

ถ้าในขณะที่คุณค่อนข้างจะใช้กรอบการจัดการบางส่วนของรายละเอียดในระดับต่ำและปรับปรุงประสิทธิภาพการผลิตพัฒนาผมขอแนะนำให้ตรวจสอบจากweb.py คุณสามารถติดตั้งโดยใช้ apt:

sudo apt-get install python-webpy

Lucas ที่บล็อก Cloud 101 ได้โพสต์บทช่วยสอนที่ยอดเยี่ยมเกี่ยวกับการเขียนหน้าเว็บโดยใช้เฟรมเวิร์กของ webpy


FastCGI หรือ CGI นี้หรือไม่
ทำเครื่องหมายอินแกรม

โปรดทราบว่า CGI ธรรมดาต้องการการเริ่มต้นตัวแปลหลามสำหรับทุกคำขอดังนั้นจึงเหมาะสำหรับคำขอเป็นครั้งคราวเท่านั้น
Thorbjørn Ravn Andersen

อนิจจานี่ใช้งานได้เพียงบางส่วนเท่านั้น ตอนนี้ฉันสามารถเรียกใช้ไพ ธ อนได้ด้วยการเรียก "http: // (IP) /cgi-bin/test.py?parameter=xxx" แต่ไม่ใช่ "http: // (IP) /cgi-bin/test.cgi?parameter=xxx "- ในภายหลังให้ข้อผิดพลาด 404 ...
576i

@ 576i ลองเปลี่ยนบรรทัดนี้ cgi.assign = (".py" => "/ usr / bin / python") เป็น cgi.assign = (".cgi" => "/ usr / bin / python")
Steve Robillard

1
@ 576i แทนที่จะทำการอภิปรายต่อไปในความคิดเห็นของคำถามอื่นโปรดเปิดคำถามใหม่และรวมสิ่งที่ใช้ได้และสิ่งที่คุณได้ลองแล้ว ฉันจะลบความคิดเห็นเหล่านี้ BTW ด้วยเหตุผลใดทำไมคุณไม่สามารถไปกับนามสกุล. py ซึ่งคุณบอกว่าใช้งานได้
Steve Robillard

3

คำตอบที่ยอมรับไม่ได้ผลสำหรับฉันและมันก็ไม่สนใจแพ็คเกจที่กำหนดค่าไว้ล่วงหน้าที่มีอยู่ใน Lighttpd

วิธีที่ถูกต้องในการติดตั้ง Python บน Lighttpd สำหรับ Raspberry คือ:

ก่อนเปิดใช้งาน cgi โดย

sudo lighttpd-enable-mod cgi

สิ่งนี้จะสร้างไฟล์การกำหนดค่าใหม่สำหรับ Lighttpd:

/etc/lighttpd/conf-enabled/10-cgi.conf

แก้ไขไฟล์กำหนดค่าnano /etc/lighttpd/conf-enabled/10-cgi.confเพื่อให้ดูเหมือนกับสิ่งนี้

server.modules += ( "mod_cgi" )

$HTTP["url"] =~ "^/cgi-bin/" {
        alias.url += ( "/cgi-bin/" => "/var/www/cgi-bin" )
        cgi.assign = (
                ".py"  => "/usr/bin/python",
        )
}

ตรวจสอบให้แน่ใจว่าติดตั้ง python 2 โดยการดำเนินการ:

/usr/bin/python --version

ตอนนี้เริ่มต้นใหม่

sudo /etc/init.d/lighttpd force-reload

โชคดี!

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