NextCloud 는 OwnCloud 의 포크입니다. OwnCloud 가 유료화되자 그것에 불만을 품은 개발자들이 갈라져 나와 개발했습니다.
NextCloud는 FreeNAS 의 plugin jail 으로 설치할 수 있습니다. 하지만 NextCloud 의 데이터베이스는 MariaDB Jail을 사용할 것입니다.
Plugin 으로 설치
WebUI 의 Plugins – Available 으로 들어갑니다. 그리고 nextcloud를 찾아 install 을 눌러 설치합니다.
DHCP 로 설치하는 것이 디폴트인데, Advanced configruration 으로 들어가 IP 를직접 설정해 주도록 하겠습니다.
설치에 시간이 좀 걸릴 수도 있습니다. 정상이니 기다려 주세요.
설치가 다 끝났다면 Plugin Installed Successfully 라는 메세지창이 나타납니다.
환경 구성
데이터셋 만들기
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
모두 수정했다면 서비스를 재시작 해 줍니다.
배경 작업 설정
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.php 를 5분마다 실행시키도록 설정했습니다.
리버스 프록시에 연결
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 공유를 연결해 주면 서버에 저장된 각종 자료에 간편하게 웹으로 접근할 수 있습니다.
업데이트
pkg 로 업데이트를 진행하니 오류가 생기더군요.
NextCloud 를 플러그인으로 설치하였습니다. 이 경우, 업데이트를 하는 방법은 크게 3가지가 있습니다.
- NextCloud 의 자체 업데이터를 사용해서 NextCloud 를 업데이트 하고, 패키지는 pkg 를 이용해 업데이트 한다.
- pkg 를 이용해 Nextcloud 와 패키지를 업데이트 한다.
- FreeNAS 의 플러그인 업데이트를 이용한다.
3가지 방법을 다 사용해 보았는데, 오류 안 나는 방법은 3번입니다. 1,2 번은 오류가 생겨서 NextCloud 가 맛이 가더군요.
FreeNAS 의 플러그인은 FreeNAS 의 WebUI 에서 업데이트가 가능합니다.
plugin – installed 로 이동해서
nextcloud jail 의 을 클릭해 update를 클릭해 줍니다.
업데이트가 진행됩니다. 업데이트 할 것이 없다면 잠시 후에 업데이트 성공 메세지가 표시되고, 업데이트 할 것이 있다면 진행 상황이 화면에 표시됩니다.
이 메세지가 나타나고 몇 초 뒤에 팝업 메세지가 닫힙니다. 업데이트 중에는 페이지를 닫거나 연결을 끊지 마세요.
마치면서
이것으로 nextcloud 를 plugin 방식으로 설치하고 MariaDB 에 연결하였습니다.
다음 포스팅은 Guacamole 에 대해 다룹니다.