Note: some of this information is outdated, check a newer release here

I would like to introduce my NextCloud ARM container for the Raspberry Pi.

It only weights 475 MB, and it is shares codebase with NextCloudPi, so it has the same features:

Raspbian 9 Jessie

Nextcloud 13.0.1

Apache 2.4.25, with HTTP2 enabled

PHP 7.0

MariaDB 10

Automatic redirection to HTTPS

ACPU PHP cache

PHP Zend OPcache enabled with file cache

HSTS

Cron jobs for Nextcloud

Sane configuration defaults

Secure

Small, only 475 MB in disk, 162 MB compressed download.

With this containerization, the user no longer requires to start from scratch in order to run NextCloud in their RPi, as opposed from flashing the NextCloudPi image. It also opens new possibilities for easy upgrading and sandboxing for extra security.

It can be run in any system other that Raspbian, as long as it supports docker.

Some of the extras will be added soon, where it makes sense.

Installation

If you haven’t yet, install docker in your Raspberry Pi.

curl -sSL get.docker.com | sh

Adjust permissions. Assuming you want to manage it with the user pi

sudo usermod -aG docker pi newgrp docker

Optionally, store containers in an external USB drive. Change the following line (adjust accordingly)

ExecStart=/usr/bin/dockerd -g /media/USBdrive/docker -H fd://

Reload changes

systemctl daemon-reload systemctl restart docker

You can check that it worked with

$ docker info | grep Root Docker Root Dir: /media/USBdrive/docker

Usage

Note: some of this information is outdated, check a newer release here

The only parameter that we need is the trusted domain that we want to allow.

DOMAIN=192.168.1.130 # example for allowing an IP DOMAIN=myclouddomain.net # example for allowing a domain docker run -d -p 443:443 -p 80:80 -v ncdata:/data --name nextcloudpi ownyourbits/nextcloudpi $DOMAIN

After a few seconds, you can access from your browser just typing the IP or URL in the navigation bar of your browser. It will redirect you to the HTTPS site

https://<rpi_ip_or_url>

The admin user is ncp, and the default password is ownyourbits. Login to create users, change default password and other configurations.

Other than that, we could map different ports if we wanted to. Note that a volume ncdata will be created where configuration and data will persist.

For example, you could wrap a script like this to allow your current local IP

#!/bin/bash # Initial Trusted Domain IFACE=$( ip r | grep "default via" | awk '{ print $5 }' ) IP=$( ip a | grep "global $IFACE" | grep -oP '\d{1,3}(.\d{1,3}){3}' | head -1 ) docker run -d -p 443:443 -p 80:80 -v ncdata:/data --name nextcloudpi ownyourbits/nextcloudpi $IP

If you ever need direct access to your storage, you can find out where your files are located.

$ docker inspect nextcloudpi ... ... "Mounts": [ { "Type": "volume", "Name": "ncdata", "Source": "/media/USBdrive/docker/volumes/ncdata/_data", "Destination": "/data", "Driver": "local", "Mode": "z", "RW": true, "Propagation": "" } ], ... ...

You can in this way alter your config.php

Details

The container consists of 3 main layers, totalling 476 MB.

ownyourbits/miniraspbian is a really tiny raspbian base image that I created following the basic techniques described in this earlier post. Only 52 MB!

ownyourbits/lamp-arm sits on top of ownyourbits/miniraspbian and provides apache, php and mysql in an additional 285 MB layer.

ownyourbits/nextcloudpi provides NextCloud, adding another 138 MB.

A benefit of docker layers is that we can sometimes just update the upper layers, or provide updates on top of the current layout.

Code

The build code is now part of the NextCloudPi repository.

You can build it yourself in a Raspbian ARM environment with.

git clone https://github.com/nextcloud/nextcloudpi.git make -C nextcloudpi

dockerhub