前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站。
介紹
有許多程序可以在不同計算機之間同步文件。Syncthing 是一個引人注目的新選擇,它跨平臺、完全開源、非常靈活且易于使用。
在本指南中,我們將向您展示如何開始使用 Syncthing 在兩個 Ubuntu 14.04 服務器實例之間同步數據。這將允許您根據配置的“監視”目錄在這些服務器之間無縫同步文件。
先決條件和目標
要完成本指南,您需要訪問兩個 Ubuntu 14.04 服務器實例。
在本指南中,我們將稱這些服務器為:
- serverone
- servertwo
這些將是平等的合作伙伴,因此沒有主/次關系。您應該在每臺服務器上配置一個常規用戶帳戶(您可以按照我們的 Ubuntu 14.04 初始服務器設置指南中的步驟 1-4 找出如何做)。
本指南中的常規用戶帳戶將被稱為 demouser
,但您可以使用任何用戶名。這不必與您的常規非根帳戶分開。
我們將在這兩臺機器上安裝和配置 Syncthing,以便可以在它們之間共享文件。完成本指南中概述的程序后,您應該有兩臺服務器,每臺服務器都有一個目錄,可以將更改鏡像到另一臺計算機。
我們將安裝 Syncthing 作為系統級應用程序,并創建一個 Upstart 腳本。這將允許我們的 Syncthing 實例在啟動時啟動并正確重啟,而不是像默認情況下那樣每次生成新實例。
初始下載和安裝
我們開始的第一件事是在每臺服務器上下載 Syncthing 二進制文件。
要找到最新打包的版本,您可以轉到 GitHub 上的發布頁面。在頁面底部有每種操作系統類型的按鈕。
!Syncthing release page
如果您的 Linux 系統是 32 位的,請選擇以 “syncthing-linux-386-...
” 開頭的選項。如果您使用的服務器是 64 位的,請選擇標記為 “syncthing-linux-amd64-...
” 的選項。不要將文件下載到本地計算機。而是右鍵單擊適當的文件,然后選擇“復制鏈接地址”或您有的類似選項。
我們將使用每臺服務器上的 wget
命令下載這些文件。在您的服務器上,鍵入 wget
,然后粘貼您復制的鏈接。版本和系統架構可能對您有所不同:
cd ~
wget https://github.com/calmh/syncthing/releases/download/v0.8.15/syncthing-linux-amd64-v0.8.15.tar.gz
現在,我們可以通過鍵入以下命令解壓 tarball:
tar xzvf syncthing*.tar.gz
進入新創建的目錄:
cd syncthing*
在這里,我們有一個名為 syncthing
的可執行文件,我們可以使用它來啟動服務。我們希望將其復制到我們的 PATH
中的位置,以便我們可以像普通應用程序一樣調用它。
通過以下帶有 sudo 權限的命令執行此操作:
sudo cp syncthing /usr/local/bin
現在,我們可以返回到我們的主目錄,并安全地刪除所有剩余的 Syncthing 文件和目錄。
cd ~
rm -rf syncthing*
在您的兩臺服務器上完成上述所有步驟。
應用程序現在已安裝,但在準備好使用之前,我們還需要做一些事情。
更改 GUI 選項以允許遠程查看
默認情況下,Syncthing Web 界面僅可供來自同一計算機的連接使用。由于我們正在使用遠程服務器,這將無法滿足我們的需求。
為了解決這個問題,我們需要編輯 Syncthing 配置文件中的一行。但是,配置文件尚未創建。
要自動創建文件,我們可以簡要啟動服務。鍵入 syncthing
命令以啟動此過程:
syncthing
syncthing
進程不是守護進程,這意味著它在當前 shell 會話中運行(我們將通過實施 Upstart 腳本來解決這個問題)。它將啟動進程并創建一些必要的文件。
片刻之后,您將看到有關您的節點 ID 的信息消息,看起來像這樣:
[2EQK3] 15:47:15 OK: Ready to synchronize default (read-write)
[2EQK3] 15:47:15 INFO: Node 2EQK3ZR77PTBQGM44KE7VQIQG7ICXJDEOK34TO3SWOVMUL4QFBHA is "server1" at [dynamic]
當您看到這個時,這意味著進程已正確初始化。現在,通過鍵入以下命令停止進程:
CTRL-C
這將停止進程并使我們再次控制終端。
現在,我們可以編輯創建的配置文件。在文本編輯器中打開文件:
nano ~/.config/syncthing/config.xml
查找處理 GUI 的部分。它應該看起來像這樣:
<gui enabled="true" tls="false"><address>127.0.0.1:8080</address>
</gui>
我們需要做的唯一更改是將本地主機地址(127.0.0.1
)替換為 0.0.0.0
,它代表所有網絡接口。完成后,此部分將如下所示:
<gui enabled="true" tls="false"><address>0.0.0.0:8080</address>
</gui>
完成配置后保存并關閉文件。稍后我們將通過 Web 界面進行更廣泛的配置。
再次在您要配置的兩臺服務器上完成這些程序。
創建 Upstart 腳本以處理服務狀態
接下來,我們將實現一個 Upstart 腳本來管理我們的進程。這將允許我們在服務器啟動時自動啟動 Syncthing 進程。它還將讓我們將其作為一個服務運行,而不會控制我們的會話。
我們將使用的 Upstart 腳本取自 Syncthing 討論板上的一個帖子。通過輸入以下命令,使用 root 權限創建并打開 Upstart 文件編輯器:
sudo nano /etc/init/syncthing.conf
在文件中,我們將使用以下行來控制我們的 Upstart 進程:
description "Syncthing P2P sync service"start on (local-filesystems and net-device-up IFACE!=lo)
stop on runlevel [!2345]env STNORESTART=yes
env HOME=/home/demouser
setuid "demouser"
setgid "demouser"exec /usr/local/bin/syncthingrespawn
讓我們來解釋一下這意味著什么。
我們首先給出了服務的一般描述。接下來,我們定義服務應該何時啟動和停止。在這里,我們告訴系統應在文件系統和非本地網絡接口啟動后啟動它。每當系統離開正常運行級別時,它將被停止。
接下來,我們將設置一個環境變量,告訴 Syncthing 不要使用自己的機制重新啟動。這是因為它實際上每次都會生成一個新進程,而不清理舊進程。為了避免這種情況,我們將稍后在這個 Upstart 腳本中實現重新啟動的能力。
接下來的環境變量設置了 Syncthing 將要使用的主目錄。這將用于查找正確的配置文件,并在 GUI 中預填字段。我們還使用 setuid
和 setgid
參數分別指定用戶和組。將這三個值修改為指向您用戶的信息。
接下來,我們設置要執行的實際命令的路徑。最后,我們使用 respawn
告訴 Upstart 如果進程被意外停止,則自動重新啟動該進程。這用于當 Syncthing 進程嘗試在內部重新啟動自身時,自動重新啟動進程(清理)。
完成后,保存并關閉文件。
現在,您可以通過輸入以下命令來啟動服務:
sudo initctl start syncthing
在兩臺服務器上完成上述步驟。
在 Web UI 中設置安全性
我們終于準備好通過 Web 用戶界面配置我們的實例。
通過訪問它們的公共 IP 地址和端口 8080
,登錄到每臺服務器的 Syncthing 界面:
http://server1_public_IP:8080
http://server2_public_IP:8080
您將看到主 Syncthing 屏幕:
!Syncthing main screen
我們需要做的第一件事是為我們的界面添加一些安全性。轉到右上角的“編輯”菜單,然后點擊“設置”選項:
!Syncthing settings
在右側,我們需要為 Web 界面設置用戶名和密碼。我們還希望為我們的會話啟用 TLS 加密,以便我們的流量在傳輸過程中無法被攔截,勾選“HTTPS”框:
!Syncthing security
完成后,點擊底部的“保存”按鈕。
您將看到一個提示消息,提示您重新啟動服務以使更改生效:
!Syncthing restart
點擊“重新啟動”按鈕。
您可能需要刷新頁面以正確重新加載更改。這樣做時,您很可能會遇到一個 SSL 警告,看起來像這樣:
!Syncthing SSL warning
這只是讓您知道簽署 SSL 證書的實體不在您的瀏覽器的受信任證書頒發機構列表中。這是預期的,因為證書是自簽名的。點擊“仍然繼續”是安全的。
然后,您將收到一個要求輸入您配置的用戶名和密碼的身份驗證提示:
!Syncthing username and password
填寫適當的值并登錄。您的界面現在對外部流量更加安全。
在兩臺服務器上完成這些步驟。
連接兩臺服務器并共享目錄
為了共享內容,Syncthing 要求連接的兩端將另一臺服務器添加到其節點列表中。然后,雙方還必須添加一個要同步的存儲庫(目錄)。
要添加一個節點,您將需要伴隨節點的 ID。您可以通過轉到右上角的“編輯”菜單,然后選擇“顯示 ID”選項來獲取此 ID。
這將顯示一個包含長 ID 的覆蓋層,您可以復制其中的 ID。它還會給您一個 QR 碼,以防您正在配置智能手機應用程序。復制第一個節點的 ID。
!Syncthing copy ID
在第二臺服務器上,點擊“編輯”菜單,然后選擇“添加節點”。
將出現一個覆蓋層,其中包含必須配置以添加另一臺服務器的字段。在“節點 ID”字段中,粘貼從第一臺服務器復制的 ID。在“節點名稱”字段中,選擇您希望用于另一臺服務器的任何描述性名稱。將“地址”保留為“動態”:
!Syncthing add node
完成后,點擊“保存”以添加新節點。
以相反的順序運行相同的過程,以便兩臺服務器在其配置中都有相反的服務器。暫時忽略重新啟動服務的任何請求,因為我們將首先進行一些其他更改。
在 Web 界面中,您連接到的節點顯示在右側。您共享的存儲庫顯示在左側。默認情況下,將在您的主目錄中創建一個名為 Sync
的文件夾作為默認存儲庫。如果菜單被壓縮了,請單擊名稱以展開列表:
!Syncthing default repo
點擊“編輯”按鈕以配置存儲庫。在底部,您將有選項將此存儲庫與您配置的任何節點共享。選中與另一節點相關聯的框,然后點擊“保存”按鈕:
!Syncthing share with node
現在,您可以點擊“重新啟動”按鈕以實施您的更改:
!Syncthing restart
現在,~/Sync
目錄中所做的任何更改都將鏡像到另一臺服務器。默認情況下,這將每 60 秒同步一次,但可以在“設置”菜單中更改。
您可以通過從“編輯”菜單中選擇“添加存儲庫”選項來添加希望鏡像的其他目錄。對于目錄關聯,每臺服務器上的“存儲庫 ID”必須相同。
結論
到這一步,你應該已經連接了兩臺服務器,并同步了一個目錄的內容。你可以通過添加額外的倉庫(目錄),或者添加額外的節點來擴展這個功能。
如果你計劃將系統文件同步到普通用戶無法寫入的目錄,你可能需要修改 Upstart 文件,以使用 root
賬戶或其他必要的用戶賬戶來執行所需的操作。