라즈베리파이 파일서버 - lajeubelipai pailseobeo

라즈베리파이 클라우드 파일 서버로 활용하기: Seafile 사용

황제곰2020. 4. 7. 0:35

이번시간에는 라즈베리파이를 클라우드 파일 서버로 활용할 수 있는 방법에 대해 알아보도록 하겠습니다. 클라우드 파일서버로 활용할 수 있는 소프트웨어는 사실 여러가지가 있지만 라즈베리파이에서 대표적으로활용되는 프로젝트는 seafile, nextcloud, owncloud가 유명한 것 같습니다. 그 중 오늘은 seafile을 통해 클라우드 파일 서버를 구축하는 방법을 알아보도록 하겠습니다. 추후 nextcloud와 owncloud도 사용해보고 비교글을 남겨 보도록 하겠습니다.

◆클라우드 파일 서버◆

클라우드 파일서버는 인터넷(클라우드)를 통해서 사진, 영상, 문서 등의 다양한 파일을 자신의 컴퓨터에 잇는 것처럼 사용하게 해주는 서버를 의미하는데요. 대표적인 클라우드 서비스인 네이버의 N클라우드, 구글의 구글 드라이브, 마이크로소프트의 원드라이브, 드롭박스 등과 같은 기능을 제공하는 서버를 생각하시면 됩니다.

네이버 클라우드

저도 이런 클라우드서비스를 매우 유용하게 잘 사용하고 있는데요. 이런 서비스에 있어서 한가지 단점은 사용할 수 있는 용량에 제한이 있다는 점입니다.

구글 클라우드 유료 구입 용량

이럴 때 자신만의 클라우드 파일서버를 구축하면 자신이 소유하고 있는 하드디스크 용량만큼을 무료로 사용할 수 있기 때문에 비교적 저렴한 가격(하드디스크가격)으로 더 큰 용량을 사용할 수 있다는 장점이 있습니다.

◆Seafile◆

Seafile은 라즈베리파이를 활용해서 위에서 말한 클라우드 파일서버를 구축할 수 있께 해주는 소프트웨어 프로젝트인데요. Seafile 홈페이지에서는 아래와 같은 특징들을 자랑하고 있습니다.

Seafile 특징

설치해보고 시험삼아 조금 사용해 보았는데 아래 사진과 같이 인터페이스도 깔끔하고 사진, 동영상을 다운받지 않고 실시간으로 볼 수 있으며, 속도도 나쁘지 않은 것 같습니다.

인터페이스

오늘 실습에 필요한 준비물은 다음과 같습니다.

번호

부품명

수량

사진

1

라즈베리파이 4 또는 이하 버전

1

2

저장공간이 충분한 외장하드나

디스크

1

3

(라즈비안이 설치된)

micro sd카드

1

* seafile이 7.X 이후 버전부터 파이썬2에서 파이썬3로 변경되는 등 변경사항이 많아 포스팅 수정일(2021.6.8) 기준 최신 버전인 8.0.5 버전의 설치방법으로 업데이트 했습니다. 기존 파이썬 2를 사용하는 방법과는 호환되지 않으므로 참고 바랍니다.

그리고 가장 간단한 설정을 위해 db로 sqllite를 사용하는 방법으로 진행했습니다. db로 mysql을 사용하고 싶거나 서버로 아파치나 nginx를 사용하시고 싶은 분은 사용자매뉴얼을 참고 해 주시기 바랍니다.

설치를 위해서라즈베리파이의 터미널 창으로 진입해서 아래 순서를 따라 진행하면 됩니다.

* 라즈베리 파이에 라즈비안을 설치하고 부팅하는 부분과 관련된 포스팅은 아래를 참고해 주시기 바랍니다.*

- 라즈베리파이 설치: //blog.naver.com/emperonics/221712157659

1. 빌드파일 다운로드

seafile의 빌드파일을 다운받을 폴더를 하나 만들고 그 폴더에 빌드파일을 다운받습니다. 저는 cloud라는 폴더를 만들고 다운 받았습니다.

(2021년 9월 기준 최신 버전은 8.0.7입니다. 최신 버전 확인은 이 주소에서 확인 가능합니다)

$ mkdir cloud && cd cloud $ wget //github.com/haiwen/seafile-rpi/releases/download/v8.0.7/seafile-server-8.0.7-buster-armv7l.tar.gz

아래 명령어로 다운받은 빌드파일을 압축해제 해 줍니다.

$ tar xvzf seafile-server-8.0.7-buster-armv7.tar.gz

