웹사이트 검색

Ubuntu 14.04에서 디렉토리를 동기화하기 위해 동기화를 설치 및 구성하는 방법


소개

서로 다른 컴퓨터 간에 파일 동기화를 유지할 수 있는 많은 프로그램이 있습니다. Syncthing은 크로스 플랫폼, 완전한 오픈 소스, 매우 유연하고 사용하기 쉬운 강력한 새 옵션입니다.

이 가이드에서는 Syncthing을 사용하여 두 Ubuntu 14.04 서버 인스턴스 간에 데이터를 동기화하는 방법을 보여줍니다. 이렇게 하면 구성된 "감시\ 디렉터리를 기반으로 이러한 서버 간에 파일을 원활하게 동기화할 수 있습니다.

전제 조건 및 목표

이 가이드를 완료하려면 두 개의 Ubuntu 14.04 서버 인스턴스에 액세스해야 합니다.

이 가이드에서는 다음 서버를 호출합니다.

  • 서버원
  • 서버2

이들은 동등한 파트너이므로 1차/2차 관계가 없습니다. 이들 각각에 구성된 일반 사용자 계정이 있어야 합니다(여기에서 Ubuntu 14.04에 대한 초기 서버 설정 가이드의 1-4단계를 수행하여 방법을 확인할 수 있습니다).

이 가이드의 일반 사용자 계정 이름은 demouser이지만 원하는 사용자 이름을 사용해야 합니다. 루트가 아닌 일반 계정과 분리할 필요는 없습니다.

우리는 파일을 서로 공유할 수 있도록 각 컴퓨터에 Syncthing을 설치하고 구성할 것입니다. 이 가이드에 설명된 절차를 완료한 후에는 변경 사항을 다른 컴퓨터에 미러링할 디렉터리가 각각 있는 두 개의 서버가 있어야 합니다.

Syncthing을 시스템 수준 애플리케이션으로 설치하고 Upstart 스크립트를 생성합니다. 이렇게 하면 Syncthing 인스턴스가 부팅 시 시작되고 기본적으로 매번 새 인스턴스를 생성하는 대신 올바르게 다시 시작할 수 있습니다.

초기 다운로드 및 설치

시작하기 위해 가장 먼저 해야 할 일은 각 서버에 Syncthing 바이너리를 다운로드하는 것입니다.

최신 패키지 버전을 찾으려면 GitHub의 릴리스 페이지로 이동하세요. 아래쪽에는 각 운영 체제 유형에 대한 버튼이 있습니다.

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 웹 인터페이스는 동일한 컴퓨터의 연결에만 사용할 수 있습니다. 우리는 원격 서버로 작업하고 있기 때문에 이것은 우리의 목적에 맞지 않을 것입니다.

이 문제를 해결하려면 Syncthing 구성 파일에서 한 줄을 편집해야 합니다. 그러나 구성 파일은 아직 생성되지 않았습니다.

파일을 자동으로 생성하기 위해 서비스를 잠시 시작할 수 있습니다. 이를 시작하고 실행하려면 syncthing 명령을 입력하세요.

syncthing

