웹하드 – NextCloud

This entry is part 39 of 48 in the series FreeNAS 서버 만들기

NextCloud 는 OwnCloud 의 포크입니다. OwnCloud 가 유료화되자 그것에 불만을 품은 개발자들이 갈라져 나와 개발했습니다.

NextCloud는 FreeNAS 의 plugin jail 으로 설치할 수 있습니다. 하지만 NextCloud 의 데이터베이스는 MariaDB Jail을 사용할 것입니다.

Plugin 으로 설치

WebUI 의 Plugins – Available 으로 들어갑니다. 그리고 nextcloud를 찾아 install 을 눌러 설치합니다.

DHCP 로 설치하는 것이 디폴트인데, Advanced configruration 으로 들어가 IP 를직접 설정해 주도록 하겠습니다.

설치에 시간이 좀 걸릴 수도 있습니다. 정상이니 기다려 주세요.

설치가 다 끝났다면 Plugin Installed Successfully 라는 메세지창이 나타납니다.

환경 구성

데이터셋 만들기

20191209 수정
임시 업로드 위치 추가

Data/nextcloud_data

nextcloud 의 데이터가 저장될 dataset 입니다.

Temp/nextcloud_temp

파일 업로드 시 임시로 저장되는 위치입니다.

MySQL 삭제

Nextcloud 감옥의 mysql 을 사용하지 않고 MariaDB 의 mariadb 를 사용하도록 하겠습니다.

iocage console nextcloud

nextcloud 감옥으로 로그인 한 후

service mysql-server stop

mysql 서버를 중지시키고

sysrc mysql_enable="NO"

mysql 을 자동 시작하지 않게 한 뒤

pkg remove mysql56-server mysql56-client

Mysql 서버와 클라이언트를 삭제합니다.

마운트 포인트

mkdir /mnt/data /mnt/temp

데이터가 저장될 디렉토리와 임시 디렉토리를 만들어 줍니다.

exit

감옥에서 나간 다음

iocage stop nextcloud

감옥을 정지시키고

/mnt/Data/nextcloud_data/mnt/data

/mnt/Temp/nextcloud_temp /mnt/temp

마운트 해 줍니다.

권한 설정

iocage exec nextcloud chown -R www:www /mnt/data /usr/local/www/nextcloud/

/mnt/data/usr/local/www/nextcloud 디렉토리의 소유자를 www:www 로 설정하였습니다.

데이터베이스 만들기

iocage exec MariaDB mysql -u root -p

CREATE USER nextclouduser@’FEMP.Jail.IP’ identified by 'SAdfasZ3cm12casd1fv’;
CREATE DATABASE nextcloud_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
grant all privileges on nextcloud_db.* TO nextclouduser@’FEMP.Jail.IP’;
FLUSH PRIVILEGES;
exit;

유저명 : nextclouduser

비밀번호 : SAdfasZ3cm12casd1fv

DB명 : nextcloud_db

SAdfasZ3cm12casd1fv 을 그대로 사용하지 말고 자신만의 비밀번호를 사용해 주세요.

웹으로 설치

이제 http://nextcloud.jail.ip 에서 nextcloud 를 설치할 수 있습니다.

데이터 폴더는 앞서 만든 /mnt/data

데이터베이스는 MariaDB 에서 만든 것을 사용해 주세요.

초기 설치에 시간이 좀 걸릴 수도 있습니다. 기다려주세요.

보안 경고 해결

http://nextcloud.jail.ip/index.php/settings/admin/overview 으로 이동하면 보안 및 설치 경고가 나타납니다. 문제를 하나하나 해결해보도록 하겠습니다.

iocage console nextcloud

nextcloud 감옥에 로그인 해 줍니다.

신뢰 도메인

신뢰 도메인은 ‘nextcloud 에 접속할 수 있도록 허용된 주소’ 를 의미합니다. 리버스 프록시를 사용할 경우 백엔드의 IP(nextcloud 감옥의 IP) 와 외부에서 접속할 때 사용할 도메인 (cloud.example.com) 을 신뢰 처리해야 합니다.

vi /usr/local/www/nextcloud/config/config.php

'trusted_domains' =>
array (
  0 => '192.168.1.15',
),

위 구문을 찾아서

'trusted_domains' =>
array (
  0 => '192.168.1.15',
  1 => 'cloud.example.com',
),

와 같이 수정해 주세요. 리버스 프록시 쪽의 도메인을 신뢰 처리하는 것입니다.

php 환경 변수

php 환경 변수를 올바르게 읽어 올 수 없다는 문제가 발생하면 nextcloud 의 php-fpm 설정 파일을 수정해 줍니다.

vi /usr/local/etc/php-fpm.d/nextcloud.conf

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

위 구문을 파일 맨 아래에 붙여 넣어 줍니다.

opcache 설정

vi /usr/local/etc/php.ini

opcache 부분을 찾아 수정해 줍니다.

opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=1
opcache.save_comments=1

필자는 위와 같이 수정해 주었습니다.

X-Frame-Options “SAMEORIGIN” 와 X-Content-Type-Options nosniff 오류

좀 헤맸던 부분입니다. 리버스 프록시나 nextcloud 의 nginx 에 헤더를 넣어도 안되길래 왜 그런가 했는데, php 에서 이미 해당 설정이 되어 있어서 nginx 에 add_header 설정으로 헤더를 추가해 주면 헤더가 중복으로 들어가서 오류가 생기는 겁니다. nextcloud 와 리버스 프록시의 nginx 에 해당 설정을 넣지 말아야 합니다.