그러면 압축이 해제된 seafile-server-8.0.5폴더가 생기는데요. 해당 폴더로 들어가서 아래 명령어를 통해 설치스크립트 파일을 실행해 줍니다.

pi@raspberrypi:~/cloud/seafile-server-8.0.5 $ ./setup-seafile.sh

만약 sqlite가 설치되어 있지 않다는 오류가 발생하면 아래 명령어로 sqlite를 설치하고 다시 설치 스크립트를 실행해 줍니다.

$ sudo apt-get install sqlite3 $ ./setup-seafile.sh

서버이름을 지정하라는 아래의 메시지가 나오면 원하는 이름을 적어 줍니다.

서버 이름 입력: 영문으로

서버의 아이피를 적으라는 메시지가 나오면 라즈베리파이의 아이피 주소를 적어 줍니다. 아이피는 공유기를 통해서 확인하시거나 ifconfig 명령으로 확인 가능합니다.

라즈베리파이이 아이피 입력

seafile서버에서 사용할 포트를 지정합니다. 따로 변경하지 않으시면 8082가 기본으로 사용됩니다.

파일서버 포트 지정

아래와 같은 메시지가 나오면 엔터를 눌러줍니다.

This is your config information: server name: bearcloud server ip/domain: 192.168.0.75 seafile data dir: /home/pi/seafile/built-seafile-server-pkgs/seafile-data fileserver port: 8082 If you are OK with the configuration, press [ENTER] to continue.

그럼 이번에는 프론트엔드를 담당하는 seahub의 설정을 위한 메시지가 출력됩니다. 엔터를 눌러줍니다.

----------------------------------------------------------------- Seahub is the web interface for seafile server. Now let's setup seahub configuration. Press [ENTER] to continue -----------------------------------------------------------------

seafile은 내부적으로 파일공유나 관리는 c언어로 작성되어 있고 웹인터페이스 담당은 seahub라고 부르며 파이썬 django로 만들어 졌다고 합니다. 따라서 웹인터페이스 부분을 위한 seahub서버 설정을 진행하는 것입니다.

엔터를 누르면 아래와 같이 설정이 완료됩니다. seahub를 위한 포트는 기본으로 8000번으로 지정되는데요. 이 포트는 conf 폴더내에서 gunicorn.conf 파일을 수정해서 바꿔 줄 수 있습니다.

기본 설정 상태에서는 웹서버에 localhost만 접속이 가능하도록 설정이 되어 있어서 이 설정 값을 모든 호스트가 접속가능하도록 변경해 주어야 합니다. seafile-server-8.0.5의 상위 폴더에 보면 conf라는 폴더가 보이는데요(위에서 설치 스크립트 실행시 자동으로 이 폴더가 생성됩니다.) conf폴더내의 gunicorn.conf.py라는 폴더를 열어서 아래의 ip주소를 "127.0.0.1:8000" 에서 "0.0.0.0:8000"로 변경해 줍니다.

pi@raspberrypi:~/cloud $ sudo vim /home/pi/cloud/conf/gunicorn.conf.py

seafile은 파일관리를 위한 서버(seafile)와 웹인터페이스를 담당하는 서버(seahub)로 이루어져 있어서 이 두개의 서버를 모두 구동해 줘야 합니다.

먼저 seafile서버를 구동하기 위해 seafile-server-8.0.5 폴더내에서 아래 명령어를 입력해 줍니다.

$ ./seafile.sh start Starting seafile server, please wait ... ** Message: 04:44:36.654: seafile-controller.c(536): No seafevents. Seafile server started Done.

실행이 완료되면 이번에는 Seahub용 서버를 아래 명령어로 실행해 줍니다.

저같은 경우는 seahub 서버 구동시 아래 메시지를 출력하면서 서버가 실행되지 않았는데요.

Error:Seahub failed to start

이유를 확인하기 위해 아래 명령어로 구동해 보니

./seahub.sh start-fastcgi

아래와 같이 'Image' 이라는 모듈이 없다고 출력되었습니다.

ModuleNotFoundError: No module named 'Image'

Image모듈 사용이 사용되는 Pillow 모듈을 아래 명령어로 설치해 주고, Pillow 구동에 필요한 관련 패키지를 다운 받아 주었습니다.

$ sudo apt install python3-pip $ pip3 install -U Pillow -t /home/pi/cloud/seafile-server-8.0.7/seahub/thirdpart/ $ sudo apt install libopenjp2-7 libopenjp2-7-dev $ sudo apt install libtiff5 libtiff5-dev

