클라우드 스토리지 · 8 min read · Sep 14, 2025
Debian 12에 Seafile 자가 호스팅 클라우드 스토리지 설치하는 방법

Seafile은 Django 웹 프레임워크로 작성된 오픈 소스 파일 호스팅 시스템입니다. 이는 여러 플랫폼에서 사용할 수 있는 소프트웨어로, 클라우드 스토리지 기능을 제공하며 사용자가 Seafile 생태계 내에서 파일을 저장, 관리 및 공유할 수 있도록 합니다.
Seafile에서는 파일이 중앙 서버에 저장되며 여러 장치와 모바일 전화에서 클라이언트와 동기화할 수 있습니다. Seafile은 Google Drive, Dropbox 및 Mega.nz와 같은 파일 호스팅 서비스의 대안입니다. Seafile을 사용하면 개인 클라우드 애플리케이션을 위한 파일 공유 솔루션을 구축할 수 있습니다.
이 문서에서는 MariaDB를 데이터베이스로, Nginx를 리버스 프록시로 사용하고, Letsencrypt 및 UFW(간단한 방화벽)를 통해 Seafile을 안전하게 보호하는 방법으로 Debian 12 서버에 Seafile을 설치하는 방법을 안내합니다.
전제 조건
이 가이드를 시작하기 전에 다음 요구 사항이 충족되는지 확인하십시오:
- Debian 12 서버
- 관리자 권한이 있는 비루트 사용자
- 서버 IP 주소를 가리키는 도메인 이름
의존성 설치
Seafile은 Python 기반의 Django 웹 프레임워크로 작성되었습니다. Seafile을 설치하려면 Python이 설치되어 있어야 합니다. 또한 MariaDB/MySQL을 데이터베이스로, Nginx를 리버스 프록시로, Memcached 또는 Redis를 세션 및 캐시 관리에 사용할 수 있도록 의존성이 필요합니다. 이 섹션에서는 APT 패키지 관리자를 통해 이러한 패키지를 설치합니다.
먼저, 아래 명령어를 실행하여 Debian 패키지 인덱스를 업데이트합니다.
sudo apt update이제 아래 명령어를 실행하여 Python3, MariaDB 서버, Nginx 웹 서버, Memcached 및 시스템에 추가 라이브러리를 설치합니다.
sudo apt install mariadb-server nginx python3 python3-dev python3-setuptools python3-pip libmariadb-dev-compat ldap-utils libldap2-dev libsasl2-dev python3.11-venv memcached libmemcached-dev설치를 확인하려면 ‘Y‘를 입력합니다.

설치가 완료되면 아래 명령어로 MariaDB 서버를 확인합니다.
sudo systemctl is-enabled mariadb
sudo systemctl status mariadb다음 출력에서 MariaDB 서버가 enabled 및 running 상태임을 확인할 수 있습니다.

이제 아래 명령어를 사용하여 Nginx 서비스를 확인합니다.
sudo systemctl is-enabled nginx
sudo systemctl status nginx아래에서 Nginx 웹 서버가 running 및 enabled 상태임을 확인할 수 있습니다.

