안녕하세요. 새로 설치한 Discourse 포럼(디지털오션 드롭렛에서 설정됨)의 자동 백업을 가정 네트워크의 NAS 기기에 저장하는 방법을 찾고 있습니다. 어떻게 하면 될까요?
저는 코딩을 잘하지 못해서, 이 목적을 위해 플러그인을 만드는 것부터 어디를 시작해야 할지 감이 잡히지 않습니다.
안녕하세요. 새로 설치한 Discourse 포럼(디지털오션 드롭렛에서 설정됨)의 자동 백업을 가정 네트워크의 NAS 기기에 저장하는 방법을 찾고 있습니다. 어떻게 하면 될까요?
저는 코딩을 잘하지 못해서, 이 목적을 위해 플러그인을 만드는 것부터 어디를 시작해야 할지 감이 잡히지 않습니다.
가장 쉬운 방법은 어떤 종류의 자동화 작업(cron job)을 실행하는 것입니다. 사용하는 NAS에 따라 rsync와 같은 기본적인 Linux 명령어를 실행할 수 있습니다.
NAS와 Droplet을 연결할 수 있는 방법을 찾아야 합니다. 그런 방법을 찾은 후에는 플러그인을 사용하는 것이 과잉일 수 있습니다. 아래와 같은 코드를 NAS에서 cron job으로 실행하기만 하면 됩니다.
rsync -avz --progress -e "ssh -i ~/.ssh/id-rsa" example.com:/var/discourse/shared/standalone/backups /folder/in/the/nas
위에서 언급했듯이, 이러한 작업을 실행할 수 있는지는 어떤 NAS를 사용하느냐에 따라 달라집니다.
마리오, 감사합니다. 저는 OS6가 설치된 오래된 Netgear ReadyNAS Ultra 6를 가지고 있는데, 이 방식이 지원될 것 같습니다(확인해 보겠습니다).
제게는 백업할 파일/폴더를 어떤 것으로 지정해야 하는지가 문제의 일부인 것 같습니다. 데이터베이스만 백업하면 되는 건가요? (그리고 게시된 이미지/첨부파일 등도 모두 그 안에 포함되어 있을 거라고 짐작합니다.)
데이터베이스를 찾으려면 어떤 경로를 사용해야 하나요? 데이터베이스는 실제로 Discourse 디렉터리 안에 파일로 저장되어 있는 건가요? /var/discourse를 둘러봤지만, 내 미숙한 눈에는 데이터베이스 파일로 보이는 것을 찾지 못했습니다.
일일 백업을 활성화하고 다음 경로를 얻으려면
/var/discourse/shared/standalone/backups/default
제이, 감사합니다 - 그게 정답인 것 같네요!
'업로드 항목 포함 백업’을 설정해 두었다면, 나중에 다른 서버에서 처음부터 다시 시작해야 할 경우 백업해 두어야 할 다른 항목이 실제로는 없어도 되는지 가정해도 될까요?
(지금까지 사용했던 서드파티 플러그인이 갑자기 다시 다운로드 불가능해지지 않는다는 전제 하에)
또한, 일일 백업 디렉토리를 자동으로 정리하여, 예를 들어 서버에 일일 백업이 최근 7일분만 유지되도록 하는 방법이 있을까요?
네, 관리 대시보드에 관련 설정이 있습니다. 지금은 정확한 명칭이 기억나지 않네요. 전에 보내드린 스크립트는 이미 백업이 저장되는 기본 경로를 사용하고 있습니다.
다만, NAS에서 rsync와 해당 명령어를 사용하면 설정을 조정하여 NAS에 있는 오래된 백업도 함께 삭제할 수 있습니다. 이렇게 하시면 모든 준비가 끝납니다.
마리아노, 감사합니다.
ReadyNAS 포럼에서는 ReadyNAS에서 chron을 사용하는 것은 가능하지만 이상적이지 않으며, 내장된 'systemd timers’가 더 좋다는 제안이 있었습니다. 다만 원격 디렉터리 정리처럼 더 복잡한 작업도 가능한지는 잘 모르겠습니다.
현재 ReadyNAS에서 Discourse 서버로 연결을 시도할 때마다 ‘Permission denied (publickey)’ 오류가 발생하여 고생하고 있습니다. Digital Ocean의 SSH 사용자 목록에 ReadyNAS 공개 키를 추가해 두었는데도 말이죠.
진전이 있으면 여기 다시 보고하겠습니다. 이 방법을 시도해 보시는 다른 분들을 위해요.
청소 작업은 Discourse가 드롭렛에서 직접 수행하지만, rsync에는 수많은 옵션이 있으므로 백업 파일을 복사하는 과정을 원하는 대로 커스터마이징할 수 있습니다.
SSH 서버를 재시작하는 것을 잊지 마세요. 때로는 공개 키 관련 문제를 해결하는 데 도움이 됩니다.
마리아노, 감사합니다.
서버를 재시작해 봤는데도 여전히 다음 오류가 발생합니다:
Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(235) [Receiver=3.1.3]
아마도 제가 잘못된 사용자로 로그인하려고 해서 그런 것 같습니다. Digital Ocean에 공개 키를 추가할 때 지정한 이름으로 ReadyNAS에서 로그인해 봤고, 'root’로 시도해 보기도 했는데, 둘 다 작동하지 않습니다.
서버에 키를 사용하여 로그인한 적이 있으신가요? 예를 들어 Discourse를 설치하거나 애플리케이션을 다시 구축할 때처럼요.
(이론적으로는 그럴 수 없어야 하지만) 서버의 SSH에서 공개 인증이 비활성화되어 있거나, NAS가 로그인에 잘못된 키를 사용하고 있을 수도 있습니다.
명령어의 이 부분에서 "ssh -i ~/.ssh/id-rsa"의 키 이름과 경로를 올바른 것으로 변경하는 것을 잊지 마세요.
*** 수정 사항 ***
Mariano, 감사합니다. 결국 작동하게 되었습니다.
간단히 요약하면, 이 방법을 시도하려는 다른 분들을 위해;
ReadyNAS에서 SSH를 활성화합니다: ReadyNAS OS 6: SSH access support and configuration guides - NETGEAR Support
PuTTY를 사용하여 Digital Ocean 서버에 접속하고 다음을 입력합니다.
nano /root/.ssh/authorized_keys
에디터에서 ReadyNAS가 사용하는 공개 키 텍스트를 복사하여 붙여넣고, /root/.ssh/authorized_keys 파일의 끝에 추가합니다(이미 존재하는 키를 덮어쓰지 않도록 주의하세요).
ReadyNAS 백업 대화상자 설정에서 저는 다음을 사용했습니다::
이름: 원격 SSH를 통한 Rsync 백업 (드롭다운 선택)
호스트: mydomain.com (또는 서버 IP 주소)
포트: 22
경로: /var/discourse/shared/standalone/backups/default
로그인: root
(ReadyNAS의 SSH 접근 설정 지침을 올바르게 따랐다면, ReadyNAS의 공개/비공개 SSH 키 쌍에는 SSH 패스프레이즈가 연관되지 않습니다. 이는 상당히 중요한 사항이며, ReadyNAS 백업 대화상자에 패스프레이즈를 입력할 수 있는 기능이 없기 때문입니다.)
처음에는 이 과정이 완전히 작동하지 않았습니다 - ReadyNAS 백업 대화상자의 ‘테스트’ 버튼을 사용하여 이러한 설정으로 성공적으로 연결되었지만, 백업을 시작하면 ‘디스크 할당량 초과 (122)’ 오류가 발생했습니다.
그러나 몇 시간 후, 제 쪽에서 더 이상의 개입이 없었음에도 백업 프로세스가 자동으로 지정된 시간에 다시 시작되었을 때, 이번에는 정상적으로 작동했습니다.
아마도 이전에 다른 설정으로 연결을 시도하고 테스트했던 것이 잔여 효과를 남겨 문제를 일으켰거나, PC에서 PuTTY를 통해 root로 서버에 로그인한 동시에 FileZilla를 통해 root로 로그인(둘 다 root의 기본 키 사용)한 상태에서 ReadyNAS 디바이스 백업 유틸리티를 통해 root로 로그인(ReadyNAS의 공개 키가 root에 추가됨)을 시도한 것이 문제였을 수도 있습니다.