locale 관련 설정 오류 메시지도 출력이 되었는데요. locale관련 문제가 발생하면 아래 방법대로 언어설정을 먼저 진행하고 seahub 서버를 실행해 주면 됩니다.

* locale 설정 *

locale을 입력하면 자신의 언어 설정값을 확인할 수 있는데요. 저는 아래와 같이 "en_GB.UTF-8" 로 설정되어 있는 것을 확인 할 수 있습니다.

pi@raspberrypi:~/cloud/seafile-server-7.0.5 $ locale LANG=en_GB.UTF-8 LANGUAGE= LC_CTYPE="en_GB.UTF-8" LC_NUMERIC="en_GB.UTF-8" LC_TIME="en_GB.UTF-8" LC_COLLATE="en_GB.UTF-8" LC_MONETARY="en_GB.UTF-8" LC_MESSAGES="en_GB.UTF-8" LC_PAPER="en_GB.UTF-8" LC_NAME="en_GB.UTF-8" LC_ADDRESS="en_GB.UTF-8" LC_TELEPHONE="en_GB.UTF-8" LC_MEASUREMENT="en_GB.UTF-8" LC_IDENTIFICATION="en_GB.UTF-8" LC_ALL=

이 값을 바꾸려면 우선 내가 사용할 수 있는 locale값을 먼저 확인해 봐야 합니다. 이를 위해서 locale -a 명령어를 입력하면 아래와 같이 내가 사용 할 수 있는 locale 설정 값을 확인 할 수 있습니다. 아래와 같이 en_US. UTF-8이 없는 것을 알 수 있습니다.

pi@raspberrypi:~/cloud/seafile-server-8.0.7 $ locale -a C C.UTF-8 en_GB.utf8 POSIX

따라서 해당 locale을 생성해줘야 합니다.

locale 생성을 위해서 아래와 같이 /etc/locale.gen 파일에 가서 en-US.UTF-8의 주석을 해제하고 저장해 줍니다.

pi@raspberrypi:~/cloud/seafile-server-8.0.7 $ sudo vim /etc/locale.gen

주석해제

그다음 locale-gen 명령어를 통해 해제한 locale값을 생성합니다. 그다음 locale을 다시 확인해 보면 en_US.UTF-8이 생성된 것을 확인 할 수 있습니다.

pi@raspberrypi:~/cloud/seafile-server-8.0.7 $ sudo locale-gen en_US.UTF-8 Generating locales (this might take a while)... en_GB.UTF-8... done en_US.UTF-8... done Generation complete.

pi@raspberrypi:~/cloud/seafile-server-8.0.7 $ locale -a C C.UTF-8 en_GB.utf8 en_US.utf8 POSIX

이제 새로 생성된 en-US.UTF-8로 시스템의 locale을 설정해 줍니다. /etc/default/locale 파일에서 locale을 설정해 주고 재부팅 해주면 됩니다.

pi@raspberrypi:~ $ sudo vim /etc/default/locale

LANG_ALL=en_US.UTF-8 LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

위 오류 해결후 다시 아래 명령어로 seahub 서버를 구동해 줍니다.

seahub 서버를 처음 실행하면 아래와 같이 관리자 계정을 물어보는 메시지가 출력되는데 이메일 계정을 하나 입력해 줍니다. 여기서 입력한 이메일계정이 seahub 접속용 아이디와 비밀번호이므로 잘 기억해 두어야 합니다.

관리자용 메일주소

그다음 비밀번호로 입력해 줍니다. 이 값도 seahublo 로그인시 필요하니 잘 기억해 둡니다.

확인용 비밀번호를 다시 한번 제대로 입력하면 완료가 되고 서버가 구동 됩니다.

동작중인 Seafile서버 및 Seahub서버를 종료시키고 싶으면 seafile-server-8.0.5 폴더내에서 아래 명령어를 입력하면 됩니다.

seafile은 이전에도 이야기 했다시피 내부적인 처리는 c언어로 하고 웹 인터페이스 부분은 seahub라는 django를 통해서 이루어 집니다.

따라서 웹서비스에 접속하기 위해서는 seahub에서 설정했던 8000번 포트로 접속해야 합니다. 아래와 같이 웹브라우저에서 라즈베리파이의 "아이피주소:8000"(Ex: 192.168.219.111:8000) 포트로 접속하면 seafile서버(seahub 프론트엔드) 가 실행되는 것을 확인 할 수 있습니다. 여기에 seahub설정시 등록한 아이디와 비밀번호를 입력하면 접속이 됩니다.

로그인