마지막으로 Memcached 서비스가 실행 중인지 확인합니다. Memcached 서비스는 running 및 enabled 상태여야 합니다.
sudo systemctl is-enabled memcached
sudo systemctl status memcached
MariaDB 서버 설정
이제 MariaDB를 설치했으므로 다음 단계는 MariaDB 서버 배포를 구성하고 보호하는 것입니다. 그런 다음 Seafile에서 사용할 여러 데이터베이스와 함께 새로운 MariaDB 사용자를 생성합니다. ‘ mariadb-secure-installation ‘ 명령어로 MariaDB를 보호하고, ‘ mariadb ‘ 클라이언트를 사용하여 새로운 사용자와 데이터베이스를 생성합니다.
아래 ‘ mariadb-secure-installation ‘ 명령어를 실행하여 MariaDB 서버 설치를 보호합니다.
sudo mariadb-secure-installation이제 다음 구성에 대해 질문을 받게 됩니다:
- 루트 비밀번호 없이 기본 MariaDB 서버 설치의 경우 비밀번호를 묻는 질문에서 ENTER를 누릅니다.
- MariaDB 루트 사용자의 로컬 인증은 기본적으로 보호되므로, 인증 방법을 ‘ unix_socket ‘으로 변경하라는 질문에 ‘ n ‘을 입력합니다.
- 새로운 MariaDB 루트 비밀번호를 생성하라는 질문에 ‘ Y ‘를 입력합니다. 그런 다음 MariaDB 루트 사용자에 대한 강력한 비밀번호를 입력하고 반복합니다.
- MariaDB 루트 사용자에 대한 원격 인증을 비활성화하라는 질문에 ‘ Y ‘를 입력하여 동의합니다.
- 기본 데이터베이스 ‘test’를 제거하고 익명 권한을 제거하라는 질문에 ‘ Y ‘를 입력합니다.
- 마지막으로, 테이블 권한을 다시 로드하라는 질문에 ‘ Y ‘를 입력하여 확인합니다.
이제 MariaDB 루트 비밀번호를 구성하고 MariaDB를 보호했으므로 Seafile 설치를 위한 새로운 데이터베이스와 사용자를 생성합니다.
아래 ‘ mariadb ‘ 명령어를 실행하여 MariaDB 서버에 로그인합니다. 프롬프트가 나타나면 MariaDB 루트 비밀번호를 입력합니다.
sudo mariadb -u root -p다음 쿼리를 사용하여 새로운 사용자 ‘ seafile ‘을 생성합니다. 다음 비밀번호를 새로운 안전한 비밀번호로 변경해야 합니다.
create user 'seafile'@'localhost' identified by 'password';다음 쿼리를 실행하여 새로운 데이터베이스 ‘ ccnet_db ‘, ‘ seafile_db ‘, 및 ‘ seahub_db ‘를 생성합니다.
create database ccnet_db character set = 'utf8';
create database seafile_db character set = 'utf8';
create database seahub_db character set = 'utf8';다음으로, 아래 쿼리를 실행하여 사용자 ‘ seafile ‘이 Seafile 데이터베이스에 접근할 수 있도록 허용합니다.
GRANT ALL PRIVILEGES ON ccnet_db.* to seafile@localhost;
GRANT ALL PRIVILEGES ON seafile_db.* to seafile@localhost;
GRANT ALL PRIVILEGES ON seahub_db.* to seafile@localhost;
이제 사용자 ‘ seafile ‘의 권한을 확인하여 ‘ ccnet_db ‘, ‘ seafile_db ‘, 및 ‘ seahub_db ‘ 데이터베이스에 대한 접근 및 권한을 보장합니다.
SHOW GRANTS FOR seafile@localhost;마지막으로 ‘ quit ‘를 입력하여 MariaDB 서버에서 나옵니다.

