컴퓨터/TrueNAS

TrueNAS 사용기 #5 - Next cloud 설치

jdowkd 2025. 11. 18. 19:40

1. next cloud 앱 설치하기

이제 드디어 쓸만해보이는 앱을 설치해봅시다.

TrueNAS 좌측의 앱으로 들어가서 [앱 발견] 을 눌러 새 앱을 추가합시다. Nextcloud 를 검색하거나, 스크롤을 내려 찾아서 선택하고 설치를 눌러줍니다. 만약 검색결과 버전이 여러개라면 stable 혹은 community 로 되어있는 버전을 선택해 주세요.

앱 설치를 누르면 이전에 npm을 설치했을 때와 마찬가지로, 이런저런 사전 설정을 요구합니다.

다음과 같이 설정해 줍시다.

 

1.1. Application name

앱 이름입니다. 무난하게 nextcloud 라고 적어줍시다.

 

1.2. Nextcloud Configuration

- 시간대 : 기본값으로 'Asia/Seoul' timezone 으로 설정되어 있을겁니다.

- Postgree Image : 사용할 DB의 버전을 선택하는 건데요, 목록이 여러개라면 최신 버전의 높은 숫자를 선택합시다.

- Admin User : 사용하실 관리자 계정 ID

- Admin Password : 사용하실 관리자 계정 비밀번호

- APT Package, Tesseract Language Codes : 추가 할 것 없어요.

- Imaginary : 활성화 하면 이미지 등의 미리보기 속도 같은것들이 빨라진대요. 일단 켜봅시다.

- 호스트 : 여기가 중요해요. 사용하실 클라우드 웹 UI의 인터넷 주소를 적어줘야 해요.

일종의 보안 역할도 하기때문에, 해당 주소가 아닌 인터넷 주소로 접속하면 차단시켜줍니다.

저는 개인 도메인을 사용하기 때문에, nas.개인도메인.com을 여기에 입력해줬어요. 앞전에 trueNAS로 접속할 도메인과 다른 도메인을 적어준건데, TrueNAS와 다른 도메인으로 접속하실 경우 여기에 그 도메인 주소를 적어주시구요. 개인 도메인이 없어서 ddns 주소를 사용해야 할 경우, 여기에 그 주소와 nextCloud로 접속에 사용할 포트 번호를 입력해 줍니다.

예를 들자면 ddns아이디.iptime.org:55555 같은 느낌으로요.

개인 도메인에 서브 도메인 주소를 이용할 경우, 포트번호 없이 해당 도메인 주소를 여기에 입력해주세요.

이도 저도 싫은경우 그냥 비워두셔도 됩니다.

- Data Directory Path : 기본값 /var/www/html/data 로 지정

- Redis & Database Password : 실제로 이 패스워드를 사용할 일은 없어요. 왜냐면 전문가가 아니기 때문이죠. 나중에 언젠가 유지보수에 이용할지도 모르는 일이니... 기억할 수 있는 패스워드로 지정해주세요.

- PHP Upload Limit : 클라우드에 저장할 수 있는 단일 최대 크기입니다. 기본 3GB로 되어 있을텐데, 이 값을 높이지 않으면 단일 파일로 3기가 이상의 파일은 저장할 수 없게 돼요. 고화질 영화 같은 경우 요즘 20GB는 거뜬히 넘을텐데요, 넉넉하게 늘려주세요. 저는 이딴걸로 제약 받기 싫어서 1000GB로 설정했어요.

- Max Execution Time : 하나의 작업이 실행될 수 있는 최대 시간입니다. 만약 100GB가 넘는 파일이 있다고 했을 때 기본값 30초가 지날동안 복사 작업이 끝나지 않으면 중지시켜버려요. 최소 300초(5분) 보다 긴 시간으로 설정해 주세요. 저는 파일 하나 옮기는데 30분은 넘지 않을듯 해서 1800초 설정 했습니다.

- PHP Memory Limit : 작업당 최대 메모리 사용량입니다. 작업에 메모리를 얼마나 사용하는지 몰라서 기본값인 512를 지정했어요.

- Op Cache 관련 : 기본값 사용해주세요. 뭔지 잘 모르겠네요. 일반적인 사용에 기본값도 충분하다고 합니다. GPT가..

