Nextcloud 는 파일 호스팅 서비스 중 하나이다. 구글 드라이브와 유사한
서비스를 직접 설치해서 사용하는 형태이다.

Nextcloud서비스는 DB를 이용한다. 이용가능한 DB는 SQLite, PostgreSQL, MySQL 혹은 MariaDB를 사용할 수 있다.
본 포스팅에서는 MariaDB를 사용할 예정이다.

MariaDB설치

Docker에서 볼륨으로 사용할 경로(/data/mariadb/data)를 만들기 위해, mkdir 함수를 사용하였다. mkdir -p 옵션을 사용하면, 해당 경로가 없으면 자동으로 경로를 생성한다.

sudo mkdir -p /data/mariadb/data

Docker를 통해 MariaDB를 생성하는 코드는 아래와 같다. 비밀번호는 자신에게 맞게 수정하면 된다.

sudo docker run -d \
-p 3306:3306 \
--name=mariadb \
--restart=unless-stopped \
-v /data/mariadb/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD='비밀번호' \
mariadb
-p 포트번호:Docker 환경 내에서의 port번호
-v 외부경로:Docker 환경 내에서의 내부경로
-e 옵션 : 서비스 수정할 옵션
--name=도커에서 사용할 이름
--restart=unless-stopped(재부팅 시 자동 실행)

Docker가 잘 실행되는지 확인하는 명령어는 아래와 같다.

sudo docker ps -a

Nextcloud 설치

앞서 만든 MariaDB를활용하여 Nextcloud를 설치하는 방법을 알아보겠다. 아래는 Cloud자료를 관리하기 쉽게하기 위해 필요한 경로를 생성하는 과정이다.

sudo mkdir -p /data/nextcloud/nextcloud
sudo mkdir -p /data/nextcloud/apps
sudo mkdir -p /data/nextcloud/config
sudo mkdir -p /data/nextcloud/data
sudo mkdir -p /data/nextcloud/theme

앞서 만든 MariaDB에서 DB를 생성하기 위해서 docker환경에 접속하여 MariaDB에 접속해보자.

sudo docker exec -it mariadb bash

mysql -u root -p

DB에 접속되었다면 nextcloud이름으로 DB를 생성해보자.  계정명@%에서 %는 모든 포트를 허용하겠다는 의미이다.

CREATE DATABASE nextcloud;
CREATE USER '계정명'@'%' IDENTIFIED BY '비밀번호';
GRANT ALL PRIVILEGES ON nextcloud.* TO '계정명'@'%';
FLUSH PRIVILEGES;
quit
exit

MariaDB와 Nextcloud의 network를 연결하기 위해서 network connect가 필요하다.

sudo docker network create nextcloud
sudo docker network connect nextcloud mariadb

sudo docker run -d \
-p 8585:80 \
--name=nextcloud \
--network=nextcloud \
--restart=unless-stopped \
-v /data/nextcloud/nextcloud:/var/www/html \
-v /data/nextcloud/apps:/var/www/html/custom_apps \
-v /data/nextcloud/config:/var/www/html/config \
-v /data/nextcloud/data:/var/www/html/data \
-v /data/nextcloud/theme:/var/www/html/themes \
-e MYSQL_HOST=mariadb \
-e MYSQL_DATABASE=nextcloud \
-e MYSQL_USER=계정명 \
-e MYSQL_PASSWORD='비밀번호' \
nextcloud

만약 Docker에서 Nextcloud를 삭제하고 싶은경우는 아래와 같이 수행하면 된다.

sudo docker stop nextcloud
sudo docker disconnect nextcloud mariadb
sudo docker network rm nextcloud 
sudo docker rm nextcloud

참고

추가로 Nextcloud와 ftp를 같이 활용하고 싶은 경우에는 아래와 같이 smbclient를 설치해준다.

sudo docker exec -it nextcloud bash
apt install smbclient
exit

설치가 완료된 Nextcloud에서 아이콘에서 앱을 클릭하여 External storage support를 설치

설치가 완료됬다면 설정에서 외부저장소를 클릭하여 사용하면 된다.

Nextcloud 파일이 지워지지 않는 경우

Nextcloud의 파일이나 폴더가 웹에서 삭제되지 않는 경우가 발생하여 구글링 해본 결과 config/config.php 파일을 수정하라는 답변이 있었다.

'filelocking.enabled' => true,
'memcache.locking' => '\OC\Memcache\APCu',

해당내용을 수정하게 되면 잘 삭제되는 것을 확인 할 수 있다.