Dropbox에는 장점이 있습니다. 시스템에 새 백업이 생성되는 즉시 동기화합니다. 핵심은 새 백업을 로컬 Dropbox 폴더에 넣는 것입니다(제공된 cron 스크립트를 사용).
진행하기 전에 다음 사항을 알아두어야 합니다:
- Dropbox는 요금제 허용 범위 내에서 파일을 저장할 수 있습니다.
- 무료 요금제에서는 최대 3개의 장치를 Dropbox에 연결할 수 있습니다(참고로 Android 기기의 경우 이 제한을 우회할 수 있습니다).
- Linux 서버에서 Dropbox를 실행할 경우, 하나의 폴더만 동기화해야 합니다. Dropbox는 양방향 동기화 솔루션이므로, 클라우드의 모든 데이터를 서버에 채울 수 있습니다. 이는 서버의 저장 공간을 많이 차지할 수 있습니다.
- Discourse 백업 폴더와 로컬 Dropbox 백업 폴더 간에 동기화하기 위해 추가적인 rsync 스크립트를 작성해야 합니다. 이를 위해 백업에 2배의 공간이 필요합니다. 이전에는 Dropbox가 심볼릭 링크를 허용했지만, 현재는 이 기능이 사용 불가능합니다.
- 백업에 접근하려면 root 권한이 필요하지는 않지만, 이 가이드에서는 dropbox 데몬을 root로 실행합니다(아마도 안전하지 않을 수 있으니, 개선해 주세요).
첫째, Discourse에서 /admin/site_settings/category/backups 경로에서 백업을 설정해야 합니다(괄호 안은 저의 커스텀 값입니다).
최대 백업 수 (3) - Dropbox에 몇 개의 파일이 유지될지를 관리합니다
백업 주기 (1) - 매일
백업 시간 (UTC 3:30) - 기본값
백업 gzip 압축 수준 (6) - 압축 속도(1)와 작은 크기(9) 사이에서 선택하세요. 단, VPS의 경우 CPU 사용률이 장시간 높으면 호스트 제공업체가 서버를 재시작할 수 있습니다.
둘째, 셸 명령을 사용하여 서버를 Dropbox에 연결합니다(중요: 저는 root로 서비스를 실행하므로 이 단계에서는 root로 로그인되어 있습니다 - 따라서 일반 사용자 계정으로 시도해 볼 수 있습니다):
cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
# .dropbox-dist 디렉터리가 생성됩니다
# dropbox 데몬 실행
sh ~/.dropbox-dist/dropboxd
서버에서 Dropbox를 처음 사용할 때 고유한 웹 링크가 표시됩니다. 이 링크를 복사하여 웹 브라우저에 붙여넣고 지시를 따르세요. 그러면 홈 폴더에 Dropbox 디렉터리가 생성됩니다. 공식 Dropbox는 데몬을 관리하기 위해 Python 스크립트를 다운로드할 것을 권장합니다. 저는 이를 사용하지 않습니다.
데몬을 관리하는 명령:
dropbox status
dropbox start
dropbox stop
자동 시작 스크립트가 생성되었는지 확인하세요 (클릭하여 숨겨진 텍스트 확장):
#cat /etc/systemd/system/dropbox.service
[Unit]
Description=Dropbox Service
After=network.target
[Service]
ExecStart=/bin/sh -c '/usr/local/bin/dropbox start'
ExecStop=/bin/sh -c '/usr/local/bin/dropbox stop'
PIDFile=/root/.dropbox/dropbox.pid
User=root
Group=root
Type=forking
Restart=on-failure
RestartSec=5
StartLimitInterval=60s
StartLimitBurst=3
[Install]
WantedBy=multi-user.target
Discourse는 백업 파일을 제공하고 그 수와 주기를 관리합니다.
Crontab rsync 작업은 새 백업을 로컬 Dropbox 폴더로 복사합니다.
이후 Dropbox가 새 파일을 클라우드에 업로드합니다.
다음 날 밤 Discourse가 오래된 백업 파일을 삭제하면, rsync도 Dropbox에서 해당 파일을 삭제합니다.
셋째, 백업 사본을 위한 dropbox 폴더를 생성합니다:
mkdir ~/Dropbox/backups
넷째, 역방향 동기화를 위한 폴더를 준비합니다(불필요한 폴더 제외)
예를 들어, Dropbox 폴더에 하위 폴더와 파일이 있다고 가정해 보겠습니다:
backups
books
stuff
logo.png
backups를 제외한 모든 항목을 제외해야 합니다. 실제로 이 명령은 제외 목록에 항목을 추가합니다:
dropbox exclude add "Dropbox/books/"
dropbox exclude add "Dropbox/stuff/"
dropbox exclude add "Dropbox/logo.png"
만약 실수로 backups를 제외 목록에 추가했다면, 목록에서 항목을 제거하여 동기화로 되돌릴 수 있습니다:
dropbox exclude remove "Dropbox/backups/"
특정 백업의 현재 상태는 다음 명령으로 확인할 수 있습니다:
dropbox filestatus Dropbox/backups/niti-2021-01-21-033726-v20201218000001.tar.gz
다섯째, 로컬 동기화 및 캐시 클리링을 위한 스크립트 /root/rsync.dropbox를 준비합니다:
#!/bin/sh
rsync -avh --stats --progress --delete /var/discourse/shared/standalone/backups/default/ /root/Dropbox/backups/
rm -rf /root/Dropbox/.dropbox.cache/
여섯째, 로컬 시간 오전 8시에 crontab에 명령을 추가합니다: crontab -e
0 8 * * * /bin/bash /root/rsync.dropbox
UTC 오전 3시와 제 로컬 시간 오전 8시 사이에 시간 창이 있습니다 - Dropbox와 동기화하기 전에 백업이 완료되기에 충분한 시간입니다.
참고.
이 구성을 반 년 이상, 심지어 더 오래 동안 확인하지 않았습니다. 이제야 dropbox status 명령이 다음과 같이 반환된 것을 알게 되었습니다:
You're using an old version of Dropbox. Please update to the latest version to continue using Dropbox.
동기화는 여전히 작동하므로, 업그레이드하지 않을 것입니다. 마지막으로 심볼릭 링크 지원이 제거되었습니다.
