ทำงานเป็น นักแปลอิสระระยะไกล มีประโยชน์มากมาย แต่การสร้างสภาพแวดล้อมการทำงานแบบกระจายที่มีประสิทธิภาพอาจเป็นความท้าทายที่แท้จริง แน่นอนว่ามีหลายวิธีที่สามารถทำได้และไม่มีวิธีใดที่ 'ดีที่สุด' เดียวที่จะเหมาะกับทุกคน องค์กรในที่ทำงานแบบดิจิทัลระยะไกลเป็นสิ่งที่เป็นส่วนตัวมากและสิ่งที่ทำงานได้ดีสำหรับนักพัฒนาซอฟต์แวร์คนหนึ่งอาจทำงานได้ไม่ดีเลยสำหรับคนอื่น
ด้วยเหตุนี้การตั้งค่าที่ฉันนำเสนอจึงเป็นเพียงสิ่งที่ทำงานได้ดีสำหรับฉันเป็นการส่วนตัวโดยเฉพาะอย่างยิ่งในโครงการระยะไกลที่เกี่ยวข้องกับทั้งการพัฒนาและการดูแลระบบ ฉันเชื่อว่าแนวทางนี้มีข้อดีหลายประการ แต่ผู้อ่านแต่ละคนควรพิจารณาว่าจะปรับวิธีนี้อย่างไรให้เหมาะกับพวกเขามากที่สุดโดยพิจารณาจากการผสมผสานระหว่างความต้องการในการปฏิบัติงานและความชอบส่วนบุคคล
ฉันจะหานักพัฒนาซอฟต์แวร์ได้ที่ไหน
แนวทางของฉันส่วนใหญ่ขึ้นอยู่กับคุณสมบัติที่เสนอโดย SSH และเครื่องมือที่เกี่ยวข้องบน Linux โปรดทราบว่าผู้ใช้ MacOS และระบบที่คล้าย Unix อื่น ๆ สามารถใช้ประโยชน์จากขั้นตอนที่อธิบายไว้ได้เช่นกันในขอบเขตที่ระบบของพวกเขารองรับเครื่องมือที่อธิบายไว้
ขั้นตอนแรกที่สำคัญในการตั้งค่าของฉันคือไฟล์ Raspberry Pi 2 - ขับเคลื่อน เซิร์ฟเวอร์ในบ้านของฉันเอง ใช้เพื่อโฮสต์ทุกอย่างตั้งแต่ที่เก็บซอร์สโค้ดของฉันไปจนถึงไซต์สาธิต
แม้ว่าฉันจะเดินทาง แต่อพาร์ทเมนต์ของฉันก็ทำหน้าที่เป็น 'ฐานปฏิบัติการคงที่' ระยะไกลของฉันด้วยการเชื่อมต่ออินเทอร์เน็ตที่ดี (100 Mbit / วินาที) และแทบจะไม่มีเวลาแฝงเพิ่มเติม ซึ่งหมายความว่าจากอพาร์ตเมนต์ของฉันโดยพื้นฐานแล้วฉันถูก จำกัด ด้วยความเร็วของเครือข่ายปลายทางเท่านั้น การตั้งค่าที่ฉันอธิบายจะทำงานได้ดีที่สุดกับการเชื่อมต่อประเภทนี้แม้ว่าจะไม่ใช่ข้อกำหนดก็ตาม อันที่จริงฉันยังใช้แนวทางนี้ในขณะที่ฉันมีการเชื่อมต่อ ADSL แบนด์วิดท์ที่ค่อนข้างต่ำโดยที่ส่วนใหญ่ทำงานได้ดี จากประสบการณ์ของฉันความต้องการที่แท้จริงเพียงอย่างเดียวก็คือแบนด์วิดท์ไม่ถูกตรวจวัดหรือมีราคาถูก
ในฐานะผู้ใช้ที่อยู่อาศัยฉันมีเราเตอร์เครือข่ายในบ้านที่ถูกที่สุดที่ ISP ของฉันสามารถซื้อได้ซึ่งก็ไม่เพียงพอสำหรับสิ่งที่ฉันต้องทำ ดังนั้นฉันจึงขอให้ ISP วางเราเตอร์เข้าสู่ 'โหมดบริดจ์' ซึ่งทำหน้าที่เป็นตัวยุติการเชื่อมต่อเท่านั้นโดยเสนอ PPPoE จุดสิ้นสุดไปยังระบบที่เชื่อมต่อเพียงระบบเดียว ซึ่งหมายความว่าอุปกรณ์หยุดทำงานเป็นจุดเชื่อมต่อ WiFi หรือแม้กระทั่งเป็นเราเตอร์ทั่วไปในบ้าน งานทั้งหมดนี้จัดการโดยไฟล์ เราเตอร์ Mikrotik มืออาชีพขนาดเล็ก RB951G-2HnD . มันดำเนินการ กลางคืน บริการสำหรับเครือข่ายท้องถิ่นของฉัน (ซึ่งฉันมีหมายเลข 10.10.10.0/24) และข้อเสนอ DHCP ไปยังอุปกรณ์แบบมีสายและไร้สายที่เชื่อมต่ออยู่ Mikrotik และ Raspberry Pi มีที่อยู่แบบคงที่เนื่องจากใช้ในบริบทที่ต้องใช้ที่อยู่ที่รู้จักกันดี ในกรณีของฉันคือ 10.10.10.1 และ 10.10.10.10 ตามลำดับ
การเชื่อมต่อที่บ้านของฉันไม่มีที่อยู่ IP แบบคงที่ สำหรับวัตถุประสงค์ของฉันนี่เป็นเพียงความไม่สะดวกเล็กน้อยในการทำงานจากระยะไกลเนื่องจากเป้าหมายคือการสร้างส่วนบุคคลหรือ โซโห สภาพแวดล้อมการทำงานไม่ใช่ไซต์ 24/7 (สำหรับผู้ที่ต้องการที่อยู่ IP แบบคงที่สำหรับเซิร์ฟเวอร์ของตนเป็นที่น่าสังเกตว่าค่าใช้จ่ายของที่อยู่ IP แบบคงที่ยังคงลดลงอย่างต่อเนื่องและ ตัวเลือก VPN IP แบบคงที่ราคาไม่แพงพอสมควร มีอยู่) นายหน้า DNS ที่ฉันใช้ Joker.com ให้บริการ DNS แบบไดนามิกฟรีควบคู่ไปกับบริการอื่น ๆ ทั้งหมดดังนั้นโดเมนย่อยหนึ่งโดเมนส่วนบุคคลของฉันจึงมีชื่อแบบไดนามิก ฉันใช้ชื่อนี้เพื่อเชื่อมต่อจากภายนอกไปยังเครือข่ายของฉันเองและ Mikrotik ได้รับการกำหนดค่าให้ส่งผ่าน SSH และ HTTP ผ่าน NAT ไปยัง Raspberry Pi ฉันต้องพิมพ์สิ่งที่เทียบเท่ากับ ssh mydomain.example.com
เพื่อล็อกอินเข้าสู่โฮมเซิร์ฟเวอร์ส่วนตัวของฉัน
สิ่งสำคัญอย่างหนึ่งที่ Raspberry Pi ทำ ไม่ ข้อเสนอซ้ำซ้อน ฉันติดตั้งการ์ด 32 GB แล้วและยังมีข้อมูลจำนวนมากที่จะสูญเสียในกรณีที่เกิดอะไรขึ้น เพื่อหลีกเลี่ยงปัญหานั้นและเพื่อให้แน่ใจว่าสามารถเข้าถึงข้อมูลของฉันได้หากการเข้าถึงอินเทอร์เน็ตในที่อยู่อาศัยเกิดอาการขัดข้องฉันจะจำลองข้อมูลทั้งหมดของฉันไปยังเซิร์ฟเวอร์ภายนอกที่เหมือนระบบคลาวด์ เนื่องจากฉันอยู่ในยุโรปฉันจึงควรได้รับสิ่งที่เล็กที่สุด เซิร์ฟเวอร์ bare-metal โดยเฉพาะ (เช่นไม่เสมือนจริง) จาก Online.net ซึ่งมาพร้อมกับซีพียู VIA ระดับล่างพร้อม RAM 2 GB และ 500 GB SSHD . เช่นเดียวกับมินิเซิร์ฟเวอร์ Raspberry Pi ฉันไม่ต้องการประสิทธิภาพของ CPU ที่สูงหรือแม้แต่หน่วยความจำดังนั้นนี่จึงเป็นการจับคู่ที่สมบูรณ์แบบ (นอกจากนี้ฉันยังจำเซิร์ฟเวอร์ 'ใหญ่' ตัวแรกของฉันซึ่งมีซีพียู Pentium 3 สองตัวและ RAM 1 GB และอาจจะเป็นครึ่งหนึ่งของความเร็วของ Raspberry Pi 2 และวิธีที่เราทำสิ่งที่ยอดเยี่ยมกับมันซึ่งมีอิทธิพลต่อฉัน ความสนใจในการเพิ่มประสิทธิภาพ)
ฉันสำรอง Raspberry Pi ของฉันไปยังเซิร์ฟเวอร์ที่เหมือนคลาวด์ระยะไกลโดยใช้ rdiff สำรอง . เมื่อพิจารณาจากขนาดที่สัมพันธ์กันของระบบการสำรองข้อมูลเหล่านี้จะทำให้ฉันได้รับประวัติที่ไม่ จำกัด อีกสิ่งหนึ่งที่ฉันมีบนเซิร์ฟเวอร์แบบคลาวด์คือการติดตั้งไฟล์ ownCloud ซึ่งทำให้ฉันสามารถเรียกใช้บริการส่วนตัวเหมือน Dropbox ownCloud ในฐานะผลิตภัณฑ์กำลังก้าวไปสู่กรุ๊ปแวร์และการทำงานร่วมกันดังนั้นจึงมีประโยชน์มากขึ้นหากมีผู้ใช้งานมากขึ้น ตั้งแต่ฉันเริ่มใช้มันฉันก็ไม่มี ใด ๆ ข้อมูลในเครื่องที่ไม่ได้สำรองไว้ใน Raspberry Pi หรือไปยังเซิร์ฟเวอร์แบบคลาวด์และส่วนใหญ่จะถูกสำรองข้อมูลสองครั้ง การสำรองข้อมูลสำรองเพิ่มเติมใด ๆ ที่คุณสามารถทำได้เป็นสิ่งที่ดีเสมอหากคุณให้ความสำคัญกับข้อมูลของคุณ
งานส่วนใหญ่ของฉันในวันนี้เกี่ยวข้องกับการพัฒนาสิ่งต่างๆที่ไม่เกี่ยวข้องกับเว็บโดยตรง (ฉันรู้น่าตกใจ!) ดังนั้นเวิร์กโฟลว์ของฉันจึงมักจะเป็นไปตามวัฏจักรการแก้ไขคอมไพล์ - รันแบบคลาสสิก ขึ้นอยู่กับสถานการณ์เฉพาะของโครงการฉันอาจมีไฟล์อยู่ในเครื่องแล็ปท็อปของฉันฉันอาจใส่ไว้ในไดเร็กทอรีที่ซิงค์ด้วยคลาวด์ของตัวเองหรือที่น่าสนใจกว่านั้นคือฉันอาจวางไว้บน Raspberry Pi โดยตรงและใช้จากที่นั่น .
ตัวเลือกหลังสามารถทำได้ด้วย สสส ซึ่งทำให้ฉันสามารถเมานต์ไดเร็กทอรีระยะไกลจาก Raspberry Pi ในเครื่องได้ เกือบจะเหมือนเวทมนตร์ชิ้นเล็ก ๆ : คุณสามารถเปิดไดเร็กทอรีระยะไกลได้ ใด ๆ เซิร์ฟเวอร์ที่คุณมีสิทธิ์เข้าถึง SSH (ทำงานภายใต้สิทธิ์ที่ผู้ใช้ของคุณมีบนเซิร์ฟเวอร์) ติดตั้งเป็นโลคัลไดเร็กทอรี
มีไดเร็กทอรีโปรเจ็กต์ระยะไกลหรือไม่? ติดตั้งในเครื่องและไปได้เลย หากคุณต้องการเซิร์ฟเวอร์ที่มีประสิทธิภาพสำหรับการพัฒนาหรือการทดสอบและ - ด้วยเหตุผลบางประการเพียงแค่ไปที่นั่นและใช้งาน ฉันมา ในคอนโซลไม่ใช่ตัวเลือก - ติดตั้งเซิร์ฟเวอร์นั้นในเครื่องและทำสิ่งที่คุณต้องการ สิ่งนี้ใช้งานได้ดีโดยเฉพาะเมื่อฉันใช้การเชื่อมต่อแบนด์วิดท์ต่ำกับอินเทอร์เน็ตแม้ว่าฉันจะทำงานในโปรแกรมแก้ไขข้อความคอนโซลประสบการณ์นี้จะดีกว่ามากถ้าฉันเรียกใช้โปรแกรมแก้ไขนั้นในเครื่องจากนั้นถ่ายโอนไฟล์ผ่าน SSHFS แทน มากกว่าการทำงานในเซสชัน SSH ระยะไกล
ต้องเปรียบเทียบหลาย ๆ /etc
ไดเรกทอรีบนเซิร์ฟเวอร์ระยะไกลที่แตกต่างกัน? ไม่มีปัญหา. เพียงใช้ SSHFS เพื่อติดตั้งแต่ละรายการในเครื่องจากนั้นใช้ diff (หรือเครื่องมืออื่นใดที่ใช้ได้) เพื่อเปรียบเทียบ
หรือบางทีคุณอาจต้องประมวลผลไฟล์บันทึกขนาดใหญ่ แต่คุณไม่ต้องการติดตั้งเครื่องมือแยกวิเคราะห์บันทึกบนเซิร์ฟเวอร์ (เนื่องจากมีการอ้างอิงเป็นล้านล้าน) และไม่สะดวกด้วยเหตุผลใดก็ตามการคัดลอกบันทึก อีกครั้งไม่ใช่ปัญหา เพียงติดตั้งไดเร็กทอรีบันทึกระยะไกลไว้ในเครื่องผ่าน SSHFS และเรียกใช้เครื่องมือใดก็ได้ที่คุณต้องการแม้ว่าจะมีขนาดใหญ่หนักและขับเคลื่อนด้วย GUI ก็ตาม SSH รองรับการบีบอัดแบบ on-the-fly และ SSHFS ใช้ประโยชน์จากมันดังนั้นการทำงานกับไฟล์ข้อความจึงค่อนข้างเป็นมิตรกับแบนด์วิดท์
สำหรับวัตถุประสงค์ของฉันฉันใช้ตัวเลือกต่อไปนี้บน sshfs
บรรทัดคำสั่ง:
sshfs -o reconnect -o idmap=user -o follow_symlinks -C server.example.com:. server
ซื้อบัตรเครดิตออนไลน์จากแฮกเกอร์
ตัวเลือกบรรทัดคำสั่งเหล่านี้ใช้ทำอะไรได้บ้าง:
-o reconnect
- บอกให้ sshfs เชื่อมต่อ SSH end-point อีกครั้งถ้ามันพัง สิ่งนี้สำคัญมากเนื่องจากโดยค่าเริ่มต้นเมื่อการเชื่อมต่อขาดจุดเชื่อมต่อจะล้มเหลวทันทีหรือเพียงแค่หยุด (ซึ่งฉันพบว่าเป็นเรื่องธรรมดามากขึ้น) สำหรับฉันแล้วดูเหมือนว่านี่ควรเป็นตัวเลือกเริ่มต้น-o idmap=user
- บอกให้ sshfs แมปผู้ใช้ระยะไกล (เช่นผู้ใช้ที่เรากำลังเชื่อมต่อด้วย) ให้เหมือนกับผู้ใช้ภายใน เนื่องจากคุณสามารถเชื่อมต่อผ่าน SSH ด้วยชื่อผู้ใช้ที่กำหนดเองได้สิ่งนี้จึง 'แก้ไข' เพื่อให้ระบบภายในคิดว่าผู้ใช้เหมือนกัน สิทธิ์การเข้าถึงและสิทธิ์บนระบบระยะไกลจะใช้ตามปกติสำหรับผู้ใช้ระยะไกล-o follow_symlinks
- ในขณะที่คุณสามารถมีระบบไฟล์ระยะไกลที่ติดตั้งได้ตามอำเภอใจ แต่ฉันพบว่าสะดวกกว่าในการเมานต์ไดเร็กทอรีรีโมตไดเร็กทอรีโฮมของฉันและในนั้น (ในเซสชัน SSH ระยะไกล) ฉันสามารถสร้าง symlink ไปยังไดเร็กทอรีสำคัญที่อื่นบน ระบบระยะไกลเช่น /srv
หรือ /etc
หรือ /var/log
. ตัวเลือกนี้ทำให้ sshfs แก้ไข symlink ระยะไกลลงในไฟล์และไดเร็กทอรีทำให้คุณสามารถติดตามไปยังไดเร็กทอรีที่เชื่อมโยงได้-C
- เปิดการบีบอัด SSH สิ่งนี้ใช้ได้ผลดีกับข้อมูลเมตาของไฟล์และไฟล์ข้อความดังนั้นจึงเป็นอีกสิ่งหนึ่งที่ดูเหมือนว่าควรเป็นตัวเลือกเริ่มต้นserver.example.com:.
- นี่คือจุดสิ้นสุดระยะไกล ส่วนแรก (server.example.com
ในตัวอย่างนี้) คือชื่อโฮสต์และส่วนที่สอง (หลังโคลอน) คือรีโมตไดเร็กทอรีที่จะเชื่อมต่อ ในกรณีนี้ฉันได้เพิ่ม“.” เพื่อระบุไดเร็กทอรีเริ่มต้นที่ผู้ใช้ของฉันไปสิ้นสุดหลังจากล็อกอิน SSH ซึ่งเป็นโฮมไดเร็กทอรีของฉันserver
- ไดเร็กทอรีโลคัลที่จะติดตั้งระบบไฟล์ระยะไกลโดยเฉพาะอย่างยิ่งถ้าคุณใช้แบนด์วิดท์ต่ำหรือการเชื่อมต่ออินเทอร์เน็ตที่ไม่เสถียรคุณต้องใช้ SSHFS กับ การตรวจสอบคีย์สาธารณะ / ส่วนตัว SSH และตัวแทน SSH ในพื้นที่ ด้วยวิธีนี้คุณจะไม่ได้รับแจ้งให้ป้อนรหัสผ่าน (รหัสผ่านระบบหรือรหัสผ่านคีย์ SSH) เมื่อใช้ SSHFS และ คุณสมบัติการเชื่อมต่อใหม่จะทำงานตามที่โฆษณาไว้ โปรดทราบว่าหากคุณไม่ได้ตั้งค่าเอเจนต์ SSH เพื่อให้คีย์ที่ปลดล็อกตามที่จำเป็นภายในเซสชันของคุณคุณสมบัติการเชื่อมต่อใหม่มักจะล้มเหลว เว็บเต็มไปด้วยบทช่วยสอนคีย์ SSH และสภาพแวดล้อมเดสก์ท็อปที่ใช้ GTK ส่วนใหญ่ฉันได้ลองเริ่มตัวแทนของพวกเขาเอง (หรือ 'กระเป๋าเงิน' หรืออะไรก็ตามที่พวกเขาเลือกที่จะเรียกมันโดยอัตโนมัติ
การมีจุดคงที่บนอินเทอร์เน็ตซึ่งสามารถเข้าถึงได้จากระยะไกลจากทุกที่ในโลกและอยู่ในการเชื่อมต่อแบนด์วิธที่สูง - สำหรับฉันแล้วมันคือระบบ Raspberry Pi ของฉันและมันอาจเป็น VPS ทั่วไปก็ได้ - ลดความเครียดและช่วยให้คุณทำ ทุกประเภทด้วยการแลกเปลี่ยนและขุดเจาะข้อมูล
c corp กับ s corp ต่างกันอย่างไร
ต้องการความรวดเร็ว nmap และคุณเชื่อมต่อผ่านเครือข่ายโทรศัพท์มือถือหรือไม่ เพียงแค่ทำจากเซิร์ฟเวอร์นั้น ต้องการคัดลอกข้อมูลบางส่วนอย่างรวดเร็วและ SSHFS เป็น overkill หรือไม่? เพียงแค่ใช้ธรรมดา SCP .
อีกสถานการณ์หนึ่งที่คุณอาจพบว่าตัวเองต้องเผชิญกับเราเมื่อคุณมีสิทธิ์เข้าถึง SSH ไปยังเซิร์ฟเวอร์ แต่พอร์ต 80 (หรืออื่น ๆ ) ถูกปิดกั้นออกไปยังเครือข่ายภายนอกที่คุณเชื่อมต่อ ในการแก้ไขปัญหานี้คุณสามารถใช้ SSH เพื่อส่งต่อพอร์ตนี้ไปยังเครื่องภายในของคุณจากนั้นเข้าถึงผ่าน localhost
แนวทางที่น่าสนใจยิ่งกว่าคือการใช้โฮสต์ที่คุณเชื่อมต่อผ่าน SSH เพื่อส่งต่อพอร์ต อื่น เครื่องอาจอยู่หลังไฟร์วอลล์เดียวกัน ตัวอย่างเช่นหากคุณมีโฮสต์ดังต่อไปนี้:
คำสั่งเพื่อส่งต่อพอร์ต 80 บน 192.168.77.15 ไปยัง localhost: 8080 ผ่านเซิร์ฟเวอร์ foo.example.com SSH จะเป็น:
ssh -L 8080:192.168.77.15:80 -C foo.example.com
อาร์กิวเมนต์เพื่อ -L
ระบุโลคัลพอร์ตและที่อยู่ปลายทางและพอร์ต -C
อาร์กิวเมนต์เปิดใช้งานการบีบอัดดังนั้นคุณจึงสามารถประหยัดแบนด์วิดท์ได้อีกครั้งและในตอนท้ายคุณเพียงพิมพ์ชื่อโฮสต์ SSH คำสั่งนี้จะเปิดเซสชันเชลล์ SSH ธรรมดาไปยังโฮสต์และนอกจากนั้นให้ฟังบนพอร์ต localhost 8080 ซึ่งคุณสามารถเชื่อมต่อได้
หนึ่งในเทคนิคที่น่าประทับใจที่สุดที่ SSH ได้พัฒนาขึ้นในช่วงไม่กี่ปีที่ผ่านมาคือความสามารถในการสร้างอุโมงค์ VPN จริง สิ่งเหล่านี้แสดงตัวว่าเป็นอุปกรณ์เครือข่ายเสมือนบนทั้งสองด้านของการเชื่อมต่อ (สมมติว่ามีการตั้งค่าที่อยู่ IP ที่เหมาะสม) และสามารถให้คุณเข้าถึงเครือข่ายระยะไกลได้ราวกับว่าคุณอยู่ที่นั่นทางกายภาพ (ผ่านไฟร์วอลล์) ด้วยเหตุผลทางเทคนิคและความปลอดภัยสิ่งนี้ต้องใช้การเข้าถึงรูทบนเครื่องทั้งสองเครื่องที่เชื่อมต่อกับอุโมงค์จึงสะดวกน้อยกว่าการใช้การส่งต่อพอร์ตหรือ SSHFS หรือ SCP อันนี้มีไว้สำหรับผู้ใช้ขั้นสูงที่สามารถค้นหาได้ทันที บทเรียน เกี่ยวกับวิธีการทำ
ขาดความจำเป็นในการทำงานจากที่เดียว คุณสามารถทำงานได้จากทุกที่ที่มีการเชื่อมต่ออินเทอร์เน็ตแบบครึ่งๆกลางๆโดยใช้เทคโนโลยีและเทคนิคที่ฉันระบุไว้ (รวมถึงขณะรอรถของคุณที่ช่าง) ติดตั้งระบบต่างประเทศผ่าน SSH พอร์ตส่งต่ออุโมงค์เจาะเพื่อเข้าถึงเซิร์ฟเวอร์ส่วนตัวของคุณหรือข้อมูลบนคลาวด์จากระยะไกลในขณะที่มองเห็นชายหาดที่อาบแสงแดดหรือดื่มกาแฟที่เป็นมิตรกับสิ่งแวดล้อมระดับฮิปสเตอร์ในเมืองที่เต็มไปด้วยหมอก แค่ทำมัน!