ownCloudDropbox, 네이버 N드라이브, 다음 클라우드와 같은 파일 공유 및 동기화를 제공하는 설치형 클라우드 디스크 소프트웨어이다. 많은 클라우드 서비스 업체에서 인터넷 상에 파일을 저장하고 이를 PC, 모바일 등으로 접근할 수 있는 클라우드 디스크 서비스를 제공하고 있다. 그런데, 클라우드 디스크를 사용하다보면 회원 가입을 해야하고, 내 데이터가 외부에 있으니 해킹이나 다른 이유로 사라지지 않을까하는 고민을 많이 하게 된다. 클라우드에 대한 우려를 나타내는 기사가 보도되는가 하면 보안상의 이유로 공용(public) 클라우드를 차단하는 사례까지 나타나고 있다. (국내 P 대기업과 모 공공기관은 인터넷 주소에 cloud라는 단어가 포함되면 접속이 차단된다고 한다.) 이와 같은 이유로 많은 기업이 내부적으로 폐쇄된 사설(private) 클라우드를 구축하거나, 개인은 다시 외장 하드 등에 자신의 데이터를 백업받고 있다.

ownCloud는 공용(public) 클라우드에 데이터를 저장하지 않고 기업이나 개인이 직접 자신만을 위한 사설(private) 클라우드 디스크를 구축하고 사용할 수 있도록 개발된 오픈 소스 소프트웨어이다.  최근에 ownCloud 가 발표되어 기존의 ownCloud 4 버전에 비해서 속도와 멀티 바이트 지원 등이 개선되어 개인이나 기업이 자체적으로 클라우드 디스크를 구축하는데 많은 도움이 될 것으로 보인다.

ownCloud에 대한 상세한 정보는 http://owncloud.org 와 ownCloud로 비즈니스를 수행하고 있는 http://owncloud.com 에서 얻을 수 있으므로 이 글에서는 실제로 리눅스 서버에 자신만을 위한 ownCloud 서버를 구축하는 방법에 대해서 알아보고자 한다.

1. 리눅스 서버 설치

ownCloud는 아파치 웹서버, nginx 웹 서버, Microsoft IIS를 지원하는 PHP5로 작성된 소프트웨어로 sqlite, MySQL, PostgreSQL 데이터베이스를 지원한다. 이 글에서는 CentOS 6.3 64bit와 APM(Apache + PHP + MySQL)을 기반으로 새롭게 발표된 ownCloud 를 설치하는 과정을 살펴볼 것이다.

a) 자신의 서버에 직접 리눅스 설치

리눅스 서버를 설치하기 위해서는 서버를 준비하고, 리눅스 OS를 선택하고 리눅스 설치과정에 따라서 설치해야하는데 이 과정을 직접 할 수 있는 장비와 리눅스 지식을 갖춘 사람이라면 CentOS 6.3 64bit 버전을 자신의 서버에 직접 설치한다. CentOS를 설치할 때는 최소 설치(Minimal)로 옵션으로 설치한다. CentOS 6.3 설치 과정은 여기를 참조하기 바란다.

b) 클라우드 서버에 리눅스 서버 생성

ownCloud 설치를 위한 리눅스 서버를 손쉽게 설치하고 바로 인터넷에서 서비스 가능하도록 할 때는 클라우드 서버를 사용하는 것이 좋은 선택이다. 클라우드 업체에서 제공하는 서버를 사용할 경우 저렴한 비용으로 회선과 공인 IP 까지 제공받을 수 있으므로 이 글에서는 클라우드 서버에 리눅스 서버를 생성한 다음에 ownCloud 를 설치하고자 한다.

클라우드 서버로 CentOS 6 64bit 서버를 만드는 방법에 대해서는 클라우드 서버 생성이라는 글을 따라 그대로 수행하면 된다.

