개요

TrueNAS는 오픈소스NAS OS중에서는 가장 강력하지만, 유저편의적인 부분은 많이 부족합니다. 특히, 개인 조립NAS를 헤놀로지로 입문한 경우, DSM의 높은 편의성 덕분에, TrueNAS를 다루는 것에 엄청난 벽을 느끼게 되고, 이내 적응하지 못한 채 떠나버리게 되죠.

이런 부분을 그나마 커버하기 위해 TrueNAS 안에는 여러 도커 이미지를 활용한 Apps기능이 있고, 이를 통해 부족한 부분을 메꾸어 사용할 수 있습니다.

그 중에서도, NAS OS를 고민했던 분들이라면 한 번쯤은 이름을 접해봤을 Nextcloud를 설치하고 TrueNAS의 Dataset과 연결해보겠습니다.

Nextcloud 설치하기

Dataset 구성하기

Nextcloud는 적어도 3개(앱 데이터, DB, DB백업)의 저장소를 필요로 합니다.

이 글에선 아래와 같이 3개의 dataset을 구성하고 www-data에게 권한을 모두 설정해줬습니다.

원래 권장되는 것은 소유자(Owner)를 www-data로 바꿔 주는 것이지만,

  1. 직접 설치해보니 db용으로 사용되는 Dataset의 소유자는 자동적으로 netdata로 바뀌어 버리기도 했고
  2. 직접 TrueNAS내부의 다른 Dataset을 넘겨줄 예정이기도 해서

www-data:www-data에게 모든 권한을 설정해주는 것으로 해결했습니다.

또한, db, dbbackup dataset안에는 다른 파일이 일체 존재하면 안됩니다. 숨김 파일, 혹은 휴지통이 활성화되어 있다면 해당 파일까지 제거해주셔야 db 컨테이너 deploy과정에서 에러가 발생하지 않습니다.

TrueNAS에서 Nextcloud 앱 데이터와 DB 데이터셋 구성 TrueNAS 카탈로그에서 Nextcloud 앱 검색 및 설치 시작

Apps에서 설치하기

Nextcloud는 TrueNAS 카탈로그에 공식 앱으로 등록되어 있기 때문에, 검색으로 바로 찾으실 수 있습니다. Install을 클릭해 진행합니다.

Nextcloud 설치 중 TrueNAS 기본 인증서 선택

인증서를 선택하는 화면이 있는데, TrueNAS기본 인증서를 선택해주고 넘어갑니다.
이후, 리버스 프록시를 적용할 예정이라면 인증서를 ‘없음’ 선택하고 넘어가야 합니다.

Nextcloud 관리자 계정 설정 및 관련 패키지 설치 체크

기본 관리자로 사용할 계정을 설정합니다.

그 아래 Install ffmpeg, Install smbclient는 체크하고 진행합니다.

Data Volume과 DB Volume에 구성해둔 데이터셋 경로 매핑

그리고 위에서 구성했던 dataset 3가지를 Data Volume, Postgres Data Volume(DB), Postgres Backup Volume(DB backup) 매칭시켜줍니다.

그 외에 추가적으로 Extra Host Path Volumes에서 필요한 dataset을 같이 넘겨줄 수 있습니다. 이 글에서는 제가 사용하는 임의의 dataset을 pod내부에 /mnt/sample에 넘겨보겠습니다. 이렇게 넘긴 데이터는 추후 nextcloud의 외부 저장소 플러그인을 통해 불러올 수 있습니다. 추가적으로 넘겨주는 저장소 또한 www-data:www-data에 권한 설정이 필요하므로 잊으시면 안됩니다.

2024년 5월 15일 변경 내용 : Nextcloud 29 업데이트에 따라 필수구성되어야 하는 Dataset에 변동사항이 있습니다 이 글을 참고해주세요

