Originally published February 4, 2017 (a work in progress)
I have been frustrated by the lack of sufficient network storage space offered by the university for purposes of research (50 GB of Box.com storage space is allowed to JHU users). I would also rather not end up paying ~$100/year of my own money for something like Dropbox or google drive. As a result, I aimed to setup my own server running NextCloud (successor to OwnCloud) running from a Raspberry Pi 3 with as an alternative. Since this is a rather new experience for me, I thought I may as well document it.
This guide is largely informed by the guides already written by PiMyLife for setting up a Raspbian OwnCloud server and UnixEtc for specifically setting up NextCloud. I am obligated the thank them greatly, as I never would have gotten through this without the help.
Purchase – ~$60 total since I already owned an external hard drive
- Raspberry Pi 3 – $43 for charger included from Canakit
- Micro SD card – $12 for 32GB at amazon – class 10 is your best bet and 32GB is around the best price performance at the moment
- Case – $6
- External hard drive – with charger – so avoid portable hard drives. (Already owned)
You’ll want to be able to connect the Pi to a monitor via HDMI, which I highly recommend for the initial setup. Having a second monitor or laptop primary monitor is also very helpful.
Once booted into Raspbian open up preferences via GUI.
- Change password (default is raspberry) to make it more secure.
- Expand file system to entire disk space
- Enable SSH under interfaces
- Set locale to your country
- Set keyboard
- Set wifi if you are setting up at home. If you’re connecting to university wifi I recommend using Ethernet as the Pi 3 seems incapable of connecting to the enterprise wifi network setup at Hopkins.
- Reboot to allow changes to take effect
Next, open terminal and run command below to determine the Pi’s IP address for connecting via ssh. It should be something like 10.
With ssh you should now be able to connect via Mac terminal or ssh terminal in Windows like PuTTY . This enables you to control the Pi from the command line and if you’re anything like me it’s easier to work from your primary computer in this fashion.
If you end up having to re-do the installation, you’ll have to reset the ssh certificate. Use the command below to clear the key to eliminate the error message.
ssh-keygen -R *your IP, ex. 192.168.3.10*
So via ssh or in Raspbian’s OS terminal, run the following commands to update. Say y for yes
sudo apt-get update
sudo apt-get upgrade
Then install Apache web server with the following command. Click y for yes to install.
sudo apt-get install apache2
Then on either computer try going to your Pi’s default IP and you should see the message below showing that Apache installed correctly. The IPV4 address should be something like http://192.168.1.99 or http://10.113.92.120
Following confirmation that Apache installed, install php5 via commands below
sudo apt-get install php5
sudo apt-get install php5-gd
sudo apt-get install sqlite
sudo apt-get install php5-sqlite
sudo apt-get install php5-curl
Next, restart Apache. I recommend also rebooting the entire pi as well
sudo service apache2 restart
Next, install NextCloud. Current version was 11.0.1 when I wrote this, but you can check their website for later versions that should be able to be installed in the same manner. Following commands move it to the correct folder and unzip the download.
sudo mv nextcloud-11.0.1.zip /var/www/html
sudo unzip -q nextcloud-11.0.1.zip
Then, quoting the already written guide directly for this part
Create the Data Directory
You must create a “data” folder for Nextcloud and set permissions. We will put the data in /var/nextcloud/data, because it is a secure location. Proceed as follows.
$ sudo mkdir -p /var/www/html/nextcloud/data
$ sudo chown www-data:www-data /var/www/html/nextcloud/data
$ sudo chmod 750 /var/www/html/nextcloud/data
Check the new directory with ls. You should see output like this, although of course your date and time will be different:
$ ls -ld /var/www/html/nextcloud/data
drwxr-x--- 2 www-data www-data 4096 Nov 20 14:41 /var/www/html/nextcloud/data
Set Directory Owners
Next, set the correct ownerships on Nextcloud “config” and “apps” directories:
$ cd /var/www/html/nextcloud
$ sudo chown www-data:www-data config apps
Create a Login for Nextcloud
In a browser, surf to your new Owncloud web page. Use the URL:
http://your Pis IP address/nextcloud
For example, the address of my Pi is 192.168.1.99. So I go the the URL:
You should see a mostly dark blue login page. In the middle is a “Performance Warning” about SQLite. Ignore that. Near the top it says “Create an admin account”. Think of a user name and password and type them into the boxes provided. Then click on the “Finish Setup” button.
…Wait for a couple of minutes while Nextcloud competes the installation. During this time, Nextcloud creates more files and directories in our data directory, and it puts a database in there too.
Hey Presto! After a after a short delay, you should see the Nextcloud intro page with the slogan “a safe home for all your data”. Click the cross at the top right of the dialogue to dismiss it. You should now be looking at the main Nextcloud “Files” page. There you can see a couple of folders, a Nextcloud MP4 video file, and a PDF Manual.
I should note that when I was trying this step, UBlock Orgin (default install on chromium in Raspbian and running on Chrome for my laptop) was blocking access to NextCloud, so you may need to either disable UBlock Origin or use an alternative browser in order to reach the nextcloud login page. This site brought my attention to the problem
Next, you’ll want to increase the max file size you can upload. Since you’re going to be editing the .ini file, I recommend backing it up temporarily to the Pi’s desktop with the following command.
cp /etc/php5/apache2/php.ini /home/pi/Desktop/
Next, edit the php.ini file with the following command to open it in the nano editor
sudo nano /etc/php5/apache2/php.ini
Find the following lines with CTRL+W and edit, then type CTRL+O to rewrite and hit enter to save. The hit CTRL+X to exit. Note – NextCloud is currently limited to 2000MB max file size.
Change these two lines:
post_max_size = 8M
upload_max_filesize = 2M
post_max_size = 2000M
upload_max_filesize = 2000M
Then restart Apache
sudo service apache2 restart
Connecting External Hard Drive
Reformat drive for NTFS in windows or MacOS and connect to the Pi. Then run the following commands in Raspbian to create the folders for your actual storage drive and be able to load the drive. lsblk lists the disks. You should see your external drive, otherwise it’s not formatted correctly.
sudo apt-get install ntfs-3g
sudo mkdir /var/nextcloud/
sudo mkdir /var/nextcloud/data/
UUID=8c0a7e15-a81a-4f59-9e30-7fabf14fff5c /var/nextcloud/data/ auto nofail,uid=33,gid=33,umask=0027,dmask=0027,noatime 0 0
Once you have everything set up like you like, I recommend creating a clone of the Raspbian drive so you can restore if you need to in the future. Guide for windows is described here and MacOS here or Linux here.
My specific mac command:
sudo dd if=/dev/rdisk3 bs=1m | gzip > /users/davidwilson/desktop/apache_pi_backup.gz
This takes quite a while to run since you’re compressing many GBs of data, so you can check that it’s still functioning in terminal on Mac with CTRL+T
I found it very frustrating not to be able to navigate the root folders in the Raspbian file system, so you can either sign in as root or grant access by downloading gksu and then activating it for a file system window.
sudo apt-get install gksu
To be continued – maybe