서버를 직접 설치하든 아니면 클라우드 서버로 구성하든 서버의 관리자로 직접 로그인할 수 있는 서버 준비가 완료되면 ownCloud 를 설치하는 과정으로 진행한다.

2. 리눅스 서버 구성

리눅스 서버 설치가 완료되면 서버에 root 관리자로 로그인한 다음에 다음의 설정을 진행한다.

먼저 SELinux를 비활성화한다. SELinux는 리눅스의 보안을 강화하기 위한 소프트웨어로 서버에 있는 파일 하나 하나에 대한 보안 권한을 설정할 수 있는 대단히 강력한 프로그램이지만 제대로 설정하지 못하면 서버에 불필요한 부하가 가해질 뿐 아니라 서비스 별로 일일이 SELinux 규칙을 정해줘야하므로 일반적인 서비스에서는 비활성화해두는 것이 편하다. 물론 그렇다고 보안에 구멍이 생기는 것은 아니고 방화벽 등 다른 방법으로 보안을 강화할 것이므로 크게 걱정하지 않아도 된다.

a) SELinux 비활성화

다음의 명령어로 SELinux를 비활성화 한다.

# setenforce 0

시스템 재시작 시 SELinux가 비활성화 되도록 /etc/sysconfig/selinux 파일을 열어서 중간의 SELINUX=enabled 부분을 그림과 같이 disabled로 수정한다.

2

b) 방화벽 설정

다음으로 리눅스 서버의 방화벽 설정을 변경한다. 리눅스는 기본적으로 보안을 위해 허가된 포트 이외에는 모두 차단하도록 되어 있다. 여기서는 ssh 접속을 위한 22번 포트와 http 접속을 위한 80번 포트를 제외하고는 모두 차단하기로 한다.

3

그림처럼 /etc/sysconfig/iptables 파일을 열어서 중간부분에 -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT 라고 추가한다. https 접속을 위해서는  -A INPUT -m state –state NEW -m tcp -p tcp –dport 443 -j ACCEPT도 추가한 후 저장하고 다음의 명령을 실행한다.

# service iptables restart
# chkconfig iptables on

service iptables restart는 iptables라는 방화벽 서비스를 재시작하는 명령이고, chkconfig iptables on은 시스템 시작시에 iptables 서비스를 활성화하는 명령이다.

c) 시간동기화

다음으로 리눅스 서버의 시간을 인터넷 시간과 일치하도록 ntpd라는 시간동기화 서비스를 활성화하고 시스템 시작시에 항상 실행되도록 등록한다. ntpd를 실행하기 전에 서버가 인터넷에 접속이 가능하도록 설정되어 있어야한다. 클라우드 서버 생성의 3.네트워크 생성을 참조하기 바란다.

# yum -y install ntp
# service ntpd start
# chkconfig ntpd on

d) APM (Apache, PHP, MySQL) 설치

다음으로 ownCloud 설치에 필요한 Apache 웹서버, PHP 및 MySQL 데이터베이스를 설치한다. CentOS에서는 yum이라는 패키지 관리 프로그램을 사용하여 세가지 패키지를 설치할 수 있다. 다음의 명령어로 필요 패키지를 설치한다.

# yum install -y httpd mysql mysql-server php php-mysql php-gd php-mbstring php-dom php-ldap

이 명령어를 입력하면 패키지가 설치가 진행되고 패키지 설치가 완료된다. 패키지 설치가 완료되면 httpd 와 myslqd 서비스를 실행하고 시스템 시작시에 실행되도록 서비스를 등록한다.

# service httpd start
# service mysqld start
# chkconfig httpd on
# chkconfig mysqld on

지금까지의 과정이 정상적으로 완료되면 인터넷 창을 열어서 인터넷 주소 창에 http://ip-address 를 입력하면 다음과 같이 웹페이지가 나타날 것이다.

7

3. ownCloud 설치

서버의 준비가 완료되면 ownCloud 를 다운받고 설치를 시작한다.

