คู่มือ Python Apps Specifications สำหรับ Python
คู่มือนี้เรียบเรียงสำหรับ Ruk-Com PaaS หน้าจอและตัวเลือกอาจแตกต่างตามเวอร์ชันและสิทธิ์ของบัญชี
ตรวจสอบ Environment, Region, สิทธิ์บัญชี และสำรองค่าปัจจุบันก่อนดำเนินการกับระบบจริง
คำสั่ง ชื่อเมนู พารามิเตอร์ และค่าตัวอย่างในกรอบ Code คงรูปแบบตามระบบเพื่อให้คัดลอกและตรวจสอบได้ถูกต้อง
หน้านี้อธิบายข้อกำหนดด้านแพ็กเกจและการ Deploy สำหรับแอปพลิเคชัน Python ใน Ruk-Com PaaS ใช้สารบัญด้านล่างเพื่อค้นหาข้อมูลที่คุณต้องการได้รวดเร็วยิ่งขึ้น:
การจัดการการพึ่งพา
แพลตฟอร์มจะติดตั้งการพึ่งพาโดยอัตโนมัติในระหว่างการ Deploy แต่ละครั้งสำหรับทั้งสองอาปาเช่ไพธอนและเครื่องยนต์หลาม. คุณไม่จำเป็นต้องสร้างหรือเปิดใช้งาน Environment เสมือนของโปรเจ็กต์ก่อนที่จะปรับใช้ - คอนเทนเนอร์จะมีขอบเขตการแยก
หมายเหตุ:
- มีการติดตั้งการพึ่งพาในฐานะผู้ใช้
python. - ความคืบหน้าและข้อผิดพลาดในการติดตั้งจะถูกบันทึกไว้ในบันทึกการใช้งาน (
/home/jelastic/log/deploy.log). - ที่ยูวี(
uv.lock) และpylock.tomlขณะนี้เครื่องมือ (PEP 751) ยังไม่รองรับการ Deploy อัตโนมัติจนกว่าจะดำเนินการส่งออกกrequirements.txtจากของคุณยูวีโครงการหรือใช้ไฟล์ล็อค Poetry/Pipenv
ปัจจุบันแพลตฟอร์มรองรับเครื่องมือดังต่อไปนี้:
| เครื่องมือ | สแต็ค | ทริกเกอร์การตรวจจับ | ลักษณะการติดตั้ง |
|---|---|---|---|
| บทกวี | เครื่องยนต์หลาม | poetry.lockหรือ[tool.poetry]ในpyproject.toml |
poetry install --no-interaction --no-root |
| ไปป์เพน | เครื่องยนต์หลาม | Pipfile |
pipenv install --deploy --systemถ้าPipfile.lockมีอยู่; มิฉะนั้นpipenv install --system |
| ปิ๊ป | อาปาเช่ไพธอน, เครื่องยนต์ไพธอน | requirements.txt |
python -m pip install -r requirements.txt |
บนเครื่องยนต์หลามเมื่อมีไฟล์ Manifest หลายไฟล์แพลตฟอร์มก็จะทำงานหนึ่งขั้นตอนการทำงานต่อการ Deploy ตามลำดับต่อไปนี้:
- บทกวี- ถ้า
poetry.lockมีอยู่หรือpyproject.tomlประกอบด้วย[tool.poetry] - ไปป์เพน- ถ้า
Pipfileมีอยู่จริง - ปิ๊ป- ถ้า
requirements.txtมีอยู่จริง
การจัดการแพ็คเกจด้วยตนเองผ่าน SSH (ตัวเลือก)
หากต้องการตรวจสอบหรือปรับแพ็กเกจนอกเวิร์กโฟลว์การ Deploy ให้เชื่อมต่อกับแอปพลิเคชันเซิร์ฟเวอร์ผ่านทาง SSHและใช้มาตรฐานปิ๊ปคำสั่ง:
pip install {packageName}- ติดตั้งแพ็คเกจpip uninstall {packageName}- ลบแพ็คเกจpip install --upgrade {packageName}- อัพเดตแพ็คเกจpip install -r requirements.txt- ติดตั้งแพ็คเกจจากไฟล์ข้อกำหนดpip list- แสดงรายการแพ็คเกจที่ติดตั้ง
จุดรับสมัคร
อาปาเช่ไพธอนคาดหวังจุดเข้า WSGI และรายการการพึ่งพาในไฟล์เก็บถาวรการ Deploy ของคุณ:
wsgi.py- เปิดเผยวัตถุแอปพลิเคชัน WSGI สำหรับmod_wsgirequirements.txt- แสดงรายการแพ็คเกจที่ติดตั้งด้วยปิ๊ประหว่างการใช้งาน
รวมทั้งสองไฟล์ไว้ในรูทโปรเจ็กต์ของไฟล์เก็บถาวรของคุณแพลตฟอร์มจะติดตั้งการพึ่งพาจากrequirements.txtและกำหนดเส้นทางการรับส่งข้อมูล HTTP ไปยังวัตถุแอปพลิเคชันที่กำหนดไว้wsgi.py.
เครื่องยนต์หลามใช้APP_MODULEตัวแปรเพื่อกำหนดจุดเริ่มต้นแอปพลิเคชัน:
APP_MODULE="_AUTO_"(ค่าเริ่มต้น) - ตรวจจับจุดเริ่มต้นโดยอัตโนมัติในระหว่างการ Deploy และคงอยู่/home/jelastic/pythonenv.APP_MODULE="module:attribute"(ตัวอย่างเช่น,app:appหรือmyproject.asgi:application) - ตั้งค่าจุดเริ่มต้นด้วยตนเองแพลตฟอร์มตรวจสอบว่าสามารถนำเข้าโมดูลที่ระบุได้ก่อนที่จะเริ่มบริการหากการตรวจสอบล้มเหลวบริการจะไม่เริ่มทำงานและข้อผิดพลาดจะถูกบันทึกไว้ในไฟล์บันทึก
การตรวจจับอัตโนมัติทำงานดังนี้:แพลตฟอร์มจะสแกนไดเร็กทอรีสูงสุดสามระดับด้านล่างROOT_DIR(/home/jelastic/ROOT) และเลือกจุดเริ่มต้นโดยใช้ลำดับความสำคัญของไฟล์ต่อไปนี้:app.py>main.py>application.py>server.py>api.py>asgi.py>wsgi.py. เมื่อไฟล์หลายไฟล์ที่มีชื่อเดียวกันอยู่ที่ระดับความลึกต่างกันระบบจะเลือกการจับคู่ที่ตื้นที่สุด (เช่น rootapp.pyให้ความสำคัญมากกว่าbackend/app.py).
เครื่องยนต์หลาม
ส่วนต่อไปนี้จะอธิบายลักษณะการใช้งานและรันไทม์เฉพาะสำหรับเครื่องยนต์หลามแอปพลิเคชันเซิร์ฟเวอร์
กระแสจราจรและเครือข่าย
Python Engine ใช้ Uvicorn/Gunicorn เป็นเซิร์ฟเวอร์ HTTP(S) โดยไม่มีพร็อกซีย้อนกลับในคอนเทนเนอร์แอปพลิเคชันเชื่อมโยงกับพอร์ตภายในและแพลตฟอร์มจะจัดการการส่งต่อพอร์ตผู้ใช้เข้าถึงแอปบนพอร์ตมาตรฐาน 80/443 ผ่านทาง URL Environment
| ชั้น | บทบาท |
|---|---|
| URL ของแพลตฟอร์ม | ผู้ใช้เข้าถึงแอปพลิเคชันของคุณบนพอร์ต80(HTTP) หรือ443(HTTPS) ผ่านโดเมน Environment |
| การส่งต่อพอร์ต | pythonAutoConfigกำหนดค่าnftablesกฎภายในคอนเทนเนอร์เพื่อเปลี่ยนเส้นทางการรับส่งข้อมูลแพลตฟอร์มไปPORT |
| แอปพลิเคชันเซิร์ฟเวอร์ | ยูวิคอร์นหรือกูนิคอร์นผูกติดกับHOST/PORT(ค่าเริ่มต้น0.0.0.0:8000) และจัดการคำขอ HTTP(S) |
เมื่อแพลตฟอร์ม SSL ถูกปิดใช้งาน (ค่าเริ่มต้น) พอร์ต TCP80ถูกเปลี่ยนเส้นทางไปยังแอปพลิเคชันPORT. เมื่อเปิดใช้งาน SSL ของแพลตฟอร์มพอร์ต TCP443ถูกเปลี่ยนเส้นทางไปยังแอปพลิเคชันPORT. ท่าเรือ80ยังคงพร้อมใช้งานสำหรับการตรวจสอบ Let's Encrypt HTTP
แพลตฟอร์ม SSL
คุณไม่จำเป็นต้องเพิ่มการกำหนดค่า TLS ลงในโค้ดแอปพลิเคชันของคุณสำหรับโฟลว์การโฮสต์มาตรฐาน SSL ได้รับการจัดการผ่าน UI ของแพลตฟอร์ม:
- เปิดใช้งาน SSL ผ่านทางมาเข้ารหัสส่วนเสริมกันหรืออัปโหลดใบรับรองที่กำหนดเอง
- แพลตฟอร์มจัดเตรียมใบรับรองและชุดต่างๆ
SSLEnabledใน/home/jelastic/pythonenv. - ที่
pythonengineบริการรีสตาร์ทและpythonAutoConfigสลับการส่งต่อพอร์ตจาก 80 เป็น 443 - ตัวจัดการกระบวนการเปิดใช้งาน TLS บนแอปพลิเคชันเซิร์ฟเวอร์โดยใช้ใบรับรองจาก
/var/lib/jelastic/SSL/(เส้นทางเริ่มต้น:jelastic.crt,jelastic.key,jelastic-ca.crt).
อ้างถึงโดเมนที่กำหนดเองและSSL ในตัวสำหรับรายละเอียดการจัดการใบรับรอง
ไฟล์แบบคงที่
Python Engine ไม่มีเว็บเซิร์ฟเวอร์ไฟล์คงที่โดยเฉพาะสินทรัพย์คงที่ให้บริการโดยแอปพลิเคชันเซิร์ฟเวอร์ (ยูวิคอร์น/กูนิคอร์น) หรือโดยมิดเดิลแวร์ของเฟรมเวิร์กตัวอย่างเช่น:
- จังโก้ -
collectstaticกับไวท์นอยส์หรือมิดเดิลแวร์ที่คล้ายกัน - FastAPI / สตาร์เล็ต -
StaticFilesมิดเดิลแวร์ - Flask - การจัดการไฟล์คงที่หรือส่วนขยายในตัว
สำหรับการจัดส่งแบบคงที่ที่มีการรับส่งข้อมูลสูงให้พิจารณาให้บริการสินทรัพย์จาก CDN หรือพื้นที่จัดเก็บอ็อบเจ็กต์โดยเพิ่มโหลดบาลานเซอร์กับโทโพโลยี Environment หรือการใช้งานอาปาเช่ไพธอนเมื่อเป็นคนพื้นเมืองอาปาเช่แนะนำให้ใช้การแสดงไฟล์แบบคงที่
ตัวแปรเครื่องยนต์หลาม
ต่อไปนี้ตัวแปรคอนเทนเนอร์ควบคุมพฤติกรรมเซิร์ฟเวอร์ Python Engine (ดูทั้งหมดตัวแปร Environment เริ่มต้น):
| ตัวแปร | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|
| APP_MODULE | _AUTO_ |
ตั้งค่าจุดเริ่มต้นแอปพลิเคชันในmodule:attributeรูปแบบ (_AUTO_เพื่อการตรวจจับอัตโนมัติ) |
| ท่าเรือ | 8000 |
พอร์ตผูกภายในการรับส่งข้อมูลแพลตฟอร์มบนพอร์ต80(หรือ443เมื่อเปิดใช้งาน SSL) จะถูกเปลี่ยนเส้นทางไปยังพอร์ตนี้ |
| กระบวนการ_ผู้จัดการ | uvicorn |
ตั้งค่าตัวจัดการกระบวนการ:ยูวิคอร์นหรือกุนิคอร์น |
| คนงาน | nproc |
ตั้งค่าจำนวนกระบวนการของผู้ปฏิบัติงาน (nprocให้เท่ากับจำนวนซีพียู) |
หากจำเป็นคุณสามารถปรับตัวแปรเหล่านี้และรีสตาร์ทคอนเทนเนอร์เพื่อใช้การเปลี่ยนแปลงได้
