หาก Nextcloud แสดงคำเตือนว่าไม่ได้กำหนดค่าการล็อกไฟล์แบบทำธุรกรรม หรือถูกปิดใช้งาน การดำเนินการกับไฟล์อาจได้รับการปกป้องน้อยลงจากการเขียนพร้อมกันและการถ่ายโอนที่ถูกขัดจังหวะ วิธีแก้ไขโดยทั่วไปคือการกำหนดค่าที่เก็บข้อมูลแบบคีย์-ค่าที่รองรับ เช่น Redis หรือ Valkey สำหรับการล็อก ก่อนอื่นให้ระบุวิธีการติดตั้ง Nextcloud จากนั้นกำหนดค่าบริการแคชและ Nextcloud พร้อมกัน การติดตั้ง Redis เพียงอย่างเดียวจะไม่ช่วยแก้คำเตือนนี้
คู่มือการดูแลระบบปัจจุบันของ Nextcloud ระบุว่าการล็อกธุรกรรมใช้ฐานข้อมูลเป็นค่าเริ่มต้น การใช้ฐานข้อมูลเป็นแบ็กเอนด์นั้นเป็นไปได้ แต่จะเพิ่มภาระให้กับฐานข้อมูล Redis หรือ Valkey สามารถให้บริการแบ็กเอนด์สำหรับการล็อกโดยเฉพาะได้ ข้อความเตือนที่แน่นอนจะแตกต่างกันไปตามเวอร์ชันของ Nextcloud: เอกสารปัจจุบันระบุว่า “การล็อกไฟล์ธุรกรรมถูกปิดใช้งาน ซึ่งอาจนำไปสู่ปัญหาเกี่ยวกับสภาวะการแข่งขัน” คำเตือนเกี่ยวกับแคชหน่วยความจำแยกต่างหากนั้นไม่ใช่ปัญหาเดียวกัน โปรดดูคู่มือการล็อกไฟล์ธุรกรรม อย่างเป็นทางการ และข้อมูลอ้างอิงคำเตือนในหน้าผู้ดูแลระบบ
ก่อนที่คุณจะเปลี่ยนเซิร์ฟเวอร์
ขั้นตอนเหล่านี้สมมติว่าคุณเป็นผู้ดูแลระบบโฮสต์ Nextcloud คำสั่งด้านล่างใช้ Debian หรือ Ubuntu กับการติดตั้งแพ็กเกจแบบทั่วไป ชื่อแพ็กเกจ ชื่อบริการ เวอร์ชัน PHP และเส้นทางการกำหนดค่าจะแตกต่างกันไปในระบบปฏิบัติการ Linux อื่นๆ หากคุณใช้งาน Nextcloud AIO, Docker, Snap, TrueNAS หรืออิมเมจจากผู้ให้บริการโฮสติ้ง โปรดปฏิบัติตามคำแนะนำของการติดตั้งและการรีสตาร์ทบริการของระบบนั้นๆ การติดตั้งแพ็กเกจ PHP บนโฮสต์อาจไม่เปลี่ยนแปลงสภาพแวดล้อม PHP ภายในคอนเทนเนอร์หรืออุปกรณ์
- ค้นหาไดเร็กทอรีเว็บรูทของ Nextcloud และไดเร็กทอรีที่ใช้งาน
config/config.phpอยู่
- ทำการสำรองข้อมูลไฟล์นั้นอย่างปลอดภัยก่อนทำการแก้ไข เนื่องจากไฟล์นั้นอาจมีข้อมูลประจำตัวฐานข้อมูลและข้อมูลลับอื่นๆ
- ตรวจสอบว่า Nextcloud ใช้เว็บเซิร์ฟเวอร์เดียวหรือหลายเครื่อง การตั้งค่าแบบหลายโหนดจำเป็นต้องมีเซิร์ฟเวอร์ Redis/Valkey ที่ใช้ร่วมกันหนึ่งเครื่อง หรือคลัสเตอร์ที่สามารถเข้าถึงได้จากทุกโหนดของ Nextcloud
- หากผู้ใช้งานของคุณต้องพึ่งพาการอัปโหลดไฟล์อย่างต่อเนื่อง ให้วางแผนช่วงเวลาการบำรุงรักษาที่สั้นลง
ขั้นตอนที่ 1: ยืนยันคำเตือนและประเภทการติดตั้ง
ลงชื่อเข้าใช้ในฐานะผู้ดูแลระบบและเปิดการตั้งค่าการดูแลระบบจากนั้นตรวจสอบภาพรวมหรือคำเตือนด้านความปลอดภัยและการตั้งค่า บันทึกข้อความที่แน่นอน หากหน้าเว็บระบุเพียงว่าไม่ได้กำหนดค่าแคชหน่วยความจำ นั่นเป็นการตรวจสอบที่แตกต่างออกไป ให้กำหนดค่าแคชในเครื่อง เช่น APCu ตามความเหมาะสม แต่ไม่ควรคิดว่ามันจะให้การล็อกธุรกรรม เอกสารของ Nextcloud ระบุว่าต้องเปิดใช้งานการตั้งค่าแคชอย่างชัดเจนในconfig.php.
ในการติดตั้ง Linux แบบดั้งเดิม ให้ใช้เชลล์เพื่อระบุเส้นทางการติดตั้งและตรวจสอบไฟล์การกำหนดค่าโดยไม่ต้องพิมพ์ข้อมูลลับลงในบันทึกเทอร์มินัลที่ใช้ร่วมกัน ตัวอย่างเช่น จากเซิร์ฟเวอร์:
cd /var/www/nextcloud
ls -l config/config.php
แทนที่/var/www/nextcloudด้วยเส้นทางจริงของคุณ สำหรับคอนเทนเนอร์ ให้ระบุคอนเทนเนอร์และการกำหนดค่าที่ติดตั้งไว้แทนที่จะแก้ไขไฟล์ฝั่งโฮสต์ที่อินสแตนซ์ที่กำลังทำงานอยู่ไม่ได้ใช้งาน
ขั้นตอนที่ 2: ติดตั้งและเริ่มต้นใช้งานที่เก็บข้อมูลแบบคีย์-ค่า
สำหรับ Debian หรือ Ubuntu ระบบแบ็กเอนด์ Redis แบบดั้งเดิมมักจะใช้บริการ Redis และส่วนขยาย PHP Redis ติดตั้งแพ็กเกจที่ตรงกับเวอร์ชัน PHP ที่เว็บเซิร์ฟเวอร์ใช้งาน:
sudo apt update
sudo apt install redis-server php-redis
sudo systemctl enable --now redis-server
sudo systemctl status redis-server
สถานะที่แสดงควรระบุว่าบริการทำงานอยู่ ตรวจสอบว่ารันไทม์ PHP ที่ให้บริการ Nextcloud สามารถโหลดส่วนขยาย Redis ได้หรือไม่ ในการติดตั้งแบบมาตรฐานphp -m | grep -i redisสามารถตรวจสอบได้อย่างรวดเร็วด้วย CLI แต่ PHP CLI และ PHP บนเว็บอาจใช้เวอร์ชันหรือไฟล์การกำหนดค่าที่แตกต่างกัน หากไม่มีโมดูลในรันไทม์เว็บ ให้ติดตั้งหรือเปิดใช้งานแพ็กเกจที่เกี่ยวข้อง แล้วรีสตาร์ท PHP-FPM หรือเว็บเซิร์ฟเวอร์
Nextcloud เวอร์ชัน 34.0.2 และเวอร์ชันที่ใหม่กว่า ยังมีแบ็KeyValueCacheกเอนด์ที่รองรับ Redis มาให้ด้วย โดยไม่จำเป็นต้องใช้ส่วนขยาย PHP Redis ซึ่งอาจมีประโยชน์ในกรณีที่สภาพแวดล้อมโฮสติ้งไม่สามารถติดตั้งโมดูล PHP ได้ แต่ยังคงต้องการบริการ Redis หรือ Valkey ที่ทำงานอยู่คู่มือการแคชหน่วยความจำของ Nextcloud ฉบับปัจจุบัน ได้อธิบายทั้งสองวิธีไว้แล้ว โปรดเลือกการกำหนดค่าแบ็กเอนด์อย่างใดอย่างหนึ่งด้านล่าง แทนที่จะเพิ่มทั้งสองแบบ
ขั้นตอนที่ 3: ตั้งค่าการล็อกใน Nextcloud
แก้ไขค่าที่ใช้งานอยู่config/config.phpและเพิ่มรายการที่เลือกเข้าไปใน$CONFIGอาร์เรย์ที่มีอยู่แล้ว รักษาไวยากรณ์ PHP และเครื่องหมายจุลภาคไว้ อย่าสร้างอาร์เรย์การกำหนดค่าที่สองหรือทำซ้ำคีย์ เก็บการตั้งค่าแคชที่มีอยู่ทั้งหมด เว้นแต่คุณจะเข้าใจว่าทำไมจึงต้องเปลี่ยนแปลง
ตัวเลือก A: Redis พร้อมส่วนขยาย PHP Redis
ใช้ตัวเลือกนี้เมื่อรันไทม์ PHP สำหรับเว็บมีphpredisการติดตั้งส่วนขยายที่รองรับแล้ว เซิร์ฟเวอร์ Redis ในเครื่องที่รับฟังอยู่ที่พอร์ต 6379 สามารถใช้การกำหนดค่าแบบนี้ได้:
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
'host' => '127.0.0.1',
'port' => 6379,
'timeout' => 0.0,
],
หาก Redis ต้องการการตรวจสอบสิทธิ์ ให้ตั้งค่ารหัสผ่านที่ถูกต้องconfig.phpและรักษาความปลอดภัยของสิทธิ์การเข้าถึงไฟล์ อย่าเปิดเผย Redis สู่สาธารณะ ให้จำกัดการเข้าถึงไว้ที่ localhost หรือเครือข่ายส่วนตัวที่ได้รับการป้องกัน และใช้ Unix socket เมื่อเหมาะสม
ตัวเลือก B: KeyValueCache ที่ใช้ Redis หรือ Valkey
ใช้ตัวเลือกนี้เมื่อ Nextcloud เวอร์ชันของคุณรองรับผู้ให้บริการที่รวมมาให้แล้ว และคุณไม่ต้องการติดตั้งส่วนขยาย PHP Redis สำหรับบริการภายในเครื่องที่รับฟังอยู่ที่พอร์ต 6379 ตัวอย่างขั้นต่ำคือ:
'memcache.locking' => '\OC\Memcache\KeyValueCache',
'memcache.kvstore' => [
'server' => [
'host' => '127.0.0.1',
'port' => 6379,
],
],
เพิ่มการตั้งค่าการตรวจสอบสิทธิ์, TLS, ซ็อกเก็ต, Sentinel หรือคลัสเตอร์ตามเอกสาร หากบริการของคุณใช้การตั้งค่าเหล่านั้น อย่าคัดลอกข้อมูลประจำตัวจากตัวอย่าง สำหรับพารามิเตอร์โดยละเอียดและโทโพโลยีที่รองรับ โปรดดูเอกสารอ้างอิงการกำหนดค่าแคชอย่างเป็นทางการ
ขั้นตอนที่ 4: ตรวจสอบการเชื่อมต่อและการตั้งค่าเซิร์ฟเวอร์หลายเครื่อง
Nextcloud ต้องสามารถเข้าถึงเซิร์ฟเวอร์แคชที่กำหนดค่าไว้โดยใช้โฮสต์ พอร์ต ซ็อกเก็ต และข้อมูลรับรองเดียวกันกับบริการ ข้อผิดพลาดทั่วไปคือการตั้งค่าlocalhostในแต่ละโหนดเว็บ Nextcloud ในขณะที่ Redis ทำงานบนโฮสต์แยกต่างหากเพียงโฮสต์เดียว ในการใช้งานแบบหลายเซิร์ฟเวอร์ ให้กำหนดค่าโหนดเว็บทั้งหมดให้ใช้เซิร์ฟเวอร์ Redis หรือคลัสเตอร์เดียวกัน จำกัดการเข้าถึงเครือข่ายไปยังโหนด Nextcloud และปกป้อง Redis ด้วยกฎการตรวจสอบสิทธิ์และไฟร์วอลล์ที่เหมาะสม
สำหรับซ็อกเก็ต Unix โปรดตรวจสอบให้แน่ใจว่าบัญชี PHP/เว็บเซิร์ฟเวอร์สามารถอ่านและเขียนซ็อกเก็ตได้ สิทธิ์หรือกลุ่มผู้ใช้จะแตกต่างกันไปตามระบบปฏิบัติการ ดังนั้นโปรดปฏิบัติตามเอกสารประกอบของ Redis/Valkey และเอกสารการแจกจ่ายแทนที่จะใช้สิทธิ์แบบกว้างๆ เช่น การเข้าถึงแบบเขียนได้สำหรับทุกคน การปฏิเสธการเชื่อมต่อ ข้อผิดพลาดในการตรวจสอบสิทธิ์ หรือข้อผิดพลาดเกี่ยวกับสิทธิ์ของซ็อกเก็ตอาจทำให้ Nextcloud ไม่สามารถใช้ผู้ให้บริการการล็อกได้แม้ว่าจะมีคีย์การกำหนดค่าอยู่ก็ตาม
ขั้นตอนที่ 5: เริ่มบริการที่ถูกต้องอีกครั้ง
หลังจากบันทึกการกำหนดค่าแล้ว ให้รีสตาร์ทบริการ Redis หากมีการเปลี่ยนแปลงการตั้งค่า จากนั้นรีสตาร์ท PHP runtime ที่ให้บริการ Nextcloud ตัวอย่างเช่น การติดตั้ง Apache อาจต้องรีสตาร์ท Apache ในขณะที่การติดตั้ง PHP-FPM ต้องรีสตาร์ทบริการ PHP-FPM ที่เกี่ยวข้อง ชื่อบริการจะมีหมายเลขเวอร์ชัน PHP ในบางระบบปฏิบัติการ สำหรับคอนเทนเนอร์ ให้สร้างใหม่หรือรีสตาร์ทบริการที่เกี่ยวข้องผ่านวิธีการที่รองรับของการปรับใช้ หลีกเลี่ยงการรีสตาร์ทบริการที่ไม่เกี่ยวข้องโดยพลการบนเซิร์ฟเวอร์ที่ใช้งานจริง
หาก Nextcloud แสดงข้อผิดพลาดในการกำหนดค่าหรือไวยากรณ์ ให้กู้คืนข้อมูลสำรองและตรวจสอบว่าไม่มีเครื่องหมายจุลภาค เครื่องหมายอัญประกาศไม่ตรงกัน คีย์ซ้ำ หรือแก้ไขผิดที่config.phpการตั้งค่าอาร์เรย์ของ PHP ต้องคงอยู่ภายในโครงสร้างการกำหนดค่าที่มีอยู่เดิม
ขั้นตอนที่ 6: ตรวจสอบการตั้งค่าและทดสอบการทำงานของไฟล์
รีเฟรชหน้าภาพรวมผู้ดูแลระบบและตรวจสอบว่าคำเตือนการล็อกไฟล์ธุรกรรมหายไปแล้วหรือไม่ หากคุณกำหนดค่าแคชภายในเครื่องและยังคงเห็นคำเตือนแคชหน่วยความจำ ให้ตรวจสอบแยกต่างหาก Nextcloud แนะนำให้ใช้ APCu สำหรับการแคชภายในเครื่องในการใช้งานแบบเซิร์ฟเวอร์เดียวหลายๆ ครั้ง ในขณะที่ Redis จัดการการล็อกและการแคชแบบกระจาย อย่าเพิ่ม Redis เป็นแคชภายในเครื่องโดยค่าเริ่มต้น โดยเฉพาะอย่างยิ่งในการกำหนดค่าแบบหลายเซิร์ฟเวอร์
คุณสามารถตรวจสอบการตั้งค่าการล็อกที่มีผลโดยใช้เครื่องมือบรรทัดคำสั่งของ Nextcloud ได้เช่นกัน เรียกใช้occจากไดเร็กทอรี Nextcloud โดยใช้บัญชีเว็บเซิร์ฟเวอร์ บน Debian/Ubuntu บัญชีนั้นโดยทั่วไปคือwww-data:
sudo -u www-data php occ config:system:get memcache.locking
ค่าที่ระบุควรตรงกับแบ็กเอนด์ที่คุณเลือก เช่น\OC\Memcache\Redisหรือ\OC\Memcache\KeyValueCacheหากคำสั่งไม่พบการตั้งค่า โปรดตรวจสอบเส้นทาง ผู้ใช้ที่เรียกใช้งาน และไฟล์การกำหนดค่าที่ ใช้งาน อยู่ คู่มืออย่างเป็นทางการของ OCCจะอธิบายวิธีการเรียกใช้คำสั่งผู้ดูแลระบบ
สุดท้ายนี้ ให้อัปโหลดไฟล์ทดสอบขนาดเล็ก เปลี่ยนชื่อไฟล์ ดาวน์โหลด และตรวจสอบว่าไคลเอนต์บนเดสก์ท็อปหรือมือถือสามารถซิงค์การเปลี่ยนแปลงได้ การตรวจสอบเหล่านี้ไม่ได้จำลองปริมาณงานพร้อมกันทั้งหมด แต่เป็นการยืนยันว่าการดำเนินการไฟล์ทั่วไปยังคงทำงานได้หลังจากการเปลี่ยนแปลง สำหรับเซิร์ฟเวอร์ที่มีการใช้งานมากหรือเซิร์ฟเวอร์แบบคลัสเตอร์ ให้ตรวจสอบบันทึก Nextcloud และความพร้อมใช้งานของ Redis/Valkey ในระหว่างการใช้งานปกติ หากคำเตือนยังคงอยู่ ให้ตรวจสอบว่ารันไทม์ PHP บนเว็บมีนามสกุลเมื่อใช้ตัวเลือก A โฮสต์แคชสามารถเข้าถึงได้ ข้อมูลรับรองและสิทธิ์ซ็อกเก็ตถูกต้อง และโหนดทั้งหมดใช้แบ็กเอนด์เดียวกัน
การล็อกไฟล์แบบธุรกรรมทำอะไรได้บ้าง และทำอะไรไม่ได้บ้าง
การล็อกแบบธุรกรรมช่วยป้องกันไฟล์เสียหายเมื่อมีการดำเนินการซ้อนทับกัน จัดการกับธุรกรรมที่ถูกขัดจังหวะ และประสานการเปลี่ยนแปลงที่เกี่ยวข้องกับไฟล์ที่ใช้ร่วมกันและพื้นที่จัดเก็บภายนอก แต่จะไม่สงวนเอกสารไว้เพื่อให้มีเพียงคนเดียวที่สามารถแก้ไขได้ แสดงว่าใครกำลังแก้ไขอยู่ หรือรวมการแก้ไขพร้อมกัน ให้ถือว่าคำเตือนนี้เป็นปัญหาเกี่ยวกับการกำหนดค่าเซิร์ฟเวอร์ จากนั้นทดสอบการอัปโหลดและการซิงค์ตามปกติหลังจากกำหนดค่าแบ็กเอนด์เสร็จแล้ว สำหรับพฤติกรรมการแก้ไขร่วมกัน ให้ใช้แอปพลิเคชันที่ออกแบบมาสำหรับการเขียนร่วมกันแทนการพึ่งพาการล็อกไฟล์