a) ownCloud 다운로드

다음의 명령어로 관리자 홈디렉토리 아래에 ownCloud 를 다운로드 한 후 압축을 푼다.

# cd ~

# wget https://download.owncloud.org/community/owncloud-8.1.1.tar.bz2

# tar jxvf owncloud-8.1.1.tar.bz2

(설치 파일은  https://owncloud.org/install/#instructions-server 에서 최신 버전을  다운로드할 수 있다)

 

압축을 풀고 실행한 디렉토리에서 ls 명령어를 실행하면 다음 그림과 같이 owncloud 라는 디렉토리가 생성된다.

사용자 지정 5

b) MySQL 데이터베이스 설정

다음으로 ownCloud 에서 사용할  MySQL 데이터베이스를 설정한다.

MySQL DB에 root로 로그인한다.

# mysql -u root -p

Enter password:

초기 암호는 없으므로 엔터키를 입력하면 로그인된다. 로그인 한 다음에 MySQL root 암호를 변경한다. 여기에서 password 부분을 원하는 암호로 설정한다.

mysql> SET PASSWORD = PASSWORD(‘password‘);

ownCloud DB를 생성한다. 여기에서는 DB 이름을 owncloud로 지정하였다. 원하는 DB 이름을 지정해주면 된다.

mysql> CREATE DATABASE owncloud;

다음으로 owncloud DB의 권한을 부여한다.

mysql> GRANT ALL PRIVILEGES ON owncloud.* TO root;

mysql> FLUSH PRIVILEGES;

이상으로 ownCloud를 위한 데이터베이스 설정이 완료되었으므로 exit 명령어로 MySQL DB에서 빠져 나온다.

mysql> exit;

c) ownCloud 설정

압축을 풀어둔 ownCloud 설치 파일을 /owncloud 디렉토리로 복사한 후 설정파일을 생성한다. /owncloud 디렉토리를 ownCloud 설치 파일 및 사용자 데이터로 사용할 것이므로 충분한 공간을 확보해둔다.

# mkdir -p /owncloud

# cp -a ~/owncloud/* /owncloud/

다음의 명령어를 수행하여 /owncloud 디렉토리의 소유권을 apache.apache로 변경한다.

# chown -R apache.apache /owncloud

마지막으로 웹서버 설정 파일 /etc/httpd/conf/httpd.conf 파일에서 기본 디렉토리를 /owncloud 로 변경한다. 중간 부분의 DocumentRoot 부분을 찾아서 다음 그림과 같이 /owncloud 로 변경한다. 그리고 바로 아래에 있는 AllowOverride None을 AllowOverride All 로 수정한다.

사용자 지정 1

다음의 명령어로 httpd 서비스를 재시작한다.

# service httpd restart

모든 설정이 정상정으로 완료되면 http://ip-address 를 입력하면 다음과 같이 ownCloud 설정화면이 나타난다.

사용자 지정 3

위의 그림처럼 관리자 계정으로 사용할 아이디 (이글에서는 admin)과 암호를 입력하고 고급을 눌러보면 데이터 폴더, 데이터 베이스 설정 등이 나온다. 데이터 폴더는 /owncloud/data를 입력한다. owncloud 설치 디렉토리를 변경하였을 경우에는 설치 디렉토리 아래의 data 디렉토리의 전체 경로를 입력한다. 데이터 베이스로는 SQLite와 MySQL 두 개가 보이는데, 이 글에서는 MySQL을 사용하므로 MySQL을 선택한다. MySQL을 선택하고 데이터 베이스 사용자와 암호로 root 와 MySQL root 암호 (위에서 설정한 password)를 입력한다.  그리고 데이터 베이스 이름에 DB 이름인 owncloud를 입력한다. 데이터 베이스 호스트로는 localhost를 입력하면 된다. (별도의 분리된 DB 서버를 사용할 경우는 DB 서버의 호스트네임을 입력하면 된다.)