syncthing 프로세스는 데몬이 아닙니다. 즉, 현재 셸 세션에서 실행됩니다(잠시 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>

변경해야 할 유일한 사항은 localhost 주소(127.0.0.1)를 모든 네트워크 인터페이스를 나타내는 0.0.0.0으로 바꾸는 것입니다. 완료되면 이 섹션은 다음과 같이 표시됩니다.

<gui enabled="true" tls="false">
    <address>0.0.0.0:8080</address>
</gui>

완료되면 파일을 저장하고 닫습니다. 나중에 웹 인터페이스를 통해 보다 광범위한 구성을 수행할 것입니다.

다시, 구성 중인 두 서버 모두에서 이 절차를 완료하십시오.

서비스 상태를 처리하기 위한 Upstart 스크립트 생성

다음으로 프로세스를 관리하기 위해 Upstart 스크립트를 구현합니다. 이렇게 하면 서버가 부팅될 때 Syncthing 프로세스를 자동으로 시작할 수 있습니다. 또한 세션을 제어하지 않고 서비스로 실행할 수 있습니다.

우리가 사용할 Upstart 스크립트는 Syncthing 토론 게시판의 게시물에서 가져온 것입니다. 다음을 입력하여 편집기에서 루트 권한으로 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/syncthing

respawn

이것이 무엇을 의미하는지 살펴보겠습니다.

서비스에 대한 일반적인 설명부터 시작합니다. 다음으로 서비스를 시작하고 중지해야 하는 시기를 정의합니다. 여기에서 우리는 파일 시스템과 로컬이 아닌 네트워킹 인터페이스가 나타난 후에 시스템이 시작되어야 한다고 시스템에 알리고 있습니다. 시스템이 일반 런레벨 중 하나를 벗어날 때마다 중지됩니다.

다음으로 Syncthing이 자체 메커니즘을 사용하여 다시 시작하지 않도록 지시하는 환경 변수를 설정합니다. 이는 실제로 이전 프로세스를 정리하지 않고 매번 새 프로세스를 생성하기 때문입니다. 이를 방지하기 위해 나중에 이 Upstart 스크립트 내에서 다시 시작하는 기능을 구현할 것입니다.

다음 환경 변수는 Syncthing에서 사용할 홈 디렉토리를 설정합니다. 이는 올바른 구성 파일을 찾고 GUI에서 필드를 미리 채우는 데 사용됩니다. 또한 각각 setuidsetgid 매개변수를 사용하여 사용자 및 그룹을 지정합니다. 사용자 정보를 가리키도록 이 세 값을 모두 수정합니다.

다음으로 실행할 실제 명령의 경로를 설정합니다. 마지막으로 respawn을 사용하여 프로세스가 조기에 중지된 경우 프로세스를 자동으로 다시 시작하도록 Upstart에 지시합니다. 이것은 Syncthing 프로세스가 내부적으로 다시 시작하려고 할 때 프로세스를 자동으로 (깨끗하게) 다시 시작하는 데 사용됩니다.

완료되면 파일을 저장하고 닫습니다.

이제 다음을 입력하여 서비스를 시작할 수 있습니다.

sudo initctl start syncthing

두 서버 모두에서 위의 단계를 완료하십시오.

웹 UI에서 보안 설정

마침내 웹 사용자 인터페이스를 통해 인스턴스를 구성할 준비가 되었습니다.

공용 IP 주소와 포트 8080을 방문하여 각 서버의 Syncthing 인터페이스에 로그인합니다.

http://server1_public_IP:8080
http://server2_public_IP:8080

기본 Syncthing 화면이 표시됩니다.

가장 먼저 해야 할 일은 인터페이스에 약간의 보안을 추가하는 것입니다. 오른쪽 상단 모서리에 있는 "편집\ 메뉴로 이동하여 "설정\ 선택 항목을 클릭합니다.

오른쪽에서 웹 인터페이스에 대한 사용자 이름과 암호를 설정해야 합니다. 또한 "HTTPS\ 상자를 선택하여 전송 중에 트래픽을 가로챌 수 없도록 세션에 TLS 암호화를 활성화하려고 합니다.

완료되면 하단의 "저장\ 버튼을 클릭합니다.

변경 사항을 적용하려면 서비스를 다시 시작하라는 메시지가 표시됩니다.

"다시 시작\ 버튼을 클릭합니다.

변경 사항을 제대로 다시 로드하려면 페이지를 새로 고쳐야 할 수 있습니다. 그렇게 하면 다음과 같은 SSL 경고가 나타날 가능성이 큽니다.

이는 SSL 인증서에 서명한 엔터티가 브라우저의 신뢰할 수 있는 인증 기관 목록에 없음을 알리는 것입니다. 이는 인증서가 자체 서명되기 때문에 예상됩니다. 계속하려면 "계속 진행\을 클릭하는 것이 안전합니다.

그러면 구성한 사용자 이름과 비밀번호에 대한 인증 프롬프트가 표시됩니다.

적절한 값을 입력하고 로그인하십시오. 이제 인터페이스가 외부 트래픽으로부터 더 안전합니다.

두 서버 모두에서 다음 단계를 완료하십시오.

두 서버 연결 및 디렉토리 공유

콘텐츠를 공유하기 위해 Syncthing은 다른 서버를 노드 목록에 추가하기 위해 연결의 양쪽 끝이 필요합니다. 그런 다음 양쪽 모두 동기화할 리포지토리(디렉토리)도 추가해야 합니다.

노드를 추가하려면 컴패니언 노드의 ID가 필요합니다. 오른쪽 상단의 "편집\ 메뉴에서 "ID 표시\ 옵션을 선택하면 이 ID를 얻을 수 있습니다.

이렇게 하면 복사할 수 있는 긴 ID가 있는 오버레이가 나타납니다. 또한 스마트폰 애플리케이션을 구성하는 경우 QR 코드를 제공합니다. 첫 번째 노드의 ID를 복사합니다.

두 번째 서버에서 "편집\ 메뉴를 클릭하고 "노드 추가\를 선택합니다.

다른 서버를 추가하기 위해 구성해야 하는 필드가 있는 오버레이가 나타납니다. "노드 ID\ 필드에 첫 번째 서버에서 복사한 ID를 붙여넣습니다. "노드 이름\ 필드에서 다른 서버에 사용할 설명이 포함된 이름을 선택합니다. \주소를 \동적으로 둡니다.

완료되면 "저장\을 클릭하여 새 노드를 추가하십시오.

이 동일한 프로세스를 역순으로 실행하여 두 서버 모두 해당 구성에서 반대 서버를 갖도록 합니다. 먼저 몇 가지 추가 변경 사항을 적용할 예정이므로 서비스를 다시 시작하라는 요청은 잠시 무시하세요.

웹 인터페이스에서 연결된 노드는 오른쪽에 표시됩니다. 공유 중인 리포지토리가 왼쪽에 나열됩니다. 기본적으로 Sync라는 폴더가 홈 디렉토리에 생성되어 기본 리포지토리 역할을 합니다. 메뉴가 압축되어 있으면 이름을 클릭하여 목록을 확장합니다.

리포지토리를 구성하려면 "편집\ 버튼을 클릭하세요. 하단에는 이 리포지토리를 구성한 모든 노드와 공유할 수 있는 옵션이 있습니다. 반대쪽 노드와 연결된 상자를 선택한 다음 " 저장” 버튼:

이제 "다시 시작\ 버튼을 클릭하여 변경 사항을 적용할 수 있습니다.

이제 ~/Sync 디렉토리의 모든 변경 사항이 상대 서버로 미러링됩니다. 기본적으로 60초마다 동기화되지만 "설정\ 메뉴에서 변경할 수 있습니다.

"편집\ 메뉴에서 "저장소 추가\ 옵션을 선택하여 미러링하려는 추가 디렉토리를 추가할 수 있습니다. "저장소 ID\는 연결할 디렉터리의 각 서버에서 동일해야 합니다.

결론

이 시점에서 두 개의 서버가 연결되어 단일 디렉터리의 콘텐츠를 동기화해야 합니다. 추가 리포지토리(디렉토리)를 추가하거나 동기화할 추가 노드를 추가하여 쉽게 확장할 수 있습니다.

일반 사용자가 쓰기 액세스 권한이 없는 디렉터리에 시스템 파일을 동기화하려는 경우 root 계정 또는 작업을 수행하는 데 필요한 다른 사용자 계정을 사용하도록 Upstart 파일을 수정해야 할 수 있습니다. 필요한 조치.