รหัส 500 หมาย500 Internal Server Errorถึงการร้องขอฝั่งเซิร์ฟเวอร์ล้มเหลว แต่ไม่ได้ระบุว่าส่วนประกอบใดล้มเหลว สำหรับแดชบอร์ด Greenlight ของ BigBlueButton ให้เริ่มต้นด้วยการค้นหาการร้องขอที่ล้มเหลวในบันทึกแอปพลิเคชัน Greenlight คู่มือการแก้ไขปัญหาของ BigBlueButton ระบุว่ารหัส 500 มักเป็นข้อผิดพลาดของ Greenlight ข้อยกเว้นนี้มีประโยชน์: หากมีเพียงบางเครื่องในเครือข่ายท้องถิ่นที่เห็น และบันทึกรายงานว่า "ข้อผิดพลาดโฮสต์ที่ไม่ปลอดภัย" การตั้งค่าพร็อกซีของเบราว์เซอร์อาจเกี่ยวข้องด้วย
Greenlight v3 เป็นเวอร์ชันปัจจุบันที่มีการบันทึกไว้ในเอกสาร และใช้รูปแบบการติดตั้งที่แตกต่างจาก v2 รุ่นเก่า คู่มือนี้จะช่วยคุณระบุเวอร์ชัน รวบรวมหลักฐานที่ถูกต้อง และตรวจสอบสาเหตุทั่วไปตามลำดับที่ปลอดภัย โดยสมมติว่าเป็นการติดตั้ง Greenlight บน Docker ใช้คำสั่งในฐานะผู้ดูแลระบบเซิร์ฟเวอร์ และปรับเปลี่ยนชื่อและเส้นทางของคอนเทนเนอร์หากการติดตั้งของคุณแตกต่างออกไป
ทำความเข้าใจว่าส่วนประกอบใดที่ส่งค่า 500 กลับมา
Greenlight คือแอปพลิเคชันบนเว็บที่ใช้ในการลงชื่อเข้าใช้ จัดการห้องประชุม และเริ่มการประชุม BigBlueButton พร็อกซีแบบย้อนกลับเช่น Nginx จะรับคำขอจากเบราว์เซอร์และส่งต่อไปยัง Greenlight จากนั้น Greenlight จะสื่อสารกับ API ของ BigBlueButton และอาศัยบริการต่างๆ เช่น PostgreSQL และ Redis ข้อผิดพลาด 500 อาจเกิดจาก Greenlight พร็อกซี หรือส่วนประกอบอื่นๆ การรีสตาร์ทบริการมีเดียของ BigBlueButton จะไม่แก้ไขข้อผิดพลาดของฐานข้อมูลหรือแอปพลิเคชัน
ขั้นแรก ให้สังเกตว่าการกระทำใดทำให้เกิดข้อผิดพลาด: การเปิดแดชบอร์ด การลงชื่อเข้าใช้ การโหลดรายชื่อห้อง หรือการเริ่มการประชุม บันทึกเส้นทาง URL เวลาโดยประมาณ ว่าผู้ใช้ทุกคนได้รับผลกระทบหรือไม่ และการเปลี่ยนแปลงล่าสุดใดๆ เช่น การอัปเกรด การแก้ไข DNS การเปลี่ยนพร็อกซี หรือการหมุนเวียนข้อมูลประจำตัว หากหน้าแรกโหลดได้ แต่การกระทำเพียงอย่างเดียวส่งคืนรหัส 500 นั่นจะช่วยจำกัดขอบเขตของคำขอที่ต้องตรวจสอบได้
เตรียมการให้พร้อมก่อนเปลี่ยนแปลงสิ่งใดๆ
- ตรวจสอบว่าอิมเมจนั้นเป็น
bigbluebutton/greenlight:v3อิมเมจเวอร์ชัน 2 หรือเวอร์ชันที่สร้างขึ้นเอง ห้ามนำคำแนะนำสำหรับเวอร์ชัน 2 ไปใช้กับเวอร์ชัน 3
- เก็บสำเนาไฟล์ Docker Compose และไฟล์สภาพแวดล้อมที่เกี่ยวข้องไว้ในที่ปลอดภัยก่อนทำการแก้ไข เนื่องจากไฟล์เหล่านั้นมีข้อมูลประจำตัวอยู่
- บันทึกเวลาที่เกิดข้อผิดพลาดและตรวจสอบเฉพาะช่วงเวลาบันทึกสั้นๆ รอบๆ เวลาดังกล่าวเท่านั้น ลบข้อมูลรหัสผ่าน โทเค็นการเข้าถึง รหัสลับ API ที่อยู่อีเมล และลิงก์การประชุมส่วนตัว ก่อนที่จะแชร์บันทึก
- ห้ามเรียกใช้คำสั่ง
docker compose down -vลบไดรฟ์ฐานข้อมูล หรือลบพื้นที่จัดเก็บข้อมูล Greenlight เพื่อ "รีเซ็ต" แดชบอร์ด การกระทำเหล่านั้นอาจทำลายบัญชี การตั้งค่า หรือไฟล์ที่อัปโหลดไว้ได้
ขั้นตอนที่ 1: ตรวจสอบคอนเทนเนอร์ที่กำลังทำงานอยู่และบันทึกข้อผิดพลาด
บนโฮสต์ Docker ให้แสดงรายการคอนเทนเนอร์ที่เกี่ยวข้องกับ Greenlight รวมถึงอิมเมจและสถานะของคอนเทนเนอร์เหล่านั้น:
sudo docker ps -a --filter name=greenlight \
--format 'table {{.Names}}\t{{.Image}}\t{{.Status}}'
สำหรับการติดตั้ง Greenlight v3 มาตรฐาน คอนเทนเนอร์แอปพลิเคชันมักจะมีชื่อว่าgreenlight-v3. โปรดอ่านข้อความแสดงผลล่าสุดในช่วงเวลาที่เกิดข้อผิดพลาด:
sudo docker logs --since=15m --tail=200 greenlight-v3
หากการติดตั้งของคุณใช้ Compose ให้รันคำสั่งdocker compose psจากdocker compose logs --since=15m --tail=200ไดเร็กทอรีที่มีไฟล์ Compose อยู่ การติดตั้ง BigBlueButton อาจเก็บไฟล์ v3 ไว้ใน~/greenlight-v3; การติดตั้งแบบสแตนด์อโลนอาจแตกต่างกันไป ใช้ตำแหน่งจริงและชื่อคอนเทนเนอร์ที่โฮสต์ของคุณรายงาน สำหรับการติดตั้ง v2 รุ่นเก่า ให้ตรวจสอบบันทึก Rails ที่เมานต์ไว้ ซึ่งโดยทั่วไปจะlog/production.logอยู่ในไดเร็กทอรีการติดตั้ง Greenlight หรือตรวจสอบ/usr/src/app/log/production.logในคอนเทนเนอร์หากไม่ได้เมานต์ไว้
ให้มองหาข้อผิดพลาดแรกที่เกิดขึ้นในขณะที่คำขอไม่สำเร็จ ไม่ใช่แค่การตอบสนอง 500 ครั้งสุดท้าย ข้อผิดพลาดในการเชื่อมต่อฐานข้อมูล ข้อผิดพลาดของ Redis ความล้มเหลวในการร้องขอ API ข้อผิดพลาดในการตรวจสอบใบรับรอง และข้อผิดพลาดของ Rails ชี้ไปยังวิธีแก้ไขที่แตกต่างกัน หากคอนเทนเนอร์หยุดทำงานแล้ว บันทึกของคอนเทนเนอร์อาจยังคงมีอยู่ผ่านทางdocker logs.
ขั้นตอนที่ 2: ตรวจสอบการเชื่อมต่อของ Greenlight กับ BigBlueButton
หากแดชบอร์ดล้มเหลวขณะโหลดห้องหรือเริ่มการประชุม ให้ตรวจสอบ URL ของ BigBlueButton และรหัสลับที่ Greenlight ใช้ สำหรับเวอร์ชัน 3 ไฟล์สภาพแวดล้อมจะรวมBIGBLUEBUTTON_ENDPOINTและ ไว้ BIGBLUEBUTTON_SECRETด้วย ปลายทางต้องเป็น URL API สำหรับการใช้งานของคุณ ไม่ใช่โฮสต์ที่คาดเดาหรือ URL การประชุมในเบราว์เซอร์เท่านั้น หากคุณใช้ตัวจัดการโหลด เช่น Scalelite ให้ใช้ปลายทางและข้อมูลรับรองที่ให้ไว้สำหรับการตั้งค่าดังกล่าว
บนเซิร์ฟเวอร์ BigBlueButton จะsudo bbb-conf --secretแสดง URL และรหัสลับที่กำหนดค่าไว้ เปรียบเทียบค่าเหล่านี้แบบส่วนตัวกับค่าของ Greenlight อย่าคัดลอกรหัสลับไปวางในตั๋ว ข้อความโต้ตอบแบบทันที หรือแชทสาธารณะ รหัสลับที่ล้าสมัยหลังจากติดตั้งใหม่หรือหมุนเวียนข้อมูลรับรองอาจทำให้การเรียกใช้ API ล้มเหลวแม้ว่าคอนเทนเนอร์แดชบอร์ดจะทำงานได้ตามปกติก็ตาม
นอกจากนี้ ให้รันคำsudo bbb-conf --checkสั่งนี้บนโฮสต์ BigBlueButton ด้วย คำสั่งนี้จะตรวจสอบบริการของ BigBlueButton และปัญหาการกำหนดค่าทั่วไป แต่ไม่ได้ทดแทนการตรวจสอบบันทึกของ Greenlight หาก Greenlight อยู่บนโฮสต์แบบสแตนด์อโลนแยกต่างหาก คำสั่งนี้ควรอยู่บนเซิร์ฟเวอร์ BBB ที่bbb-confติดตั้ง Greenlight ไว้
ขั้นตอนที่ 3: ตรวจสอบฐานข้อมูล, Redis และการอัปเกรดล่าสุด
สภาพแวดล้อมตัวอย่างของ Greenlight v3 กำหนดการเชื่อมต่อฐานข้อมูลและแคชด้วยDATABASE_URL` REDIS_URLpostgreSQL` และ `redis` โปรดตรวจสอบให้แน่ใจว่าคอนเทนเนอร์ PostgreSQL และ Redis ทำงานอยู่ และค่าต่างๆ ในสภาพแวดล้อมแอปพลิเคชันตรงกับชื่อบริการ พอร์ต ชื่อฐานข้อมูล และข้อมูลรับรองของ Compose คอนเทนเนอร์ Greenlight ที่ดูเหมือนจะทำงานได้ดีก็อาจส่งคืนรหัสข้อผิดพลาด 500 ได้หากไม่สามารถเชื่อมต่อกับส่วนประกอบที่จำเป็นอย่างใดอย่างหนึ่งได้
หากข้อผิดพลาดเริ่มเกิดขึ้นหลังจากอัปเกรด ให้เปรียบเทียบแท็กรูปภาพที่ใช้งาน ไฟล์ Compose และไฟล์สภาพแวดล้อมกับขั้นตอนการเผยแพร่ที่คุณปฏิบัติตาม หลีกเลี่ยงการดึงรูปภาพที่ไม่ถูกต้องหรือการเปลี่ยนแปลงโครงสร้างฐานข้อมูลด้วยตนเองในขณะที่กำลังวินิจฉัยปัญหาในระบบการผลิต สำรองข้อมูลฐานข้อมูลก่อน จากนั้นใช้กระบวนการอัปเกรด Greenlight ที่ระบุไว้ในเอกสารสำหรับการติดตั้งของคุณ ตรวจสอบพื้นที่ดิสก์ด้วย: พื้นที่เต็มอาจขัดขวางการเขียนข้อมูลลง PostgreSQL การเขียนบันทึก หรือการอัปเดตพื้นที่จัดเก็บสินทรัพย์
ขั้นตอนที่ 4: ตรวจสอบการตั้งค่าพร็อกซี ชื่อโฮสต์ และพาธย่อย
หากข้อผิดพลาดปรากฏขึ้นเฉพาะเมื่อใช้ชื่อโฮสต์สาธารณะ ให้ตรวจสอบเส้นทางจากเบราว์เซอร์ผ่านพร็อกซีแบบย้อนกลับไปยัง Greenlight ยืนยันว่าพร็อกซีส่งต่อไปยังพอร์ตภายในที่ถูกต้องและรักษาส่วนหัวของโฮสต์และโปรโตคอลที่คาดหวังไว้ ทดสอบการกำหนดค่าพร็อกซี ก่อนที่จะรีโหลด Nginx ด้วยคำสั่ง `npm run run nginx` sudo nginx -tจากนั้นตรวจสอบบันทึกข้อผิดพลาดของพร็อกซีที่เวลาตรงกัน
Greenlight v3 คาดว่าจะทำงานที่พาธรากโดยค่าเริ่มต้น หากเผยแพร่ภายใต้พาธเช่น ` /gl/etc/ RELATIVE_URL_ROOTgreenlight.com/` กฎของ Greenlight และ reverse-proxy ต้องตรงกัน คู่มือการติดตั้งอย่างเป็นทางการระบุว่าการเปลี่ยนแปลง URL รากแบบสัมพัทธ์จำเป็นต้องมีการอัปเกรด/กำหนดค่าใหม่ผ่านขั้นตอนการติดตั้ง การตั้งค่าตัวแปรเชลล์เพียงอย่างเดียวไม่สามารถแก้ไขการปรับใช้ที่มีอยู่ซึ่งไม่ตรงกันได้ ความไม่ตรงกันมักทำให้เกิดการเปลี่ยนเส้นทางหรือไฟล์ต่างๆ ที่เสียหาย แต่คำขอพร็อกซีที่ล้มเหลวอาจแสดงให้เห็นถึงข้อผิดพลาดของแอปพลิเคชัน
BigBlueButton ได้บันทึกกรณีเฉพาะของเครือข่าย LAN ไว้ว่า: หากมีเพียงบางเครื่องที่อยู่หลังพร็อกซีเท่านั้นที่ได้รับError::Unsafe Host Errorข้อผิดพลาด 500 และบันทึก Greenlight มีข้อความดังกล่าว ให้ตรวจสอบว่า Windows ถูกตั้งค่าให้ข้ามพร็อกซีสำหรับที่อยู่ภายในเครือข่ายหรือไม่ นี่เป็นปัญหาเกี่ยวกับเส้นทางเครือข่ายของไคลเอ็นต์ ไม่ใช่เหตุผลที่จะปิดใช้งานการตรวจสอบโฮสต์ทั่วโลก
ขั้นตอนที่ 5: ตรวจสอบการเปลี่ยนแปลงการยืนยันตัวตนและอีเมล
หากเกิดข้อผิดพลาด 500 ระหว่างการเข้าสู่ระบบ ให้ตรวจสอบการเปลี่ยนแปลงล่าสุดในการตั้งค่า OpenID Connect, URL การเรียกกลับ หรือผู้ให้บริการข้อมูลประจำตัว Greenlight v3 ใช้ค่าต่างๆ เช่นOPENID_CONNECT_ISSUER, OPENID_CONNECT_CLIENT_ID, และOPENID_CONNECT_REDIRECTเมื่อมีการกำหนดค่าการตรวจสอบสิทธิ์ภายนอก ตรวจสอบให้แน่ใจว่า URL การเปลี่ยนเส้นทางตรงกับ URL สาธารณะของ Greenlight รวมถึงเส้นทางย่อยที่กำหนดค่าไว้ และตรวจสอบบันทึกของทั้ง Greenlight และผู้ให้บริการข้อมูลประจำตัวเพื่อหาเวลาเดียวกัน
เอกสารประกอบเวอร์ชัน 3 ของ Greenlight ระบุว่าจำเป็นต้องใช้อีเมลสำหรับฟีเจอร์พื้นฐานของแพลตฟอร์ม หากแดชบอร์ดล้มเหลวระหว่างการเชิญ การลงทะเบียน การรีเซ็ตรหัสผ่าน หรือการดำเนินการทางอีเมลอื่นๆ โปรดตรวจสอบการเชื่อมต่อ SMTP และข้อมูลรับรอง การตั้งค่า TLS และบันทึกแอปพลิเคชัน โปรดเก็บรักษาข้อมูลลับ SMTP ไว้เป็นความลับ ความล้มเหลวที่จำกัดเฉพาะการดำเนินการที่เกี่ยวข้องกับอีเมลเป็นเบาะแสให้ตรวจสอบการกำหนดค่าอีเมลก่อนที่จะเปลี่ยนข้อมูลรับรอง API ของ BigBlueButton
เริ่มใหม่อีกครั้งหลังจากระบุสาเหตุที่น่าจะเป็นไปได้แล้วเท่านั้น
เมื่อคุณแก้ไขปัญหาเกี่ยวกับสภาพแวดล้อมหรือพร็อกซีที่ได้รับการยืนยันแล้ว ให้รีสตาร์ทบริการ Greenlight ที่ได้รับผลกระทบโดยใช้ไฟล์ Compose สำหรับการติดตั้งนั้น ตัวอย่างเช่น จากไดเร็กทอรีการติดตั้ง v3:
cd ~/greenlight-v3
sudo docker compose ps
sudo docker compose restart greenlight-v3
ชื่อบริการ Compose อาจแตกต่างจากชื่อคอนเทนเนอร์ หากคำสั่งรีสตาร์ทระบุว่าไม่รู้จักบริการ ให้ตรวจสอบdocker compose config --servicesและรีสตาร์ทบริการ Greenlight ที่แสดงอยู่ หรือใช้คำสั่งอัปเดตที่ระบุไว้ในเอกสารของการปรับใช้ หลีกเลี่ยงการรีสตาร์ท PostgreSQL หรือการลบวอลุ่ม เว้นแต่ว่าบันทึกจะแสดงปัญหาการพึ่งพา และคุณมีแผนการกู้คืน
ตรวจสอบการแก้ไขและรู้ว่าเมื่อใดควรแจ้งปัญหาไปยังผู้ที่เกี่ยวข้อง
ทำซ้ำขั้นตอนที่เคยล้มเหลวอีกครั้ง จากนั้นตรวจสอบการตอบสนองในเบราว์เซอร์และบันทึก Greenlight ที่เวลาใหม่ ยืนยันว่าผู้ใช้สามารถโหลดแดชบอร์ดได้ และหากความล้มเหลวเดิมเกี่ยวข้องกับการประชุม ให้เริ่มการประชุมทดสอบ หากbbb-conf --checkผ่าน แต่แอปพลิเคชันยังคงส่งคืนรหัส 500 แสดงว่าปัญหาอาจอยู่ที่ Greenlight, ส่วนประกอบที่เกี่ยวข้อง หรือพร็อกซี
หากปัญหายังไม่ได้รับการแก้ไข โปรดระบุเวอร์ชัน Greenlight หรือแท็กรูปภาพ ประเภทการปรับใช้ เส้นทาง URL ที่ได้รับผลกระทบ เวลาที่เกิดความล้มเหลว ข้อยกเว้นที่เกี่ยวข้อง (ที่ถูกปกปิดข้อมูลบางส่วน) สถานะคอนเทนเนอร์ และการเปลี่ยนแปลงล่าสุด ห้ามแชร์ไฟล์สภาพแวดล้อมทั้งหมด ข้อมูลลับ API รหัสผ่านฐานข้อมูล คุกกี้เซสชันผู้ใช้ หรือบันทึกที่ไม่ถูกปกปิดข้อมูล
โปรด ใช้คู่มือการแก้ไขปัญหาของ BigBlueButtonสำหรับการตีความอย่างเป็นทางการของข้อผิดพลาด 500 และเอกสารการติดตั้งและการกำหนดค่า Greenlight v3 สำหรับรูปแบบการใช้งาน v3 ในปัจจุบัน ไฟล์สภาพแวดล้อมตัวอย่างของ Greenlight v3 ในโครงการจะแสดงรายการตัวแปรสภาพแวดล้อมที่รองรับ Greenlight v2 และ v3 มีความแตกต่างกัน ดังนั้นโปรดใช้เอกสารที่ตรงกับเวอร์ชันที่คุณใช้งานอยู่