The Constructive Cloud Service for your NAS Server
직접 설치하는 클라우드 서비스 (Server)
개발 현황
- 원격 서버 및 NAS Server의 파일 관리 서비스를 지원하기 위해 개발된 설치형 저용량 파일 호스팅 서비스
- 타 서버로부터 금액을 지불하고 일정 용량을 할당 받는 것이 아닌, 개인 서버만 갖고 있으면 이 웹 어플리케이션을 이용해 파일 호스팅 서버를 운용할 수 있습니다.
- PROJECT Microcloudchip의 3번째 작품으로 버전은 2.0입니다.
- 해당 Repository는 Server Repository입니다. Endpoint Repository는 아래에서 확인하실 수 있습니다.
- 기본적인 파일/디렉토리를 관리합니다.
- 생성/수정/삭제/다운로드
- 사용자가 파일 크기 제한을 걸을 수 있습니다. Docker 컨테이너 생성 시 환경변수로 지정할 수 있습니다.
- 파일/디렉토리에 대한 전체 공유가 가능합니다.
- 공유 기한 선택 가능
- 파일/디렉토리에 즐겨찾기를 통한 빠른 데이터 접근
- 다양한 검색 필터링
- 연관 검색어
- 즐겨찾기 및 공유 여부
- 이름, 생성순 정렬
- 외부 리소스를 지원합니다.
- 외부 스토리지를 지원.
- 외부 스토리지를 연걸 함으로써 Docker의 용량 한계를 극복할 수 있습니다
- 어플리케이션에 문제가 발생해도 스토리지를 직접 접근할 수 있습니다.
단 스토리지에 있는 파일/디렉토리를 수정 또는 삭제 시 데이터 동기화에 문제가 생길 수 있습니다.
- 외부 데이터베이스 지원
- 마찬가지로 SQLite 뿐만 아니라 MySQL를 사용할 수 있습니다.
- 외부 스토리지를 지원.
- 여러 사용자 관리
- 하나의 관리자가 여러 사용자를 생성 및 관리할 수 있습니다.
- 모든 사용자가 사용할 수 있는 최대 용량 크기는 해당 스토리지가 위치한 디스크 파티션 용량 중 남아있는 용량의 50%입니다. 따라서 과도한 사용으로 인한 다른 데이터 관리에 방해받지 않습니다.
해당 어플리케이션은 Docker기반의 Container입니다. docker container 생성을 통해 어플리케이션을 한번에 설치 + 실행이 가능합니다.
$ sudo docker run -it -d -p [포트]:[포트] \
-v [외부 스토리지 루트]:[도커 내부 스토리지 루트] \
-e SERVER_PORT=[포트] \
-e SERVER_STORAGE=[도커 내부 스토리지 루트] \
-e ADMIN_EMAIL=[관리자 이메일] \
-e ADMIN_PASSWD=[관리자 비빌번호] \
-e JWT_KEY=[jwt key] \
-e JWT_ALGORITHM=HS256 \
-e DATA_SHARED_LENGTH=[공유 기한] \
-e MAX_UPLOAD_LEN=[업로드 최대 크기 (MB 단위)] \
... DB 관련 ENV 추가 (아래 참고) ...
--name [container name] ghcr.io/sweetcase-cobalto/cloudmodular:0.1.2
SERVER_PORT
: 연결할 서버 포트 입니다.SERVER_STORAGE
: 데이터가 저장될 스토리지를 정합니다. 스토리지 위치는 항상 Docker 밖의 디렉토리와 동기화가 되어야 하기 때문에 앞에-v
를 사용하여 외부 디렉토리 루트를 Docker 내부 루트로 마운트 합니다.예시 -v /home/recoma/my_storage:/storage
ADMIN_EMAIL
,ADMIN_PASSWD
: 관리자의 정보 입니다. 이 두개의 변수는 관라자 계정의 정보가 됩니다.JWT_KEY
: Jwt암호화를 위한 Key를 입력합니다. 어느 문자열이든 상관없습니다.JWT_ALGORITHM
: JWT Algorithm으로 HS256을 권장합니다.DATA_SAHRED_LENGTH
: 데이터를 공유할 때, 그 공유 기간 입니다. 단위를 "일" 입니다.MAX_UPLOAD_LEN
: 서버에 요청할 수 있는 최대 크기 입니다. 1MB 단위이며 파일 최대 업로드 크기를 설정할 때 사용합니다.
$ sudo docker run -it -d -p [포트]:[포트]
... 생략 ...
-e DB_TYPE=sqlite
... 생략 ...
$ sudo docker run -it -d -p [포트]:[포트]
... 생략 ...
-e DB_TYPE=mysql
-e DB_PORT=[DB 포트]
-e DB_HOST=[DB 호스트]
-e DB_DATABASE=[데이터베이스 이름]
-e DB_USER=[데이터베이스 유저 아이디]
-e DB_PASSWD=[데이터베이스 유저 패스워드]
... 생략 ...
해당 어플리케이션은 Unix 환경에서만 작동합니다. Windows를 사용할 경우, WSL2를 미리 설치해 주세요.
- 필수 요소들을 다운받습니다.
apt update -y
apt upgrade -y
apt install -y sudo gcc make
apt install -y python3-dev python3-pip
apt install -y libffi-dev
apt install -y build-essential
apt install -y default-libmysqlclient-dev
apt install -y git
- 파이썬 가상 머신을 생성합니다. (3.9 이상)
- repository를 다운받습니다.
- server 디렉토리로 이동합니다.
- 아래의 명령어로 패키지들을 설치합니다.
$ pip install -r requirments.txt
- .env파일을 생성하고 아래와 같이 작성합니다. sqlite를 사용할 경우, DB_TYPE만 입력합니다.
SERVER_PORT=<서버가 돌아갈 포트>
SERVER_STORAGE=<서버에 돌아가는 데이터들을 저장할 때 사용>
DB_TYPE=<mysql/mariadb of sqlite>
# 아래 DB Config는 SQlite를 사용할 경우 필요 없음
DB_HOST=<DB Host>
DB_PORT=<DB Port>
DB_DATABASE=<DB Name>
DB_USER=<DB User ID>
DB_PASSWD=<DB User pswd>
ADMIN_EMAIL=<관리자 이메일>
ADMIN_PASSWD=<관리자 패스워드>
JWT_KEY=<jwt key>
JWT_ALGORITHM=<jwt 알고리즘 (HS256 권장)>
DATA_SHARED_LENGTH=<파일/디렉토리 공유 길이 (ex: 3 -> 3일)>
MAX_UPLOAD_LEN=<업로드 최대 크기 (MB 단위)>
- 테스트를 진행하고 싶은 경우, 아래와 같이 명령어를 입력합니다. (단 테스트를 진행할 때 DB나, 스토리지에 어느 데이터도 남아있어서는 안됩니다.)
$ pytest
- 테스트가 아닌 어플리케이션 자체를 실행하고 싶은 경우, Migration을 진행한 뒤 실행합니다.
$ python main.py --method=migrate --type=dev
$ python main.py --method=run-app --type=dev