[Raspberry Pi] Seafile Cloud Server 구축 #1

문연수·2022년 7월 7일
0

Raspberry

목록 보기
9/11
post-thumbnail

 1년 가까이 Seafile Server 를 운영하며 정말 만족스럽게 사용하였다. 작년 설치 했을 때가 8.0.7 버전이였는데 금년에 9.0.2 버전이 출시 되었고, Raspberry Pi 역시 Bullseye 운영체제 발표에 더해 64-bit 의 지원 또한 이루어졌다.

 이번 장에서는 서버를 새롭게 업데이트 하는 기념으로 Seafile Cloud Storage Server 구축 방법에 대해 정리하여 올려보려 한다.

1. Raspberry Pi OS 설치

 필자는 2022-07-02 기준으로 Raspberry Pi OS Bullseye (64-bit) Lite 운영체제를 Raspberry Pi 4 Model B+ (8GB) 장비에 설치하고 그 위에 서버를 올릴 예정이다. 자세한 설치 방법은 다음의 글을 참조하길 바란다.

 운영체제의 설치가 끝났다면 아래의 명령어를 실행한 뒤 재부팅한다:

sudo apt update
sudo apt upgrade
sudo reboot -h now

2. Seafile Server 설치 준비

Seafile Server 를 구축하기 위해선 동작 수행에 필요한 패키지들을 설치해야 한다. 파이썬 패키지(서버가 파이썬으로 만들어졌으므로), 데이터베이스, 인증 도구, 프록시 서버 등등, 준비해야 되는 도구들이 상당히 많다.

sudo apt-get install -y python3 python3-setuptools python3-pip
sudo apt-get install -y memcached libmemcached-dev
sudo apt-get install -y libmariadb-dev mariadb-server
sudo apt-get install -y libffi-dev

sudo pip3 install --timeout=3600 django==3.2.* Pillow pylibmc captcha jinja2 sqlalchemy==1.4.3
sudo pip3 install --timeout=3600 django-pylibmc django-captcha python3-ldap  pycryptodome==3.12.0 cffi==1.14.0
sudo pip3 install --timeout=3600 pymysql mysqlclient

 패키지 정보는 모두 공식 홈페이지에서 가져왔으나 몇 가지 다른 점들이 있다:

  1. libmysqlclient-devlibmariadb-dev 로 대체
  2. mariadb-server 패키지 추가. (Raspberry Pi 운영체제 배포판의 패키지 매니저는 MySQL 의 설치를 허용하지 않는다. 대신 mariadb 로 대체 가능하므로 해당 패키지로 변경하면 된다.)
  3. libffi-dev 패키지 추가 (libffi-devcffi 설치 시에 필요한 패키지이므로 설치)
  4. pymysql 패키지 추가 (이후에 진행하게 될 setup-seafile-server.sh 스크립트 실행에 필요한 패키지)

3. MariaDB 보안 설정

MariaDBseafile 서버에서 이용되며, 초기 비밀번호를 등록하지 않는다면 서버 설정 스크립트가 원활하게 실행되지 않는다. (설치 중, MariaDBroot 유저 비밀번호를 묻는데 설정하지 않았다면 다음 단계로 넘어갈 수 없다)

  따라서 MariaDB 관련 설정을 모두 진행한 후 다음으로 넘어가려 한다:

sudo mysql_secure_installation

 위 명령어를 입력하면 아주 무시무시하고 복잡한, MariaDB 의 보안 설정 질문들을 쏟아 내는데, 천천히 읽고 순서대로 따라가면 된다.

NOTE: 여기에서 계정(account) 과 유저(User) 라는 용어를 섞어 쓰는데 이 둘은 서로 다른 의미를 지닌다. 계정이란 리눅스 시스템 내의 유저를 의미하며, 유저는 데이터베이스에 존재하는 아이디를 뜻한다.

- Enter current password for root (enter for none)

 현재 MariaDBroot 유저 비밀번호를 묻는데, 당연히 해당 스크립트를 처음 실행했으며, 방금 막 설치했으므로 그 어떠한 비밀번호도 설정되어 있지 않다. 따라서 Enter 를 눌러 그냥 다음으로 넘어가면 된다.

- Switch to unix_socket authentication [Y/n]

unix_socket 에 대한 보안 설정 여부를 묻는데, 이미 root 계정 에 대한 보안이 적용되어 있으므로(처음 Raspberry Pi OS 를 설치할 때 유저 비밀번호를 설정 했으므로) 현 시점에서는 n 을 입력해서 그냥 넘어가면 된다.

- Change the root password? [Y/n]

 여기에선 Y 를 입력하여 root 유저의 비밀번호를 설정한다. 여기에서 설정한 비밀번호가 이후의 Seafile Server 설정 스크립트에서 사용될 것이다.