- Cron : 활성화 해주세요. 활성화하면 일정 이라는 설정칸이 튀어나오는데, 기본값으로 */5 * * * * 이 입력되어 있을거예요. 기본값이 가장 적당하다고 합니다. 크론은 동기화를 비롯한 다양한 백그라운드 작업을 자동으로 반복하겠다는 뜻으로, */5 * * * * 라는 설정값은 매일 5분 간격이라는 뜻이랍니다. 반드시 활성화 하라네요. GPT가..

- Additional Environment Variables : 추가 환경 변수인데, 필요하더라도 여기서 사용하지 않습니다. 직접 파일을 편집할거예요.

 

1.3. Network Configuration

- WebUI Port : port bind mode는 기본값인 Publish port on the host for external access 로 해주시구요, Port Number를 적어줍시다. 실제 웹으로 접속할 포트 번호예요.

위에 Nextcloud 설정에서 호스트 설정할때 ddns 주소만 사용할 수 있는 경우 적었던 그 포트 주소구요, 개인 도메인으로 접속하더라도 이 포트 번호는 중요해요. npm에서 이 포트를 이용해 nextCloud로 접속합니다. 대충 5~6만번 대에 마음에 드는 숫자로 지정해주세요. 기본값도 좋긴 한데... 그럴리가 있겠냐만은, 공격자 입장에서는 기본포트가 참 맛있는 번호니까요 피해주세요.

- Host IP & DNS Options : 필요 없습니다.

- Certificate ID : 원래 개인 SSL 인증서가 있다거나, TrueNAS에서 로컬인증서를 생성해서 https로 호스팅 할 경우에는 여기에서 설정할것이 있지만, 우리는 npm을 이용해 https로 접속할겁니다.

참고로, TrueNAS 로컬 인증서로 호스팅할 경우에는 여기에서 해당 인증서를 선택하고 https 포트를 지정해서 사용할 수 있습니다만, 복잡하고 모지라고 얻을것이 없습니다. 기껏 꾸역꾸역 설정 했는데 접속할때마다 가끔씩 신뢰할 수 없다고 경고장 뜨면 한숨나와요.

빈칸으로 만들어 주세요.

 

1.4. Srorage Configuration

이부분이 조금 눈에 잘 안들어옵니다. 설정할것도 좀 있구요. 설명이 없으면 넘어갈 수 없는 영역입니다...

모든 스토리지 영역의 유형은 Host Path (Path that already exists on the system) 으로 설정해 주세요.

또, ACL 활성화는 꺼주세요.

- Nextcloud AppData Storage (HTML, Custom Themes, Apps, etc.) :

next cloud의 핵심 설정들이 저장될 공간입니다. 유형을 위의 밑줄과 같이 설정했다면 해당 파일들이 어디에 저장될 지 직접 선택할 수 있게 됩니다.

- Host Path : AppData들이 저장될 데이터 세트를 정해줘야 합니다. 앱을 설치하기 전에 미리 만들어놓지 않았다면 여기에서 중단하지 않고 세트를 추가하여 만들 수 있습니다.

+ 데이터 세트 생성 버튼을 누르면 현재 마우스로 선택한 데이터세트의 하위에 새로운 데이터세트를 추가로 생성할 수 있는데요, 2장에서 만들었던 Cloud 라는 데이터세트를 선택후 추가로 AppData 라는 데이터세트를 하나 생성 후 해당 데이터 세트를 클릭해줍니다. 그러면 현재 선택된 데이터 세트가 /mnt/Main/Cloud/AppData 가 될거예요.

- Nextcloud User Data Storage :

AppData와 마찬가지로 Host Path 에서 Cloud 데이터 세트에 UserData 데이터세트를 추가생성 후 선택해 줍시다.

/mnt/Main/Cloud/UserData 가 선택되었는지 확인.

- Nextcloud Postgree Data Storage :

역시 마찬가지로 Host Path에서 Cloud 하위에 DB_Data 데이터세트를 추가해준 후 /mnt/Main/Cloud/DB_Data 가 선택되었는지 확인해 줍니다.

- Automatic Permissions : 체크를 반드시 해주세요. 위에서 ACL을 설정 안하고 넘어갈 수 있는 옵션입니다.

 

1.5. Labels Configuration & Resources Configuration

건드릴건 없습니다.

 

