แรงบันดาลใจจากเครื่องมือค้นหา Bunnylol ของ Facebook เวอร์ชันที่เปิดอยู่ใน GitHub นั้นค่อนข้างเก่าและมีการพึ่งพาเก่าบางอย่างดังนั้นฉันคิดว่ามันจะง่ายกว่าที่จะเขียนแบบที่ทันสมัยกว่านี้ อันนี้ยังคงค่อนข้างธรรมดาและมีแนวโน้มที่จะมีช่องโหว่ความปลอดภัยที่ฉันจะพบในภายหลัง แค่อยากจะเอาบางสิ่งบางอย่างออกจากพื้นและฉันจะเพิ่มคุณสมบัติเพิ่มเติมที่อนุญาต
เยี่ยมชมลิงค์เพื่อตั้งค่าโดยใช้เวอร์ชันนี้ที่ฉันกำลังโฮสต์
รายการคำสั่งที่รองรับในปัจจุบัน
g [insert query] ค้นหา Googlep [insert class number] ทำการค้นหา Piazza, Kinda เป็นส่วนตัวเพียงสำหรับแจ็คฮ่า ๆfb [insert query] การค้นหาบน Facebook ค่าเริ่มต้นในหน้าแรก FBcpp [insert query] ค้นหาคำศัพท์ Syntactical CPP บน cppreference.comw [insert query] การค้นหา Wikipedia, ค่าเริ่มต้นในหน้า Wikipedia ภาษาอังกฤษyt [insert query] ทำการค้นหา YouTube หากไม่ผ่านการสอบถามค่าเริ่มต้นไปยังหน้าแรกของ YouTubegm [insert number from 0-n where n = number of gmail accounts - 1] เปิด Gmail หากไม่มีข้อโต้แย้งเฉพาะจะเปิดบัญชีแรก สามารถเปิดบัญชีทางเลือกที่มีอาร์กิวเมนต์help ส่งคืนรายการคำสั่งที่ใช้งานได้ ฉันคิดว่าการขยายสิ่งนี้ค่อนข้างใช้งานง่ายในตอนนี้ เพียงเพิ่มวิธีการใหม่ในคลาสคำสั่ง มันอาจจะทำให้เกิดความสับสนเล็กน้อยทำให้ทุกอย่างเกิดขึ้นในไฟล์ jack_bunny.py ฉันอาจจะเป็นโมดูลนี้ในภายหลังเมื่อฉันมีเวลา
ฉันโฮสต์สิ่งนี้บนเซิร์ฟเวอร์ Amazon EC2 ที่กำหนดค่าด้วย Nginx และ Gunicorn ดังนั้นฉันจะเดินผ่านขั้นตอนที่ฉันทำ
ขั้นตอนแรกคือโคลน repo นี้บนเซิร์ฟเวอร์ที่คุณต้องการเรียกใช้และดาวน์โหลดการอ้างอิงทั้งหมด สิ่งเหล่านี้ควรอยู่ในไฟล์ requirements.txt ดังนั้นบางอย่างเช่น pip3 install -r /path/to/requirements.txt ควรทำงาน หากคุณพบปัญหาใด ๆ ห้องสมุด Python เพียงอย่างเดียวที่ใช้จริงๆคือ flask และ wikipedia ดังนั้นการดาวน์โหลดสิ่งเหล่านั้นควรแก้ไขปัญหาใด ๆ
มีแพ็คเกจเพิ่มเติมที่คุณต้องโฮสต์นี้ ครั้งแรกคือ nginx ในการติดตั้งสิ่งนี้คุณสามารถใช้ sudo apt-get install nginx เราจะต้องติดตั้ง gunicorn และทำสิ่งนี้คุณสามารถใช้ pip3 install gunicorn
แนวคิดที่อยู่เบื้องหลังคือเราจะใช้ gunicorn เพื่อเรียกใช้สิ่งนี้ในสถานที่ท้องถิ่นในพอร์ตที่ไม่ได้ใช้ จากนั้นเราจะใช้ nginx เป็นพร็อกซีย้อนกลับเพื่อที่จะส่งคำขอที่ได้รับไปยัง gunicorn และจากนั้น gunicorn จะให้บริการสิ่งนั้นกับ nginx ซึ่งจะมอบให้กับผู้ใช้
แล้วเราจะทำอย่างไร?
ก่อนอื่นเราต้องการให้ gunicorn วิ่ง คำสั่งที่จะเรียกใช้คือ gunicorn jack_bunny:app -p jack_bunny.pid -D ในคำสั่งนี้ jack_bunny แสดงชื่อไฟล์โดยไม่มี .py และ app แสดงถึงแอพ Flask เราเพิ่มแท็ก -D เพื่อให้สิ่งนี้จะทำงานในพื้นหลังแม้ว่าเราจะปิด -p jack_bunny.pid บันทึก process_id ไปยังไฟล์นี้ดังนั้นหากคุณต้องการฆ่ากระบวนการนี้คุณสามารถฆ่า -9 ได้
ตอนนี้เราแค่ต้องตั้งค่า nginx เพราะนี่ยังคงใช้งานได้ในพื้นที่เท่านั้น
ฉันสร้างไฟล์กำหนดค่าใหม่นี้เป็นครั้งแรกที่ /etc/nginx/sites-available/jack_bunny
# /etc/nginx/sites-available/jack_bunny
# Redirect www.[insert server name].com to [insert server name].com
server {
server_name www.[insert server name].com;
rewrite ^ http://[insert server name].com/ permanent;
}
# Handle requests to [insert server name].com on port 80
server {
listen 80;
server_name [insert server name].com;
# Handle all locations
location / {
# Pass the request to Gunicorn
proxy_pass http://127.0.0.1:8000;
# Set some HTTP headers so that our app knows where the
# request really came from
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
จากนั้นฉันก็สร้าง Symlink ที่นี่
$ sudo ln -s
/etc/nginx/sites-available/jack_bunny
/etc/nginx/sites-enabled/jack_bunny
หลังจากรีสตาร์ท nginx คุณควรจะไปได้ดี!
หากคุณพบปัญหาการกำหนดค่า nginx ให้ตรวจสอบบันทึกข้อผิดพลาดเพื่อดูว่าจะเกิดอะไรขึ้น สิ่งหนึ่งที่ฉันพบคือชื่อเซิร์ฟเวอร์ของฉันยาวเกินไปและสิ่งนี้ทำให้ฉันมีข้อผิดพลาดชื่อแฮชเซิร์ฟเวอร์ ฉันแก้ไขปัญหานี้โดยการเพิ่ม line server_names_hash_bucket_size 128; ไปยังไฟล์กำหนดค่า nginx ของฉันที่นี่ /etc/nginx/nginx.conf
มีหลายวิธีในการปรับใช้แอพ Flask บนเซิร์ฟเวอร์ดังนั้น Oyou ไม่จำเป็นต้องทำเช่นนี้ ฉันเพิ่งพบว่านี่เป็นวิธีที่เร็วที่สุด สำหรับการอ้างอิงนี่คือคำแนะนำที่ฉันติดตามมันค่อนข้างละเอียด