하드코딩된 보안 헤더는 아래 링크에서 확인하실 수 있습니다.

https://docs.nextcloud.com/server/13/admin_manual/configuration_server/harden_server.html

php.ini 파일 수정

vi /usr/local/etc/php.ini

해당하는 구문을 찾아 아래와 같이 수정해 줍니다.

expose_php = off
upload_tmp_dir = "/mnt/temp"
error_log="/var/log/nginx/php/error.log"
max_execution_time = 14400
max_input_time = 14400
memory_limit = 512M
date.timezone = Asia/Seoul
post_max_size = 102400M
upload_max_filesize = 95G
cgi.fix_pathinfo=0
allow_url_fopen = off

upload_max_filesize = 95G 으로 설정하였으니 최대 95Gb 크기의 파일을 업로드 할 수 있습니다.

mkdir -r /var/log/nginx/php/

php 에러 로그가 저장될 디렉토리를 만들어 줍니다.

service nginx restart && service php-fpm restart

모두 수정했다면 서비스를 재시작 해 줍니다.

배경 작업 설정

20191209 수정
cron 작업을 15분 에서 5분으로 수정하였습니다.

Nextcloud 의 설정 – 기본 설정 으로 이동하면 ‘배경 작업‘ 이라는 메뉴가 있습니다.

nextcloud 는 주기적으로 여러 작업을 합니다. 작업을 하는 방법에는 ajax, webcron, cron 등이 있는데, cron 으로 작업하는 것을 추천합니다.

vi /etc/crontab

맨 아래에 다음과 같이 입력합니다.

*/5	*	*	*	*	root	su -m www -c '/usr/local/bin/php -f /usr/local/www/nextcloud/cron.php'

www 유저 권한으로 cron.php5분마다 실행시키도록 설정했습니다.

리버스 프록시에 연결

exit

감옥 안에 있다면 나와 줍니다.

iocage exec Nginx_WAF vi /usr/local/etc/nginx/conf.d/nextcloud.conf

보안 헤더 문제가 있어서 security.conf 를 포함하는 대신 nextcloud 를 위한 보안 옵션을 작성해 주었습니다.

server {
    listen       443 ssl http2;
    server_name  cloud.example.com;
    root /nonexistent;

    client_max_body_size 100G;

    include options/ssl.conf;

############################For Nextcloud Security Options##########################

    add_header Strict-Transport-Security max-age=31536000;

    #hide php information
    proxy_hide_header X-Powered-By;

    modsecurity on;
    modsecurity_rules_file /usr/local/etc/modsecurity/modsecurity.conf;

################################END OPtions#########################################

    location / {
        proxy_pass http://Nextcloud감옥의IP/;
        include /otherconf/proxy.conf;
    }
}

iocage exec Nginx_WAF nginx -t

구문을 테스트하고 문제가 없다면

iocage exec Nginx_WAF nginx -s reload

리로드 해 줍니다.

https://cloud.example.com 에서 접속할 수 있습니다.

외부 저장소

Nextcloud 의 설정 – 외부 저장소 에서 SFTP 공유를 연결할 수 있습니다. SFTP 공유를 연결해 주면 서버에 저장된 각종 자료에 간편하게 웹으로 접근할 수 있습니다.

업데이트

20191209 수정
pkg 를 통해 업데이트 하는 것에서 FreeNAS WebUI 를 이용해 업데이트 하는 것으로 변경하였습니다. (플러그인 업데이트)
pkg 로 업데이트를 진행하니 오류가 생기더군요.
20200103 수정
해결됬습니다. 이제 업데이트 잘 됩니다.

NextCloud 를 플러그인으로 설치하였습니다. 이 경우, 업데이트를 하는 방법은 크게 3가지가 있습니다.

  1. NextCloud 의 자체 업데이터를 사용해서 NextCloud 를 업데이트 하고, 패키지는 pkg 를 이용해 업데이트 한다.
  2. pkg 를 이용해 Nextcloud 와 패키지를 업데이트 한다.
  3. FreeNAS 의 플러그인 업데이트를 이용한다.

3가지 방법을 다 사용해 보았는데, 오류 안 나는 방법은 3번입니다. 1,2 번은 오류가 생겨서 NextCloud 가 맛이 가더군요.

 

FreeNAS 의 플러그인은 FreeNAS 의 WebUI 에서 업데이트가 가능합니다.

plugin – installed 로 이동해서

nextcloud jail 의 을 클릭해 update를 클릭해 줍니다.

업데이트가 진행됩니다. 업데이트 할 것이 없다면 잠시 후에 업데이트 성공 메세지가 표시되고, 업데이트 할 것이 있다면 진행 상황이 화면에 표시됩니다.

이 메세지가 나타나고 몇 초 뒤에 팝업 메세지가 닫힙니다. 업데이트 중에는 페이지를 닫거나 연결을 끊지 마세요.

마치면서

이것으로 nextcloud 를 plugin 방식으로 설치하고 MariaDB 에 연결하였습니다.

다음 포스팅은 Guacamole 에 대해 다룹니다.

시리즈 네비게이션<< RSS 피더 – TTRSSGuacamole >>

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다