2. NPM 설정

가장먼저 위에서 WebUI에 접속할 수 있는 포트를 지정했는데요, 공유기 포트포워딩 설정에서 해당 포트를 TrueNAS의 IP 주소로 포워딩 설정 해주세요. 이쯤되면 포워딩의 달인이 되었을 터이니 방법은 생략합니다.

일단 NPM 설정이긴 한데요, DDNS를 사용할 경우에는 설정할 것이 없으니 넘어가 주세요. 개인 도메인을 사용하는 경우에 설정이 추가됩니다.

도메인 제공업체에서 새로운 서브 도메인을 발급받아 주세요. DNS 레코드 관리에서 CNAME으로 ddns 주소를 매핑시켜주시구요, 호스트 이름으로 사용하실 서브 도메인을 입력해주세요. 저는 nas 로 생성했어요.

그래서 제 nextCloud로 연결될 도메인 명칭은 nas.도메인.com 입니다. 개인 도메인을 사용하면 뒤에 포트번호를 안쓰고 몹시 그럴싸한 자기만족 충만 120%가 되니까요, 개인적으로 자작 NAS 운영하실 정도면 하나 장만해보시는것도 추천드려요. 1년에 1~2만원 정도 합니다. 호스팅케이알이 가장 저렴한걸로 알고 있고, 가비아가 사아알짝 비싼데 사용하기 쉽고 서비스가 더 좋다고 알고 있어요.

아무튼, 이전번에 TrueNAS를 https로 연결하기 위해 설정했던것과 완전히 동일합니다.

  1. npm webUI로 접속
  2. Certificates으로 가서 새로운 Let's Encrypt via HTTP 생성 -> 신규 생성한 서브도메인을 적고 test -> save
  3. Hosts -> Proxy Hosts 이동 후 Proxy host 추가, 다음과 같이 설정
  4. [Details 탭] 
    1. Domain Names : 도메인 이름 입력
    2. Scheme : http
    3. Forward Hostname / IP : TrueNAS의 내부 IP 입력 (ex: 192.168.0.123)
    4. Forward Port : 위에 앱 설치할때 설정한 WebUI Port 입력 (ex : 55555)
    5. Access List : Publicly Accessible
    6. Option :
      1. cache Assets = OFF
      2. Block Common Exploits = ON
      3. Websockets Support = ON
  5. [SSL탭]
    1. SSL Certificates : 직전 Certificates 에서 생성한 ssl인증서 선택
    2. Force SSL = ON
    3. HTTP/2 Support = ON
    4. HSTS Enabled = OFF
    5. HSTS Sub-domains = OFF

 

위와 같이 설정 후 저장하여 생성합니다.

이후, 해당 도메인 주소를 주소창에 입력하면 외부에서 NPM으로 먼저 접속 후, HTTPS로 인식하여 그 연결을 TrueNAS의 지정한 Port로 넘겨줍니다. 우리는 nextCloud의 포트와 연결했으니 해당 주소로 nextCloud로 연결될 겁니다. nextCloud는 NPM에 의해 http로 접속되었지만 인증서를 통해 https로 연결되었음으로 인식하고 연결을 수립합니다.


ddns를 통해 접속하는 경우, 공유기 포트포워딩만 마치면 접속이 가능합니다. 앱 설치할때 호스트에 ddns주소:port로 기입했다면 해당 주소를 인터넷 주소창에 입력하면 nextCloud로 접속이 됩니다.

 

여기서 앱을 생성할 때 입력한 admin 아이디와 패스워드를 입력하여 로그인하여 사용할 수 있게 됩니다.

 

3. 로그인이 안돼......?

제가 겪은 일인데요, 로그인을 하면 잠깐 무언가 로딩하는 척 하더니 멀쩡해지더니 아무런 변화가 없었습니다. 이상해서 새로고침을 하니 이미 로그인이 되어 있네요......?

이건 뭔가 이상합니다... 매번 새로고침해서 사용할 수 있겠다만은, 찝찝해서 GTP한테 물어보니, config.php 파일을 조금 수정하면 된다고 합니다.