Extra Host Path Volumes에 외부 저장소로 사용할 데이터셋 경로 추가
nextcloud truenas setup 7
Nextcloud 앱 설치 시 Cronjob 구성 활성화 및 실행 주기 설정
nextcloud truenas setup 8
Nextcloud 자원 할당 제한 설정 및 설치 시작
nextcloud truenas setup 9
Cronjob 주기가 길게 설정되어 발생한 백그라운드 작업 경고
nextcloud truenas setup 10

기본적으로 Cronjob 구성은 강력하게 권장되는 요소이므로 체크해서 활성화시켜줍니다.

TrueNAS 기본값은 15분마다 작동되는 것인데, Nextcloud 개발자 권장은 매 5분마다 작동시키는 것입니다. 취향에 맞게 설정하고 넘어가면 됩니다.
(5분마다 작동되기를 원한다면 */15를 */5로 수정하면 됩니다.)

이 과정이 누락되거나, 시간 텀이 지나치게 길다면 아래 사진처럼 Nextcloud 내부에서 경고를 띄웁니다.

Nextcloud 앱 설치 완료 후 실행 중인 상태

마지막으로, Nextcloud에 자원 할당을 제한적으로 하고 싶다면 설정해주고 Install을 클릭해 설치를 시작합니다.

사양에 따라 첫 구성 시 상당한 시간이 소요되므로 인내심이 필요할 수 있습니다 =ㅅ=.

TrueNAS 쉘에 접속하여 Nextcloud config.php 파일 편집

Nextcloud 초기 설정하기

외부 파일/폴더 인식 설정

Nextcloud는 app 외부에서 발생한 파일 및 폴더의 변화를 감지하지 못합니다.

그래서 config파일에 별도 한 줄을 추가하는 과정이 필요합니다.

TrueNAS 쉘에 접속하여 아래와 같이 입력합니다.

nano /mnt/apps/nextcloud/nextcloud-data/config/config.php

경로는 개별 환경상 dataset주소를 따라가야 합니다.

파일 맨 아래 하단에 아래와 같이 한 줄을 삽입합니다.

'filesystem_check_changes' => 1,
config.php 파일에서 도메인 연결을 위해 trusted_proxies와 trusted_domains 수정

저장 후 Nextcloud를 재실행하면 됩니다.

도메인 연결하기

보유한 도메인을 연결하여 접속할 경우 config.php파일을 일부 수정해야 합니다.

nano /mnt/apps/nextcloud/nextcloud-data/config/config.php

수정해야 할 부분은 총 2곳입니다.

trusted_proxies와 trusted_domains입니다.

웹 포털을 통해 Nextcloud에 접속하여 초기 관리자 계정으로 로그인

리버스 프록시를 구성하여 운용중일 경우 해당 주소를 trusted_proxies에 기입합니다.

그 후, 연결할 도메인을 trusted_domains에 기입하면 됩니다.

기존에 적혀있던 번호에 하나씩 붙여가며 기입하시면 되며, 마지막에 “,”을 찍어주는 것을 잊지 마세요!

TrueNAS에서 각 사용자의 데이터가 nextcloud-data 데이터셋에 저장된 구조 확인

이후, 아래의 두 줄을 지워줍니다. 접속 경로와 무관하게 명기된 주소를 사용하게 하는 옵션으로, 리버스 프록시 사용 시 불필요합니다.

'overwritehost' => '10.10.10.10:9001',
'overwriteprotocol' => 'http',
Nextcloud 앱 메뉴로 이동하여 External Storage Support 플러그인 활성화

저장 후 pod을 재실행해주시면 됩니다.

Nextcloud 외부 저장소(External Storage) 설정

일단 Nextcloud가 실행되었다면 Web Portal버튼을 클릭해 접근할 수 있습니다.

관리자 설정의 외부 저장소 메뉴에서 로컬 데이터셋을 외부 저장소로 추가

Status가 Deploying이라 해도, 아래처럼 nextcloud 컨테이너의 log를 확인할 수 있는 단계에 왔다면, 접속 가능한 상태인 겁니다.

Nextcloud 파일 탭에 연결된 외부 저장소 폴더가 정상 표시된 결과 보안 및 설치 경고에 데이터베이스 일부 인덱스가 없다는 에러 메시지 출력

