Raspberry Pi‎ > ‎Raspbian Setup‎ > ‎


Reference : http://www.techjawab.com/2013/09/how-to-setup-your-own-cloud-on.html

How to setup your own cloud on Raspberry Pi

With growing concerns of data privacy across the world, one thing is established for sure, if you want to protect your sensitive data then do it yourself, keep it with you, safe and secure. While there is practically nothing invincible, we must try to safeguard our personal data to the extent possible, atleast to make eavesdropper's life tougher in breaking it. This can help you to get rid of using services like Dropbox, Box, Google Drive. I would like to clarify that I do not intend (or mean to intend) that commercial or non-commercial services named above does give away your data, but following this guide can help you to stay away from them at your own risk, the data will be with you at your disposal with the benefits of cloud computing.

Enough talking... Let go ahead and see how we can setup a personal cloud on a small and tiny Raspberry Pi. We would be using the following softwares broadly to setup our own cloud:
  • ownCloud (open-source enterprise grade cloud software)
  • Nginx (open-source, high-performance HTTP server)
  • OpenSSL (open-source tool kit for SSL/TLS)
  • php5 (free of charge, server side scripting language)
  • Raspbian Wheezy from rapberrypi.org (not ownCloud's version)

Important note: This guide was prepared for OwnCloud 5.0.20
The latest version OwnCloud 7 doesn't work well with this guide. 
If you are going to install OwnCloud 7 on Raspbian Wheezy follow here

1. Tuning up the Raspberry Pi
Following changes needs to be made under Raspberry Pi configuration
sudo raspi-config

a. Expand the root filesystem to have enough space for the cloud
    Select "Expand Filesystem"

b. Change locale to en_US.UTF8
    Select "Internationalisation  Options"

c. Memory split, allocate 16M to video graphics (if you are not using X-server)
    Select "Advanced Options" --> "Memory Split"

d. Overclock to Modest or Medium
    Select "Overclock" (You might have to reboot if asked)

2. Updating the package lists on Raspberry Pi
    sudo apt-get update
    sudo apt-get upgrade

3. Creating users
    sudo groupadd www-data
    sudo usermod -a -G www-data www-data

4. Installing the packages
    sudo apt-get install nginx openssl ssl-cert php5-cli php5-sqlite php5-gd php5-curl 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

5. Creating your SSL certificates for 2 years
    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

6. Configuring Ngnix web server
    sudo nano /etc/nginx/sites-available/default

    Copy and replace the entire content below:
    Note: You'll have to replace 192.168.XXX.XXX with the local IP of your Raspberry Pi. If you have planned instead to use any Dynamic DNS domain, then use your  domain name instead of the local IP address. You can follow our guide for setting up a Dynamic DNS domain.
server {
listen 80;
server_name 192.168.XXX.XXX;
rewrite ^ https://$server_name$request_uri? permanent; # enforce https
server {
listen 443 ssl;
server_name 192.168.XXX.XXX;
ssl_certificate /etc/nginx/cert.pem;
ssl_certificate_key /etc/nginx/cert.key;
root /var/www/owncloud;
index index.php;
client_max_body_size 1000M; # set maximum upload size
fastcgi_buffers 64 4K;
location ~ ^/owncloud/(data|config|\.ht|db_structure\.xml|README) {
deny all;
location / {
try_files $uri $uri/ index.php;
location @webdav {
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS on;
include fastcgi_params;
location ~ ^(?<script_name>.+?\.php)(?<path_info>/.*)?$ {
try_files $script_name = 404;
include fastcgi_params;
fastcgi_param PATH_INFO $path_info;
fastcgi_param HTTPS on;
view rawdefault hosted with ❤ by GitHub

7. Configuring max upload limit in php
    sudo nano /etc/php5/fpm/php.ini

    Tip: Use ctrl+w to search below lines and update:
    upload_max_filesize = 1000M
    post_max_size = 1000M

    At the end of the file, we'll add also the following:
    upload_tmp_dir = /srv/http/owncloud/data 
    extension = apc.so 
    apc.enabled = 1 
    apc.include_once_override = 0 
    apc.shm_size = 256

    Next, we create the folder with the associated rights 
    sudo mkdir -p /srv/http/owncloud/data
    sudo chown www-data:www-data /srv/http/owncloud/data

8. Configuring PHP 
    sudo nano /etc/php5/fpm/pool.d/www.conf
    Change the following line from:
    listen = /var/run/php5-fpm.sock 
    listen =

    sudo nano /etc/dphys-swapfile
    Change the following line from:

9. Restart web server and Php
    sudo /etc/init.d/php5-fpm restart
    sudo /etc/init.d/nginx restart

10. Install ownCloud (version 5.0.11 used here)
    sudo mkdir -p /var/www/owncloud
    sudo wget http://download.owncloud.com/download/5.0.11/owncloud_enterprise-5.0.11.tar.bz2
    sudo tar xvf owncloud_enterprise-5.0.11.tar.bz2
    sudo mv owncloud/ /var/www/
    sudo chown -R www-data:www-data /var/www
    rm -rf owncloud owncloud-5.0.7.tar.bz2

11. Setup admin account
    Now in the browser, login to the ip address of Raspberry Pi or if you have configured your domain name then use that and set up the admin account.

12. Linking your external USB hdd as the storage instead of tiny SD card (Optional)
    Ideally one should opt for using an external storage device since the SD card from which Raspberry Pi runs is barely sufficient to handle your cloud storage. You can follow our guide on How to auto-mount USB HDD. Next you need to follow the below steps to create a directory in USB hdd to hold the ownCloud data folder. Note: The mounted path to USB hdd is taken as /media/USBHDD here, change it accordingly.
    sudo service nginx stop
    sudo mkdir /media/USBHDD/OwnCloud5
    sudo chown www-data:www-data /media/USBHDD/OwnCloud5
    sudo mv /var/www/owncloud/data/ /media/USBHDD/OwnCloud5/ 

    Configure USB directory path in Nginx config.php
    sudo nano /var/www/owncloud/config/config.php 

   Change the below line
   'datadirectory' => '/var/www/owncloud/data' 
   'datadirectory' => '/media/USBHDD/OwnCloud5/data' 

    sudo service nginx start

13. For USB hdd with NTFS filesystem [This step was required for OwnCloud version 5.0.20, later versions probably fixed this and this step won't be required then]
    You might get the following warning on the login page of ownCloud.

Data directory  /media/USBHDD/OwnCloud5/data') is readable for other users. Please change the permissions to 0770 so that the directory cannot be listed by other users.

    To fix this, comment out the section in /var/www/owncloud/lib/util.php which checks for directory permissions.
    sudo nano /var/www/owncloud/lib/util.php

public static function checkDataDirectoryPermissions($dataDirectory) {
                else { 
                        $permissionsModHint = 'Please change the permissions to 0770 so that 
the director$ 
                                .' cannot be listed by other users.'; 
                        $prems = substr(decoct(@fileperms($dataDirectory)), -3); 
                        if (substr($prems, -1) != '0') { 
                                OC_Helper::chmodr($dataDirectory, 0770); 
                                $prems = substr(decoct(@fileperms($dataDirectory)), -3); 
                                if (substr($prems, 2, 1) != '0') { 
                                        $errors[] = array('error' => 'Data directory 
                                                'hint' => $permissionsModHint); 
                return $errors; 

That's all... Celebrate the fun... Fly high on clouds... and if you liked this guide, got benefited or feel worth reading kindly do share with your network.