Python 의존성 설치
이 섹션에서는 Seafile을 실행하기 위한 새로운 시스템 사용자를 생성하고, 설치 디렉토리 및 Python 가상 환경을 생성한 후, ‘ pip ‘ 명령어를 사용하여 Python 의존성을 설치합니다.
먼저, 아래 명령어로 새로운 사용자 ‘ seafile ‘을 추가합니다.
sudo adduser seafile
이제 새로운 설치 디렉토리 ‘ /opt/seafile ‘를 생성하고 그 안으로 이동합니다.
mkdir -p /opt/seafile; cd /opt/seafile아래 명령어를 실행하여 ‘ venv ‘ Python 가상 환경을 생성하고 활성화합니다. 활성화되면 셸은 ‘ (venv) user@hostname # ‘와 같은 형태가 됩니다.
python3 -m venv venv
source venv/bin/activate
다음으로, 아래 ‘ pip3 ‘ 명령어를 실행하여 Seafile에 대한 Python 의존성을 설치합니다. 이러한 패키지는 ‘ venv ‘ 가상 환경 내에서 설치해야 합니다.
pip3 install --timeout=3600 django==4.2.* future==0.18.* mysqlclient==2.1.* pymysql pillow==10.0.* pylibmc captcha==0.4 markupsafe==2.0.1 jinja2 sqlalchemy==2.0.18 psd-tools django-pylibmc django_simple_captcha==0.5.* djangosaml2==1.5.* pysaml2==7.2.* pycryptodome==3.16.* cffi==1.15.1 lxml python-ldap==3.4.3
설치가 완료되면 아래 명령어를 사용하여 ‘ /opt/seafile ‘ 디렉토리의 소유권을 사용자 ‘ seafile ‘로 변경합니다.
sudo chown -R seafile: /opt/seafileSeafile 다운로드 및 설치
이제 Seafile을 설치할 준비가 되었습니다. 이제 Seafile 소스 코드를 다운로드하고 MariaDB 및 Memcached와 함께 설치하며, 기본 구성으로 Seafile 도메인 이름을 추가한 후 Seafile 프로세스를 수동으로 시작합니다.
아래 명령어를 실행하여 사용자 ‘ seafile ‘로 로그인하고 ‘ /opt/seafile ‘ 디렉토리로 이동합니다.
su seafile
cd /opt/seafileSeafile 소스 코드를 다운로드하고 아래 명령어를 사용하여 압축을 풉니다. 이 예제에서는 Seafile 11을 설치하며, 최신 버전을 얻으려면 Seafile 다운로드 페이지를 확인해야 합니다.
wget https://s3.eu-central-1.amazonaws.com/download.seadrive.org/seafile-server_11.0.12_x86-64.tar.gz
tar xf seafile-server_11.0.12_x86-64.tar.gz이제 아래 명령어로 ‘ venv ‘ 가상 환경을 활성화합니다.
source venv/bin/activate‘ seafile-server-11.0.12 ‘ 디렉토리로 이동하고 ‘ setup-seafile-mysql.sh ‘ 스크립트를 실행합니다. 이를 통해 MariaDB를 데이터베이스로 사용하여 시스템에 Seafile을 설치합니다.
cd seafile-server-11.0.12
./setup-seafile-mysql.sh이제 다음 Seafile 구성에 대해 질문을 받게 됩니다:
- Seafile 서버 이름을 입력합니다.
- Seafile 설치를 위한 도메인을 입력합니다.
- 기존 MySQL/MariaDB 데이터베이스 및 사용자와 Seafile을 통합하기 위해 ‘ 2 ‘를 입력합니다.
- MariaDB 호스트, 포트, 사용자 및 비밀번호의 세부 정보를 입력합니다.
- ccnet 데이터베이스는 ‘ ccnet_db ‘, seafile은 ‘ seafile_db ‘, seahub은 ‘ seahub_db ‘로 입력합니다.
- 설치를 확인하고 구성을 완료하려면 ENTER를 누릅니다.


구성이 완료되면 Nginx 리버스 프록시 아래에서 실행되도록 Seafile 구성을 수정합니다.
‘ /opt/seafile/conf ‘ 디렉토리로 이동하고 ‘ seahub_settings.py ‘ 파일을 ‘ nano ‘ 편집기로 엽니다.
cd /opt/seafile/conf
nano seahub_settings.py‘ SERVICE_URL ‘ 옵션에 도메인 이름을 추가하고 시작 부분에 ‘ https ‘를 포함해야 합니다.
SERVICE_URL = 'https://seafile.howtoforge.local'‘ FILE_SERVER_ROOT ‘ 옵션을 다음과 같이 도메인 이름과 함께 추가합니다.
FILE_SERVER_ROOT = 'https://seafile.howtoforge.local/seafhttp'마지막으로, Seafile을 Memcached 캐시 시스템과 통합하기 위해 ‘ CACHES ‘ 설정을 추가합니다.
CACHES = {
'default': {
'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
'LOCATION': '127.0.0.1:11211',
},
}작업이 완료되면 파일을 저장하고 편집기를 종료합니다.
이제 ‘ /opt/seafile/seafile-server-latest/ ‘ 디렉토리로 돌아가서 ‘ seafile.sh ‘ 및 ‘ seahub.sh ‘ 스크립트를 실행하여 Seafile을 실행합니다.
cd /opt/seafile/seafile-server-latest/
./seafile.sh start
./seahub.sh startSeafile이 시작되면 ‘ Seafile server started ‘라는 출력을 볼 수 있습니다. 또한 Seafile의 관리자 사용자 설정을 요청받게 되므로 사용자 이름, 이메일 및 비밀번호를 입력해야 합니다.