필요한 정보를 입력한 후 설치 완료를 클릭한 후 admin 계정으로 로그인하면 다음과 같은 초기 화면이 나타난다.

마지막 영역 1

ownCloud는 윈도우, 리눅스, 맥을 위한 데스크탑 동기화 클라이언트와 안드로이드 및 iOS를 위한 모바일 클라이언트를 제공하는데 그에 대한 정보가 타나타 있다.

배너를 닫으면 다음의 그림과 같이 관리자 계정의 ownCloud 5 화면을 볼 수 있다.

마지막 영역 2

좌측 상단의 새로 만들기를 눌러서 텍스트 파일, 폴더, 링크를 생성할 수 있고 바로 옆의 화살표를 눌러서 파일을 업로드 할 수 있다. 우측 상단의 admin을 선택하면 admin의 개인 프로필, 사용자 생성, 추가 설치 가능한 앱, 시스템 관리자 화면 등이 나타나는데 개인을 선택하면 다음과 같이 계정의 개인 정보, 언어 등을 변경할 수 있다.

사용자 지정 3

d) sendmail 설정

ownCloud는 사용자 간의 파일 공유와 외부 사용자를 위한 링크를 통한 파일 공유를 제공한다. 파일이 공유되었을 때 공유된 사용자에게 메일로 알림을 발송하기 위하여 리눅스 서버에 sendmail을 설정한다. 다음의 명령어로 sendmail 패키지를 다운로드한다.

# yum -y install sendmail

다음의 명령어로 호스트 네임을 등록한다. sendmail은 서버의 호스트 네임이 /etc/hosts에 등록되어 있거나 DNS에 등록되어 있어야 발송에 문제가 없는데, 다음의 명령어로 호스트네임을 지정해준다. 물론 직접 /etc/hosts 파일에 hostname을 지정하고 /etc/sysconfig/network를 수정해도 된다.

# sed -i “s/127.0.0.1/127.0.0.1 owncloud.local owncloud/” /etc/hosts

# echo “HOSTNAME=owncloud.local” >> /etc/sysconfig/network

시스템 시작시 자동으로 실행되도록 등록하고 시스템을 재시작한다.

# chkconfig sendmail on

# reboot

e) Bug Patch (5.0.0 버전에 대해서만 수행한다)

이 글을 작성하는 시점에 배포된 ownCloud 5 패키지 내에 버그로 인해서 링크로 파일을 공유할 경우 다운로드가 되지 않는 버그가 있다. 이 버그는 다음의 방식으로 해결할 수 있다. 차후에 배포되는 패치에는 포함될 것으로 생각된다.

/owncloud/lib/files.php 파일을 열어서 53-55 행을 다음과 같이 수정한다.

  • 수정 전
if (count($files) == 1) {
$files = $files[0];
}
  • 수정 후
if (is_array($files) && count($files) == 1) {
$files = $files[0];
}

수정 후 웹서버를 재시작한다.

# service httpd restart

맺는 말

이상으로 사설 클라우드 디스크 소프트웨어인 ownCloud를 리눅스에 설치하는 과정을 살펴보았다. ownCloud는 개인이 직접 클라우드 디스크를 구축하여 Dropbox 처럼 사용하면서 모바일 클라이언트, WebDAV, 주소록, 캘린더 등 많은 기능을 지원하는 아주 만족할 만한 소프트웨어라고 생각한다. 특히 버전업이 되면서 한글 파일 문제, 인터넷 익스플로러에서의 호환성 문제 등이 거의 해결이 되어서 별다른 수정을 가할 필요가 없다. 이 글을 보고 직접 ownCloud 5를 구축한 후 자신만의 클라우드를 사용해보는 것도 좋은 경험이 되리라 생각한다. ownCloud에 대한 기능이나 사용 방법에 대해서는 조만간 다른 글에서 이야기할 예정이다.