- Remove anonymous users? [Y/n]

 테스트를 위해 MariaDB 는 익명 계정을 만들어 놓는데 Seafile 서버에는 아무런 필요가 없으므로 Y 를 입력하여 익명 계정을 삭제하면 된다.

- Disallow root login remotely? [Y/n]

 원격지에서 root 계정에 대한 로그인을 비허용할지 묻는 질문인데 Y 를 입력하여 비허용 하면 된다.

- Remove test database and access to it? [Y/n]

 마찬가지로 테스트를 위해 만들어지는 불필요한 데이터베이스이므로 Y 를 입력해서 제거한다.

- Reload privilege tables now? [Y/n]

 위에서 진행한 보안 관련 설정을 지금 당장 적용할지 묻는 질문이다. Y 를 입력해서 바로 적용하고 빠져나오면 된다. 여기에서 안 하면 직접 MariaDB 에 접속하여 특권(privilege) 작업에 대한 처리를 Flush & Reload 해야 된다.

4. Seafile 유저 생성

- 프로그램 디렉토리 생성

Seafile Server 를 설치하고 관리할 새로운 디렉터리를 생성한다. 사실 어디에 설치해도 무방하나 공식 홈페이지에서는 다음의 경로를 추천하며, 모든 설치 과정이 해당 디렉토리 아래에서 이뤄지기에, 이번에는 필자 또한 그대로 따라갈 것이다:

sudo mkdir /opt/seafile
cd /opt/seafile

- 새로운 유저 생성

Seafile Server 를 실행하고 또 관리할 유저인 seafile 유저를 생성한다. 물론 생성하지 않고 기본 유저로 진행하여도 되며 다른 이름의 계정을 생성해도 좋다. 그러나 해당 장에서는 공식 홈페이지의 진행 방식을 따라갈 것이다:

sudo adduser seafile

 위 명령어를 입력하면 새로운 유저를 위한 user id, usergroup, 그리고 홈 디렉터리를 생성한다. 마지막으로 유저의 비밀번호를 설정한다.

 비밀번호 설정까지 끝나면 몇 가지 유저 정보를 프롬프트하는데, 입력하기 귀찮다면 그냥 전부 다 Enter 를 입력해서 스킵해도 된다. 필자는 Full NameHome Phone 만 채우고 나머지 정보는 다 비운 채로 진행했다.

- Seafile Server 디렉토리의 소유자 변경

sudo 명령어를 통해 만든 /opt/seafile 디렉토리의 소유자를 seafile 로 변경한다:

sudo chown -R seafile: /opt/seafile/

 끝났다면 아래의 명령어를 입력하여 seafile 유저로 로그인한다:

su seafile

5. Seafile Server 다운로드

Seafile Server 프로그램은 seafile 공식 github 저장소에서 다운로드가 가능하다. 2022-07-05 기준, 9.0.2 가 최신 버전이므로 이를 설치하려 한다. 만일 독자가 선택한 Raspberry Pi 운영체제의 버전이 Bullseye (64-bit) 가 아니라면, 독자가 설치한 운영체제에 맞는 서버 프로그램을 다운로드 해야한다:

cd /opt/seafile
wget https://github.com/haiwen/seafile-rpi/releases/download/v9.0.2/seafile-server-9.0.2-bullseye-arm64v8l.tar.gz
tar -xvzf seafile-server-9.0.2-bullseye-arm64v8l.tar.gz

 위 과정을 그대로 따라왔다면 /opt/seafile 아래의 디렉토리와 파일이 다음과 같은 구성을 가지게 될 것이다.

6. Seafile Server 설정

Seafile Server 디렉토리의 setup-seafile-mysql.sh 스크립트를 실행한다:

 그럼 위와 같은 메세지가 프롬프트가 되는데 ENTER 를 눌러 계속 진행한다.

- 서버 이름과 주소 설정

 처음 세 질문은 서버의 이름과 주소를 묻는다. 서버의 이름을 알아서 설정하면 되며, 필자의 경우 이미 사용하는 도메인이 존재하기에 IP 대신 도메인 주소를 입력했다.

 단, 포트 번호는 변경하지 말고 그대로 사용하는 것을 추천한다. 이후에 80 포트(HTTP) 그리고 443 포트(HTTPS) 를 사용하더라도 Reverse Proxy 를 거치면 되므로 전혀 걱정할 필요없다. (이후의 글에서 더 자세하게 설명할 것이다.)