로그인을 성공하면 아래와 같은 화면이 뜨는데요. 여기 나오는 라이브버리에서 새로 폴더를 만들어나 엑셀, 파워포인트, 워드 등을 만들어 사용할 수 있고 폴더나 라이브러리를 다른 사용자와 공유할 수도 있습니다. 어렵지 않아 한번만 사용해 보면 파악하실 수 있을 정도 입니다.

Seafile 클라우드 서버가 가진 좋은 점 중 하나는 다양한 운영체제의 클라이언트 프로그램을 제공한다는 점입니다. 데스크탑용 클라이언트 프로그램을 사용하면 아래처럼 내가 원하는 폴더를 seahub와 연계된 드라이브로 설정해 놓으면 seafile의 라이브러리와 자동 싱크가 실행됩니다. 클라이언트용 프로그램은 여기 에서 다운 받으 실 수 있습니다.

클라이언트용 프로그램(자동 싱크)

서버와 폴더 및 파일 공유

또한 안드로이드 및 아이폰에서 어플도 지원하고 있어서 포트개방을 통해 외부에서 사용하실 분들은 사용해 보셔도 좋을 것 같습니다.

안드로이드 용 어플

오늘은 설치과정이 꽤 길었는데요. 패키지를 다운받을 때 시간이 좀 걸리므로 그 때 인내를 가지고 기다리시면 됩니다. ㅎㅎ

이제 용량 때문에 잘 관리하지 못했던 파일들 제대로 관리 할 수 있겠쬬?

그럼 이만 마치겠습니다.^^

◆ 저장 디스크 변경(외부 저장장치로 저장장치 변경)관련 내용 추가 ◆

Seafile의 웹서비스에서 업로드한 파일은 기본적으로 seafile 설치 디렉토리 상위 폴더의 seafile-data 폴더(위에서는 /home/pi/cloud/seafile-data)에 저장됩니다. 일반적으로 기본 설치 디스크는 용량이 작기 때문에 용량이 큰 외부 저장장치를 연결해서 사용하는 경우가 많을 텐데요. 이럴 경우에 외부 저장장치로 변경하는 방법에 대해서 알아보겠습니다.

원래 예전 버전에서는 ccnet폴더에 seafile.ini라는 설정파일에서 해당 저장장치의 경로를 지정해 주었었는데 최근버전에서는 방법이 바뀐것 같은데 설정방법을 찾을 수가 없네요ㅠ

임시 방편으로 외부 저장장치를 /home/pi/cloud/seafile-data 폴더로 마운트 해서 사용하는 방법으로 외부 저장장치를 사용도록 설정해 보겠습니다.

먼저 아래 명령어로 구동중인 seafile과 seahub 서버를 중지 시켜 줍니다.

~/cloud/seafile-server-8.0.7 $ ./seahub.sh stop ~/cloud/seafile-server-8.0.7 $ ./seafile.sh stop

그다음 아래 명령어로 기본세팅된 저장경로인 seafile-data 폴더를 백업합니다.(참고로 seafile은 빠른 데이터 처리를 위해 파일 형태를 변경시켜 저장하기 때문에 원본 형태로 파일을 백업하기 위해서는 seahub에 접속해서 파일을 다운받아 백업을 해야 합니다.)

~/cloud $ mv seafile-data2

다시 sefile-data라는 이름의 폴더를 생성해 줍니다.

~/cloud $ mkdir seafile-data

그다음 아래 명령어로를 통해 외부 저장장치(ex: /dev/sdb1)의 드라이브를 seafile-data에 마운팅 시켜 줍니다. 기본적으로 fat나 exfat 파일시스템 마운팅시에는 root권한으로 마운팅이 되기 때문에 아래 명령어를 통해 pi 유저 권한으로 마운팅을 시켜 주는 것입니다.

~/cloud $ sudo mount -o umask=000,uid=1000,gid=1000 /dev/sdb1 seafile-data

기존의 데이터 폴더에 db관련 파일과 설정 파일이 저장되어 있기 때문에 해당 파일을 마운팅된 새로운 폴더로 복사해 줍니다.

~/cloud $ sudo cp seafile-data2/* seafile-data/

다시 seafile서버와 seahub서버를 구동시켜 주면 됩니다.

~/cloud/seafile-server-8.0.7 $ ./seahub.sh start ~/cloud/seafile-server-8.0.7 $ ./seafile.sh start

웹브라우저를 통해 접속후 제대로 동작한다면 성공!

재부팅시에 마운팅된 외부 저장장치가 자동으로 언마운트되지 않도록 자동마운트 설정을 해 두는 것이 좋습니다.

Toplist

최신 우편물

태그