처음 생성 당시 설정했던 관리자 계정을 입력하여 로그인 해 줍니다.

Apps 메뉴에서 Nextcloud 쉘로 진입하는 과정

아래처럼 각 사용자의 userdata가 TrueNAS의 nextcloud-data(./data/user/files) dataset에 저장되고 있음을 알 수 있습니다.

Nextcloud 유지보수 모드가 활성화되어 접속이 제한된 상태 쉘에서 인덱스 추가 명령어를 실행하여 업데이트가 성공적으로 완료된 결과

상단의 프로필 아이콘을 클릭해 ‘앱’ 메뉴로 이동합니다.

유지보수 모드 종료 후 데이터베이스 인덱스 에러 메시지가 모두 사라진 보안 경고

검색창에서 ‘External Storage’를 검색하면 External Storage Support라는 앱을 볼 수 있습니다. ‘사용함’을 클릭하여 활성화 해 줍니다.

config.php 파일에 기본 국가 번호를 KR로 설정하는 구문 추가

다시 우측 상단의 프로필 아이콘을 클릭하여 ‘관리자 설정’ 항목으로 이동합니다.

개인 정보 설정 탭에서 관리자 계정의 알람용 이메일 주소 등록

좌측 메뉴 중 ‘외부 저장소’를 클릭한 뒤, 추가적인 외부 저장소를 지정할 수 있습니다.

일반적으로는 여기서 SMB를 이용해서 외부 저장소를 연동하는 방식을 많이 채택하지만, 맨 위에서 nextcloud컨테이너에 추가적으로 볼륨매핑했던 dataset을 그대로 가져오겠습니다.

이 방식은 SMB로 연결된 저장소보다 더 좋은 퍼포먼스를 보여줍니다.

기본 설정 탭의 이메일 서버 항목에 SMTP 서버 정보 입력

폴더 이름, 혹은 지정사용자의 경우 개인 환경에 맞게 설정하시면 됩니다. Nextcloud 내에 여러 개의 계정이 있고, 특정 저장소를 특정인만 접근할 수 있게 설정해야 한다면, 사용자를 특정하여 지정할 수 있습니다.

이와 같이 설정을 완료한 후, 파일 탭으로 돌아가 보시면, 아래처럼 저장소가 연결된 것을 확인할 수 있습니다.

이메일 서버 설정 완료 후 테스트 이메일 정상 수신 확인

‘데이터베이스에 일부 인덱스가 없습니다’ 해결하기

보안 및 설치 경고 쪽에서 아래와 같은 에러가 나타날 수 있습니다.

Nextcloud 외부 저장소 설정에서 시스템의 SMB 공유 폴더가 정상적으로 연결되어 좌측에 녹색 체크가 표시된 화면

일반적인 환경이라면 occ db:add-missing-indices명령어를 실행하는 것이 어렵지 않겠지만, 우리는 TrueNAS 속 환경이므로 약간의 까다로운 절차를 거쳐야 합니다.

일단 Apps내에서 Nextcloud 쉘로 이동합니다.

TrueNAS 환경에서 Apps 메뉴를 통해 Nextcloud 컨테이너의 쉘에 직접 접근하기 위해 진입하는 화면

/var/www/vhosts/wordpress 경로로 이동하여 su를 입력해 root계정으로 전환합니다.
(해외 커뮤니티 피셜 컨테이너에 sudo가 없다고 합니다)

cd /var/www/vhosts/wordpress
pwd
su

아래와 같이 입력합니다.

su -m www-data -c 'php $(pwd)/occ maintenance:mode --on'

유지보수 모드가 활성화되었다는 메세지가 출력됩니다.

이 때 Nextcloud에 접속해보면 하단과 같이 유지보수 중이라는 메세지가 출력됩니다.

명령어를 통해 유지보수 모드가 활성화되어 Nextcloud 웹 페이지 접속 시 유지보수 중 알림이 표시된 화면