- Seafile 데이터베이스 구축

 이전의 사용하던 데이터베이스를 사용할지, 아니면 새로이 구축할 지 묻는 것이다. 초기 유저라면 1 을 입력해서 새로운 데이터베이스를 만들면 되고, 이미 사용하던 데이터베이스가 있다면 2 를 입력하여 불러오면 된다.

 필자는 바닥부터 다시 설정할 것이므로 1 을 입력해서 데이터베이스에 대한 설정 먼저 진행할 것이다. 2 를 입력하여 기존 데이터베이스를 불러올 예정이라면 공식 홈페이지의 글을 참조하길 바란다.

- MySQL 서버 설정 및 root 유저 정보 등록

 다음으로 MySQL Server 의 주소와 비밀번호를 묻는데 주소와 비밀번호는 전부 기본값을 사용하면 되고 root 유저의 비밀번호만 앞서 설정했던 비밀번호를 이용하면 된다.

- seafile 유저 데이터베이스 정보 등록

 이제 seafile 유저 데이터베이스를 생성하는데 Enter 를 입력하여 전부 기본값을 사용하면 된다.

- 설정 구성 확인

  위의 모든 과정을 수행하면 현재 설정한 Seafile Server 의 설정 정보를 요약하여 보여준다. 위 과정을 그대로 따라왔다면 server nameserver ip/domain 부분을 제외한 나머지 부분이 위와 동일할 것이다.

- 데이터베이스 구축

 끝으로 Enter 를 누르면, 위에서 입력한 정보를 바탕으로 Seafile Server 를 위한 데이터베이스를 구축한다.


 최종적으로 위와 같은 형태의 디렉토리와 파일들의 구성을 가지게 된다.

7. 서버 실행하기

cd /opt/seafile/seafile-server-latest
./seafile.sh start
./seahub.sh start

 위 명령어를 입력하여 Seafile Server 를 구동한다.

정상적으로 실행되는 것을 확인했다면 일단 아래의 명령어를 입력하여 서버를 종료시킨다.

./seahub.sh stop
./seafile.sh stop

8. 설정 파일 수정하기

Seafile 서버 구동 시, 기본으로 생성되는 설정파일은 Reverse Proxy 사용을 전제로 만들어져 있기에 Reverse Proxy 를 등록하지 않았다면 접속이 제대로 이뤄지지 않을 수 있다. 따라서 /opt/seafile/conf 경로에 존재하는 이하의 파일들을 수정할 필요가 있다:

- seahub_settings.py

# -*- coding: utf-8 -*-
SECRET_KEY = "*****************************************************"

SERVICE_URL = 'http://0.0.0.0:8000/'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'seahub-db',
        'USER': 'seafile',
        'PASSWORD': '*************',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'OPTIONS': {'charset': 'utf8mb4'},
    }
}

 중간에 SERVICE_URL 을 등록해준다.

- ccnet.conf

[General]
SERVICE_URL = 'http://0.0.0.0:8000/'

[Database]
ENGINE = mysql
HOST = 127.0.0.1
PORT = 3306
USER = seafile
PASSWD = *************
DB = ccnet-db
CONNECTION_CHARSET = utf8

 여기에서도 마찬가지로 SERVICE_URL 을 등록해준다.

- gunicorn.conf.py:

import os

daemon = True
workers = 5

# default localhost:8000
bind = "0.0.0.0:8000"

# Pid
pids_dir = '/opt/seafile/pids'
pidfile = os.path.join(pids_dir, 'seahub.pid')

# for file upload, we need a longer timeout value (default is only 30s, too short)
timeout = 1200

limit_request_line = 8190

bind 부분의 주소를 변경해준다. 이제 다시 서버를 실행시킨 다음 브라우저를 통해 접속해본다.

9. Seahub 접속하기

서버 주소를 입력하고 접속했을 때 다음과 같은 화면이 나왔다면 성공이다. Seahub 구동 시 등록했던 Admin 유저의 정보를 입력하여 로그인한다:

 다음과 같은 팝업 메세지를 확인했다면 축하한다. Seafile 서버가 제대로 실행된 것이다.


 다음 장에서는 Reverse Proxy 를 이용한 포트 포워딩, 그리고 HTTPS 접속 설정에 대한 방법을 기술할 것이다.

출처

[사이트] https://manual.seafile.com/deploy/
[사이트] https://www.digitalocean.com/community/tutorials/how-to-install-mariadb-on-ubuntu-22-04
[사이트] https://github.com/haiwen/seafile-rpi/releases

profile
2000.11.30

2개의 댓글

comment-user-thumbnail
2023년 8월 12일

안녕하세요! 유용한 정보 감사드립니다.
Seafile 서버를 다운로드 받으려 하니 ERRROR 404 : Not Found 에러가 뜹니다.
혹시 링크가 변경되었나요? Github 접속까지는 되는듯 합니다.

1개의 답글