그래서 해봤습니다만... 잘 안되네요. 파일을 수정하려니 권한이 없다고 합니다... 조금 복잡한 절차가 필요했으나, 핵심만 간단히 추리면 다음과 같습니다.

  • config.php 파일은 디렉토리 권한과는 별도로 시스템 권한 외에는 아무도 읽고 쓰기가 불가능함.
  • 때문에 강제로 해당 파일의 권한을 풀어주고 내용을 수정, 다시 권한을 설정하는것으로 해결함.

먼저 TrueNAS의 제어판 좌측의 앱 -> nextCloud를 선택해 줍시다. [작업 부하] 라는 칸이 보일텐데요.

사진과 같이 nextcloud - 실행중 이라는 항목을 찾아주시구요, 우측의 첫번째 아이콘에 마우스를 올려보면 셸 이라고 나올거예요.

누르면 컨테이너 셸 이라고 화면이 바뀌는데, 검은 화면에 # 하나만 보일겁니다. 여기에 다음과 같이 입력해 주세요.

cd /var/www/html/config/
chmod 666 config.php

라고 입력하시면 권한이 모두에게 오픈됩니다. 명령어를 입력해도 딱히 화면에 뭔가 반응이 하나도 없을텐데, 그게 정상입니다. 만약 어쩌구 저쩌구 화면에서 명령어에 응답을 하면 명령어를 잘못 입력한것이니 다시 시도해 주세요.

권한 설정 666이 먹혔으면, 이제 config.php에 접근할 수 있습니다.

2장에서 접근했던것과 동일하게 Cloud에 smb로 접근해 봅시다. 우리가 만들었던 AppData, UserData, DB_Data 3개가 추가되어 있을겁니다. 여기서 AppData 폴더로 들어가면 config 폴더가 보일거예요.

해당 폴더에서 config.php파일을 메모장을 이용해 열어주세요. 위에 셸에서 권한을 666으로 설정했다면 무사히 열 수 있어요.

여기 맨 아래에 다음과 같은 항목을 추가해 주세요.

'overwritehost' => '접속할 주소',
'overwriteprotocol' => 'https',

접속할 주소에는 다음과 같이 입력할 수 있어요. (ex1: nas.domain.com) (ex2: name.iptime.org:55555)

ddns로 접속하는 경우 overwriteprotocol는 'http' 로 입력해야 할 수도 있습니다.

그리고, 맨 아래에 추가 하라는 말은 괄호에 주의해야 해요. 맨 마지막 줄에 있는 괄호 ); 보다 한줄 위에 입력해야 합니다.

수정후 파일을 저장해 주시고, 권한을 다시 원상복구 시킬거예요. 아까와 마찬가지로 앱 -> nextcloud 셸 접속 후 다음 명령어를 입력해 주세요.

cd /var/www/html/config/
chmod 444 config.php

 

 


사실 이 글을 쓰기 까지 근 10번에 가깝게 데이터 세트를 삭제하고, 앱을 지웠다 다시 설치해보고, 갖은 설정들을 이렇게 저렇게 다 바꿔가면서 시도해봤는데요, 매번 잘 안됩니다.....

이렇게 하면 되겠지 싶은게 안되고, 이게 되네? 싶은적도 있고, 재구현성을 위해 동일하게 생성해봤는데도 뭔가 항상 새로운 에러가 뜨고...

지금의 소개한 현재 설정이 가장 문제가 없던 설정 방법이예요. 사실 저 로그인이 안되는 문제도 "이제 완벽하다!" 싶은 설정에서 또 처음보는 문제였습니다... TrueNAS의 문제인지, NextCloud의 문제인지, docker 라던가, TrueNAS는 앱 환경을 쿠버네티스 라는 환경을 쓴다던데, 그게 문제인지... 아무튼 이렇게까지 운에 맡겨야 되는 설치 방법은 생전 처음이였어요.

진짜 최악은 nextCloud의 쉘과 TrueNAS의 쉘을 왔다갔다 하면서 듣도보도 못한 명령어들을 쓰면서 파고들어 뭔가 초기화 시키는 명령어를 써보고 해서 해결했던 적도 있는데요, 그땐 이 클라우드 포기해야 하나 싶었습니다. 진짜 GPT가 없었으면 당근에 팔아버렸을거 같아요.

무튼... 이제 원활이 설치를 마쳤으니 다음은 nextCloud의 간단한 설정과, 동기화, 스마트폰 앱을 통한 접근 등을 시도해 봅시다.