By Arnon Puitrakul - 05 กรกฎาคม 2024
ตั้งแต่ใช้ Obsidian เป็น App จด Note หลัก ๆ มาแล้วชอบวิธีการจัดการมาก ๆ เมื่อใช้งานร่วมกับ Plugin ต่าง ๆ ยิ่งทำให้การใช้งานยืดหยุ่นมากกว่าเดิมอีกเยอะมาก ๆ แต่เราติดอยู่เรื่องเดียวคือ การใช้งานในหลาย ๆ อุปกรณ์ (และเราไม่อยากเสียเงิน Obsidian Sync) แต่เรามาเจอ Plugin ตัวนึงที่น่าสนใจมาก ๆ คือ LiveSync วันนี้เราจะมาเล่าวิธีการติดตั้ง และใช้งานมันกัน
LiveSync เป็น Plugin ตัวนึงที่ทำให้เราสามารถ Obsidian Vault ของเรา เพื่อให้เราสามารถเข้าถึง Vault ของเราจากที่ไหนก็ได้ หลักการคล้าย ๆ กับการ Sync Vault ทั้งตัวลงไปใน iCloud หรือ Cloud Storage ต่าง ๆ แต่ LiveSync มันฟรี และมีระบบจัดการ Conflict ทำให้เราสามารถใช้งาน แก้ไข Markdown File พร้อมกันหลาย ๆ เครื่องได้ จุดนี้แหละที่ทำให้ LiveSync เหนือกว่าการที่เราเก็บ Vault ไว้บน Cloud Storage
หลักการของ LiveSync คือ มันทำหน้าที่เป็น Client เชื่อมต่อกับ ฐานข้อมูล โดยตรง ซึ่งฐานข้อมูลที่เขาให้เราใช้คือ CouchDB ซึ่งเป็น Document-Oriented Database ก็น่าจะเหมาะกับการเอามาเก็บ Obsidian Vault มาก ๆ เลยละ
และต้องอย่าลืมด้วยว่า Obsidian Plugin ทั้งหมดที่เราใช้งานกัน มันสามารถติดตั้งได้ทั้งบน OS ใด ๆ ก็ได้ที่รัน Obsidian นั่นแปลว่า เราสามารถใช้ LiveSync นี้ได้กับทั้งคอมพิวเตอร์ และโทรศัพท์ของเราเลย สะดวกมาก ๆ
ก่อนเราจะเริ่ม ต้องบอกก่อนว่า ในการใช้งานนี้ เราจำเป็นต้องติดตั้ง CouchDB เข้าไป และให้ LiveSync สามารถเข้าถึง Database ได้ ดังนั้น เราจะต้องมี Server สำหรับการติดตั้งด้วย ซึ่งจะเป็น NAS ที่เราใช้งานอยู่แล้วก็ได้ หรือถ้าต้องซื้ออุปกรณ์ใหม่ อยากเริ่มลองใช้ขนาดเล็ก ๆ อาจจะใช้เป็น Raspberry Pi ก่อนก็ได้
และหากต้องการให้มันสามารถ Sync จากนอกบ้านได้ เราจำเป็นต้องเชื่อมสะพาน โดยวิธีการง่ายที่สุดคือ การใช้ Cloudflare Tunnel ซึ่งการจะทำได้นั้น เราจะต้องมี Domain Name ที่ผูกกับ Cloudflare เสียก่อนด้วย หรือถ้าใครที่ไม่มี แต่ Package Internet ที่ใช้งานสามารถทำพวก DDNS เชื่อมต่อเข้ามาในบ้านได้ ก็ใช้งานอะไรพวกนั้นได้เหมือนกันนะ
แต่สำหรับใครที่ไม่อยากยุ่งยาก ลองใช้งานแค่ในบ้านก่อน เครื่อง Server ก็ใช้เป็น Laptop หรือ PC ของเราได้เลย ที่เชื่อมต่ออยู่ในวง LAN เดียวกับอุปกรณ์ของเราได้ก็พอแล้ว
อย่างแรกให้เราติดตั้ง CouchDB กันก่อน โดยเราสามารถทำได้หลายวิธีมาก ๆ แต่วิธีการที่เราคิดว่าง่ายที่สุดคือการใช้ Docker ช่วยน่าจะง่ายที่สุด เพราะ CouchDB มี Official Image ให้เราสามารถติดตั้งได้เลย หากใครใช้ Docker เป็นอยู่แล้ว ก็สร้าง Container ปกติแค่นั้น
mkdir couchdb-data
mkdir couchdb-etc
เพื่อให้ง่ายขึ้นอีกนิดหน่อย เราจะ Mount Path สำหรับการเก็บข้อมูลของ Database ด้วย เผื่อเราไป Refresh Container อะไรใหม่ ข้อมูลจะได้ไม่หายไป ให้เราสร้าง Folder ที่ต้องการเก็บ แล้วภายในนั้นเราจะสร้าง Folder 2 ตัวคือ Data และ Etc
export username=goojdasjdas #Please change as you like.
export password=kpkdasdosakpdsa #Please change as you like
และเราจำเป็นต้องตั้ง Username และ Password สำหรับการเข้าถึง Database ด้วย โดยเราจะตั้งเป็น Environment Variable ไว้ก่อน ให้เราพิมพ์ตามนี้ และ เปลี่ยน Username และ Password ตามใจชอบได้เลย
$ docker run --name couchdb-for-ols -d --restart always -e COUCHDB_USER=${username} -e COUCHDB_PASSWORD=${password} -v ${PWD}/couchdb-data:/opt/couchdb/data -v ${PWD}/couchdb-etc:/opt/couchdb/etc/local.d -p 5984:5984 couchdb
สุดท้าย ถึงเวลาอันสมควร แล้วเราจะมาสร้าง Container ของ CouchDB กัน จุ๊บคำสั่งด้านบนไปได้เลย จบขั้นตอนนี้ เราจะได้ Container ตัวนึงออกมา ชื่อว่า couchdb-for-ols
docker exec -it couchdb-for-ols bash
เราจะต้อง Initialise CouchDB เพื่อให้มันสามารถติดต่อผ่าน REST API ได้ ซึ่งเราจะต้องเริ่มจากการเข้าไปใน Shell ของ Container โดยใช้คำสั่งด้านบน
curl -s https://raw.githubusercontent.com/vrtmrz/obsidian-livesync/main/utils/couchdb/couchdb-init.sh | bash
เมื่อเราเข้าไปใน Container แล้วให้เรารันคำสั่งด้านบน เพื่อเปิดการใช้งาน REST API บน CouchDB เท่านี้ก็เรียบร้อยแล้ว
หลังจากนั้น อยู่ที่เราละว่า เราจะ Expose ออก Internet หรือไม่ตามที่เล่าไปใน Requirement ซึ่งเราทำได้ทั้งต่อ NAT เข้ามาเองก็ได้ จะต่อผ่าน Cloudflare Tunnel ก็ได้ หรือจะใช้ Cloud เลย แล้วแต่ความสะดวกเลย
สำหรับ Setup เราใช้เป็น Synology NAS ที่มี Docker ติดตั้งอยู่ เราก็แค่ทำตามที่เราเขียนเล่ามาทั้งหมด ก็เรียบร้อย และสำหรับการ Expose ออก Internet เราใช้ Cloudflare Tunnel และเชื่อมไปที่ IP ของ NAS และ Port 5984 ที่เรา Bind เอาไว้นั่นเอง
เราต้องมาเริ่มการ Setup อุปกรณ์แรกของเรา แนะนำให้เป็นเครื่องที่มี Vault ที่สมบูรณ์ที่สุดอยู่เอาไว้ เป็นเหมือนต้นฉบับ และ ทำการเปิดใช้งาน Community Plugin เอาไว้ด้วย
เราจะมาติดตั้ง Plugin โดยการกดเข้าไปที่ Tab Community Plugin ตรงช่อง Community Plugin ให้เรากด Browse ค้นหาคำว่า LiveSync แล้วกด Install เท่านี้ก็เรียบร้อย
ใน Settings ด้านล่าง ๆ หน่อย ควรจะมีแถบที่เขียนว่า Self-Hosted Live Sync อยู่ ให้เรากดเข้าไป เลือกที่ Tab ที่เป็นรูปพ่อมด ตรงช่อง Minimal setup ให้กด Start
มาในหน้าตั้งค่า มันจะให้เราใส่วิธีการเชื่อมต่อ CouchDB ที่เราติดตั้งไว้เข้าไป URI ให้เราใส่ที่อยู่ของ Database ของเรา หากเ Host อยู่ในบ้านตัวเองก็ใส่เป็น http://<ip_address> ได้เลย หรือถ้าไม่ก็ใส่เป็น Hostname ที่เราใช้อยู่
ช่อง Username และ Password ให้ใส่เป็นตัวเดียวกับที่เราใส่ไปตอนสร้าง Container สุดท้าย Database Name อันนี้ให้เราใส่เป็นอะไรก็ได้ จะเป็น the_database เหมือนใน Document ก็ได้
หลังจากนั้นเลื่อนลงไปอีกนิดหน่อย เราจะเจอกับ ปุ่ม Check ให้เรากด มันจะทำการเช็คพวก Permission และ การใช้งานต่าง ๆ ของ Database เรา หากมันติ๊กถูกหมด ก็ผ่านไปได้เลย หรือถ้าไม่ มันควรจะมีปุ่ม Fix หากกดแล้วมันกลับมาเป็นติ๊กถูกก็โอเคละ แต่ถ้าไม่ อาจจะต้องเช็คการติดตั้ง Database หน่อยว่า โอเคมั้ย
เลื่อนลงมาล่างสุด ส่วนที่เขียนว่า Confidentiality แนะนำให้เราติ๊กเปิดทั้ง End to End Encryption และ Path Obfuscation พร้อมกับตั้ง Passprase เอาไว้ด้วย แล้วให้เรากด Next
มันจะเป็นหน้า Sync Settings ให้เราเลือก Present เป็น LiveSync กด Apply ก็เป็นอันจบ มันควรจะเริ่มเชื่อมต่อกับ Database และเริ่ม Sync Vault ของเราขึ้นไป
การ Setup ในอุปกรณ์อื่น ๆ นั้นง่ายมาก ๆ เริ่มจากให้เราเข้าไปใน Settings เลือก Self-Hosted Live Sync มันจะมีรายการนึงเขียนว่า Copy current settings as a new setup URI ให้เรากด Copy
obsidian://setuplivesync?settings=%25064b975fa9616060a37d6ef903000000bb4575995b185edf44d4fc335022016eD7mx7hoNEEE9mNdtfvIO2Fez6ve1pi6cOSQn0vKJEjiEl1DmdjedyE%2FMTlAYrFnQ9fs4I0FlEfpoTJKhOFn6qkysT7gsuSHbGm%2F64X0Vm4O5vkvY7eWUwnEjb1f2zx3Ej%2FjCUqem6P2QVOHHzf2SrZbycwyulf%2B44LgrwwMi4IVXYAjndjaYFP7CG9K%2FfbyBpkZvMjcgHNQ%2FhkEF%2FH5EIQHYQhP%2FtfhOAtHWUaV%2BRrpPKGMQ4woavkNmaBW80mQRUPDhu4WVwP82K1E%2BYGWSKtySLkIWZPMfpJfefqQeaFfOkegaLGT9%2FaTtWqFb1uL8sdfT1PZJxaBKbpw8FX9JvbigSTwZP%2BSSE4gL9cMWLXGS%2Fgj0sqMF9Js1zWmosgMzJQgNpYG7gMbtUA7CRfkfN2FIOz6LSrKxHg01xf8DtdTQzSK2ZYoimfZhk7jdv6WHJFs4MgweanvoL3ZA1WzzBdQHrnZaJ4NWI54bkyS9jB9XbH29mnbCrFcHIcCbZKKcfuQ1TGdE9JrPQhWQZZVoKpVF%2FlCv0aQ%2BTvYb0b2kYWvuwsinBvUn0m8zuHhTJV8WpX1k%2FZDuYSsJMsSMoOYnQkU2nU2IItG4VXBlJencuvAHr5UsfJmJniBEFEXnOXfEyRzXPqHKtPHQwX3aFe0kSIyys0y6IvhGax0kxh1h%2BhPhKkYG8NbMpmgpN1DH9lcD9YYOCec59UpQoYlO4CrVp8SzrtN6GjN%2Fo7hxcwU26slSvFWqZvlq7y5BBXNuR%2FA5i%2BSVJqNxn7Y%3D
จากนั้นมันจะถาม Passphase ให้เรากรอกลงไปได้เลยแล้วกด OK จากนั้นมันจะทำการ Copy Settings ไว้ใน Clipboard ของเรา โดยตอนที่เราตั้งค่ากัน เราเลือกให้มันซ่อนพวกข้อมูลต่าง ๆ เอาไว้ใน Passphase ทำให้ Settings ที่ได้ออกมา ตัวอย่างแบบด้านบน มันจะอ่านไม่รู้เรื่องเลย จนกว่าเราจะถอดรหัส
ไปในอุปกรณ์อีกตัวที่เราต้องการจะ Sync ด้วย ให้เราติดตั้ง LiveSync Plugin เข้าไป ในตอน Setup แทนที่จะกด Minimal Setup ให้เรากด Use the copies URI แทน แล้วเราก็แปะ URI ที่เราก๊อปมา แล้วใส่ Passphrase เพื่อถอดรหัส เท่านั้นก็เรียบร้อย พวกไฟล์ทั้งหมดที่อยู่ใน Vault มันจะโดนเรียกลงมาแปะเอง
ในส่วนของการใช้งาน เราไม่จำเป็นต้องทำอะไรทั้งสิ้น เมื่อเรามีการแก้ไข ลบไฟล์ หรือสร้างไฟล์ใหม่ มันจะทำการ Sync ขึ้นไปเองทั้งหมด แบบ กึ่ง ๆ Realtime เลยทีเดียว ให้เราสังเกตุที่ Icon ด้านล่างขวาของหน้าจอ มันจะมีเขียน Sync Status อยู่ หากเรามีการแก้ไข มันควรจะเป็นรูปสายฟ้าแว่บ ๆ คือ มันกำลัง Sync หรือเป็นรูป zzz... นอน ก็คือมันกำลัง Standby รอการเปลี่ยนแปลง
ถ้าเราลองใช้ เราจะเห็นว่า ด้านบนก็มีแสดงสถานะการ Sync ด้วยเช่นกัน แบบละเอียดกว่าด้านล่างมาก ๆ แต่เท่าที่เราลองใช้งานมา ด้วยความที่มันมีการ Sync ตลอดเวลา ทำให้สถานะมันเด้งไปมาตลอด จนมันกวนสมาธิเรามาก ๆ เราสามารถปิดได้ โดยการเข้าไปที่ Settings เลือก Self-Hosted Live Sync เหมือนเดิม แต่เลือก Tab รูปฟันเฟือง ในหัวข้อใหญ่ Apperance จะมีตัวเลือกที่เขียนว่า Show status inside the editior ให้เราปิดมันไป แล้วปิดโปรแกรมเปิดใหม่ ข้อความที่น่ารำคาญด้านบนก็จะหายไปนั่นเอง
เท่านี้ เราก็จะใช้งานมันได้แบบ เป็นสุข ๆ ละ เรียกว่า Setup ทีเดียวใช้กันยาว ๆ ไปเลย
Obsidian เป็นโปรแกรมสำหรับการจด Note ที่เรียกว่า สารพัดประโยชน์มาก ๆ เราสามารถเอามาทำอะไรได้เยอะมาก ๆ หนึ่งในสิ่งที่เราเอามาทำคือ นำมาใช้เป็นระบบสำหรับการจัดการ Todo List ในแต่ละวันของเรา ทำอะไรบ้าง วันนี้เราจะมาเล่าให้อ่านกันว่า เราจัดการะบบอย่างไร...
อะ อะจ๊ะเอ๋ตัวเอง เป็นยังไงบ้างละ เมื่อหลายเดือนก่อน เราไปเล่าเรื่องกันขำ ๆ ว่า ๆ จริง ๆ แล้วพวก Loop ที่เราใช้เขียนโปรแกรมกันอยู่ มันไม่มีอยู่จริง สิ่งที่เราใช้งานกันมันพยายาม Abstract บางอย่างออกไป วันนี้เราจะมาถอดการทำงานของ Loop จริง ๆ กันว่า มันทำงานอย่างไรกันแน่ ผ่านภาษา Assembly...
นอกจากการทำให้ Application รันได้แล้ว อีกเรื่องที่สำคัญไม่แพ้กันคือการวางระบบ Monitoring ที่ดี วันนี้เราจะมาแนะนำวิธีการ Monitor การทำงานของ MySQL ผ่านการสร้าง Dashboard บน Grafana กัน...
จากตอนที่แล้ว เราเล่าในเรื่องของการ Harden Security ของ SSH Service ของเราด้วยการปรับการตั้งค่าบางอย่างเพื่อลด Attack Surface ที่อาจจะเกิดขึ้นได้ หากใครยังไม่ได้อ่านก็ย้อนกลับไปอ่านกันก่อนเด้อ วันนี้เรามาเล่าวิธีการที่มัน Advance มากขึ้น อย่างการใช้ fail2ban...