Raspberrypi owncloud
overview
라즈베리파이와 owncloud로 클라우드 환경 구축하기.
raspberry pi
대부분의 설치 내용 및 설정은 이곳<ref>http://www.techjawab.com/2014/08/how-to-setup-owncloud-7-on-raspberry-pi.html</ref> 을 참조 했다.
그러나, 이번에 라즈베리 파이와 외장 하드디스크를 이용하여 대용량 클라우드 시스템을 만들면서 한가지 오류사항이 있었다. 바로 Sqlite 때문이었다. owncloud 는 내부적으로 파일 동기를 위해서 Database 를 사용한다. Database 는 여러 종류를 지원하는데, 원본 링크에서는 Sqlite를 사용했었다.
아무튼 무슨 이유에선지 owncloud 가 굉장히 느리게 동작했었다. 원인을 찾아보니 Sqlite Database Lock 때문이었다. 본디, Sqlite 는 Database input/output 시 Database Lock 이 걸린다. 하지만 이 시간이 굉장히 짧기 때문에 그렇게 문제가 될거라고는 생각하지 않았는데, 이번에 테스트를 해보니 정말 오랫동안 시간이 걸렸다. 아마도 Database Lock 실패 이후 다시 재시도 하기까지 엄청 오랜 시간이 걸리거나 Lock 해제가 정상적으로 되지 않거나, 외장 하드디스크 Read/Write 에 문제가 있었던 것으로 생각된다.
하지만 외장 하드디스크는 Read/Write 테스트 결과 정상이었다. 따라서 문제는 owncloud-SQLite 에 있는 것으로 분석되어 owncloud 와 Mysql 을 연동하도록 했다. 만약 다른 Database 연동을 원한다면 owncloud 설치전 해당 데이터베이스와 php-데이터베이스 모듈을 미리 설치하고 진행하면 된다.
install basic packages
다음의 패키지를 설치하도록 하자.(mysql/sqlite 포함되어 있음)
$ sudo apt-get install nginx openssl ssl-cert php5-cli php5-sqlite php5-gd php5-common php5-cgi sqlite3 php-pear php-apc curl libapr1 libtool curl libcurl4 openssl-dev php-xml-parser php5 php5-dev php5-gd php5-fpm memcached php5-memcache varnish mysql-server php5-mysql
purge php5-curl
가이드에서는 php5-curl 모듈을 확실하게 지우도록 권하고 있다. 왜 인지는 모르겠다. 그래도 일단 지워주자.
$ sudo apt-get --purge remove php5-curl
SSL certification
owncloud 접속시 ssl 연결이 필요하다. 2년짜리 Self-sign 인증서를 생성하도록 하자.
$ sudo openssl req $@ -new -x509 -days 730 -nodes -out /etc/nginx/cert.pem -keyout /etc/nginx/cert.key $ sudo chmod 600 /etc/nginx/cert.pem $ sudo chmod 600 /etc/nginx/cert.key
configure nginx
nginx 설정이 필요하다. nginx 는 아파치와 같은 웹서버의 하나이며, 가볍고 빠른것이 특징이다.
$ sudo nano /etc/nginx/sites-available/default
상세 수정 화면이다. 아래쪽 내용에서 server_name 부분만 자신의 IP 주소에 맞게 바꿔주면 된다. <source lang=bash> upstream php-handler { server 127.0.0.1:9000; #server unix:/var/run/php5-fpm.sock; }
server { listen 80; server_name 192.168.0.115; return 301 https://$server_name$request_uri; # enforce https }
server { listen 443 ssl; server_name 192.168.0.115;
ssl_certificate /etc/nginx/cert.pem; ssl_certificate_key /etc/nginx/cert.key;
# Path to the root of your installation root /var/www/owncloud;
client_max_body_size 1000M; # set max upload size fastcgi_buffers 64 4K;
rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect; rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect; rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;
index index.php; error_page 403 /core/templates/403.php; error_page 404 /core/templates/404.php;
location = /robots.txt { allow all; log_not_found off; access_log off; }
location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README) { deny all; }
location / { # The following 2 rules are only needed with webfinger rewrite ^/.well-known/host-meta /public.php?service=host-meta last; rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
rewrite ^/.well-known/carddav /remote.php/carddav/ redirect; rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;
rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
try_files $uri $uri/ index.php; }
location ~ \.php(?:$|/) { fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param HTTPS on; fastcgi_pass php-handler; }
# Optional: set long EXPIRES header on static assets location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ { expires 30d; # Optional: Don't log access to assets access_log off; }
}
</source>
references
<references />