Nginx를 리버스 프록시로 설정하기
이제 Seafile이 MariaDB 및 Memcached와 함께 실행되고 있으므로 다음 단계는 Seafile을 위한 Nginx를 리버스 프록시로 설정하는 것입니다. 도메인 이름이 준비되어 있고 서버 IP 주소를 가리키고 있는지 확인하십시오.
새로운 Nginx 서버 블록 구성 ‘ /etc/nginx/sites-available/seafile ‘을 아래 ‘ nano ‘ 편집기로 생성합니다.
sudo nano /etc/nginx/sites-available/seafile아래 구성을 삽입하고 ‘ server_name ‘ 옵션을 도메인 이름으로 변경해야 합니다.
log_format seafileformat '$http_x_forwarded_for $remote_addr [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $upstream_response_time';
server {
listen 80;
server_name seafile.howtoforge.local;
proxy_set_header X-Forwarded-For $remote_addr;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_read_timeout 1200s;
# used for view/edit office files via Office Online Server
client_max_body_size 0;
access_log /var/log/nginx/seahub.access.log seafileformat;
error_log /var/log/nginx/seahub.error.log;
}
location /seafhttp {
rewrite ^/seafhttp(.*)$ $1 break;
proxy_pass http://127.0.0.1:8082;
client_max_body_size 0;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 36000s;
proxy_read_timeout 36000s;
proxy_send_timeout 36000s;
send_timeout 36000s;
access_log /var/log/nginx/seafhttp.access.log seafileformat;
error_log /var/log/nginx/seafhttp.error.log;
}
location /media {
root /opt/seafile/seafile-server-latest/seahub;
}
}작업이 완료되면 파일을 저장하고 종료합니다.
이제 아래 명령어를 실행하여 ‘seafile’ 서버 블록을 활성화하고 Nginx 구문을 확인합니다. 올바른 Nginx 구성이면 ‘ syntax is ok - test is successful ‘라는 출력을 볼 수 있습니다.
sudo ln -s /etc/nginx/sites-available/seafile /etc/nginx/sites-enabled/
sudo nginx -t마지막으로 아래 명령어를 실행하여 Nginx 웹 서버를 재시작하고 변경 사항을 적용합니다.
sudo systemctl restart nginx
UFW 및 HTTPS로 Seafile 보호하기
Nginx를 리버스 프록시로 구성한 후, UFW(간단한 방화벽) 및 HTTPS로 Seafile을 보호합니다. UFW 및 Certbot을 설치하고 SSH, HTTP 및 HTTPS와 같은 서비스를 열고, Letsencrypt에서 Certbot으로 새로운 SSL 인증서를 생성합니다.
먼저 아래 명령어를 실행하여 ‘ ufw ‘ 및 ‘ certbot ‘ 패키지를 설치합니다.
sudo apt install ufw certbot -y
이제 아래 명령어를 실행하여 ‘ OpenSSH ‘ 및 ‘ Nginx Full ‘ 프로필을 활성화합니다. ‘ OpenSSH ‘ 프로필은 기본 SSH 포트 ‘ 22 ‘를 열고, ‘ Nginx Full ‘ 프로필은 서버에 대한 HTTP 및 HTTPS 연결을 허용합니다.
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'다음으로 아래 명령어를 실행하여 UFW를 시작하고 활성화합니다. ‘ y ‘를 입력하여 확인하면 ‘ Firewall is active and enabled at system startup ‘라는 출력을 볼 수 있습니다.
sudo ufw enable
마지막으로 아래 ‘ certbot ‘ 명령어를 사용하여 SSL 인증서를 생성하고 Seafile 설치를 보호합니다. 도메인 이름과 이메일 주소를 자신의 정보로 변경해야 합니다.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d seafile.howtoforge.local프로세스가 완료되면 Seafile은 HTTPS로 보호되며 인증서는 ‘ /etc/letsencrypt/live/domain.com ‘ 디렉토리에 저장됩니다.
Seafile 접근하기
웹 브라우저를 열고 https://seafile.howtoforge.local과 같은 Seafile 도메인 이름을 방문합니다. 설치가 성공적이면 Seafile 로그인 페이지가 표시됩니다.
관리자 이메일 주소와 비밀번호를 입력한 후 ‘ Log in ‘을 클릭합니다.

올바른 관리자 자격 증명이 있는 경우 다음 Seafile 대시보드를 볼 수 있습니다.

이제 Seafile에 파일을 업로드하여 설치가 성공적인지 확인할 수 있습니다.
결론
축하합니다! Debian 12 서버에 Seafile 자가 호스팅 클라우드 스토리지 설치를 완료했습니다. MariaDB 데이터베이스 서버와 Nginx를 리버스 프록시로 사용하여 Seafile이 실행되고 있습니다. 또한 UFW(간단한 방화벽) 및 SSL을 통해 Seafile을 보호했습니다. Seafile이 설치되었으므로 Seafile을 ONLYOFFICE Document Server 또는 LibreOffice Online (Collabora Online)과 같은 다른 애플리케이션과 통합할 수 있습니다.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.