이번엔, 아래와 같은 명령어를 입력해 줍니다. 그러면, 하단과 같이 oc_filecache table updated successfully 문구를 확인할 수 있습니다.

su -m www-data -c 'php $(pwd)/occ db:add-missing-indices'
occ 명령어로 데이터베이스에 누락된 인덱스를 추가하는 과정이 진행되어 성공 메시지가 출력된 쉘 환경 화면

다시 아래 명령어를 입력하면 유지보수 모드가 종료되었다는 문구가 출력되는 것을 확인할 수 있습니다.

이와 동시에, Nextcloud에 다시 접근 가능해지며, 데이터베이스에 일부 인덱스가 없다는 메세지가 사라진 것을 확인할 수 있습니다.

su -m www-data -c 'php $(pwd)/occ maintenance:mode --off'
유지보수 모드 종료 후 관리자 페이지의 보안 및 설치 경고에서 데이터베이스 인덱스 누락 관련 오류가 사라진 화면 config.php 파일에 기본 국가 번호 설정을 올바르게 추가하여 관련 경고 메시지가 사라진 보안 관리자 화면

‘기본 국가 번호가 설정되지 않았습니다.’ 해결하기

위의 요령으로 config.php 편집기를 열어준 뒤, 아래 내용을 추가하고 저장합니다.

해당 줄이 마지막 줄이라면 반점(,)을 찍지 마시고, 중간에 삽입하는 거라면 반점을 찍어주셔야 합니다.

'default_phone_region' => 'KR',

이후 Nextcloud를 재시작하면 기본 국가 번호가 설정되지 않았다는 메세지가 사라졌음을 확인할 수 있습니다.

‘서버 유지관리 창의 시작 시간이 설정되지 않았습니다.’ 해결하기

마찬가지로 config.php 편집기를 열어 아래 내용을 추가하고 저장해야 합니다.

'maintenance_window_start' => 1,

해당 숫자는 UTC시간대를 따라갑니다. 한국 시간은 UTC+9이므로, 값을 1시로 설정하는 것은 곧 10시로 설정한다는 뜻과 같습니다. 해당 작업은 서버에서 수행되는 작업이 있을 경우 최대 4시간까지 시작을 연장합니다. 유지관리 작업이 언제 시작되어도 무관하다고 하면 값을 100으로 설정하면 됩니다.

config.php를 편집하는 것이 내키지 않는다면, pod내부 쉘에서 명령어를 통해 수행할 수도 있습니다.

아래 예시는 한국시간으로 밤10시(22시)에 수행되도록 지시하는 명령입니다.

cd /var/www/vhosts/wordpress
pwd
su
su -m www-data -c 'php $(pwd)/occ config:system:set maintenance_window_start --type=integer --value=13'

‘이메일 서버 설정이 입력되지 않았거나 검증되지 않았습니다.’ 해결하기

맨 처음 Nextcloud 설치 시 설정했던 최초 관리자 계정으로 로그인한 뒤, 개인 설정 – 개인 정보 탭으로 이동하여 알람용으로 사용할 이메일 주소를 입력합니다.

이 과정 없이 SMTP설정만 진행하면, Nextcloud가 튕겨냅니다.

개인 정보 설정 페이지에서 관리자 계정의 알림 수신용 이메일 주소를 입력하고 저장하는 화면

다시 관리자 설정 – 기본 설정 탭에 가서 이메일 서버 항목에 필요한 정보를 채워 넣습니다.

메일 서비스 공급자의 SMTP 관련 설정은, 보통 IMAP설정 쪽에 있습니다.

관리자 기본 설정의 이메일 서버 항목에 메일 서비스 공급자의 SMTP 호스트와 포트 정보를 입력한 설정 화면

이후 테스트 메일을 발송하면, 제대로 작동하는 것을 확인할 수 있습니다

이메일 서버 설정 완료 후 테스트 메일을 발송하여 지정한 메일함으로 정상적으로 수신된 것을 확인하는 화면