Raspberry Pi ownCloud: Your Personal Cloud Storage

In this project, we are going to make a Raspberry Pi Owncloud server that can act as your very own personal cloud storage.

Raspberry Pi Owncloud

As the protection of your privacy becomes harder and harder, you may be thinking of moving your files to a private cloud storage. If this is the case, then this tutorial is perfect for you.

It is important to remember that since your data will be stored on your local network, you will end up with using more bandwidth if uploading and downloading files from outside your network.

This tutorial will take you through everything you need to know to get Owncloud setup and accessible.

If you’re curious and want to learn more about the Owncloud software, be sure to check out the Owncloud website.

Equipment

I made use of the following equipment for this personal cloud storage setup.

Recommended

Optional

Note: It is highly likely that the USB ports on the Raspberry Pi will be unable to power an external hard drive so you may need to invest in a powered USB hub.

Video

If you’re a visual person and would like to see our video on how to put this tutorial together, then check out the video below.

It will take you through everything you need to know get your Raspberry Pi Owncloud server up and running.

Setting up The Raspberry Pi Owncloud Server

Firstly, you will need to have a Raspberry Pi with an OS installed. If you haven’t installed Raspberry Pi OS, then check out our guide on installing Raspberry Pi OS.

There are quite a few ways you’re able to install Owncloud onto your Raspberry Pi. In this particular tutorial, we’re going to be installing a NGINX web server and Owncloud.

Installing NGINX and PHP

The first thing we need to do is install both NGINX and PHP to our Raspberry Pi. We will need both of these pieces of software to run the Owncloud software.

1. Firstly, in either The Pi’s command line or via SSH, we will need to update the Raspberry Pi and its packages, do this by entering:

sudo apt update
sudo apt upgrade

2. Next, we need to add the www-data user to the www-data group.

sudo usermod -a -G www-data www-data

These instructions have been updated to work with Raspberry Pi OS Bullseye. If you’re on an earlier version, then I highly recommend you upgrade to Bullseye before continuing.

You can follow our guide on upgrading from Raspberry Pi OS Buster to Bullseye.

Alternatively, we do have a workaround if you want to stick with an older release of Raspberry Pi OS.

3. In this step, we will be installing all the packages that we require to run Owncloud. This includes PHP 7.4 and its numerous modules that OwnCloud relies upon.

Run the following command to install everything we need.

sudo apt-get install nginx openssl ssl-cert php7.4-xml php7.4-dev php7.4-curl php7.4-gd php7.4-fpm php7.4-zip php7.4-intl php7.4-mbstring php7.4-cli php7.4-mysql php7.4-common php7.4-cgi php7.4-apcu php7.4-redis redis-server php-pear curl libapr1 libtool libcurl4-openssl-dev

When running this command on older versions of Raspberry Pi OS, you might run into a “package not found” error. You can work around most of these by adding a third-party PHP repository to your operating system.

Setting up NGINX for Owncloud and HTTPS

Our next step is to now set up and configure NGINX for it to work with the Owncloud software. We will also be setting NGINX up so that it can support HTTPS connections as well.
1. Now we need to create an SSL certificate you can do this by running the following command:

sudo openssl req $@ -new -x509 -days 730 -nodes -out /etc/nginx/cert.pem -keyout /etc/nginx/cert.key

Just enter the relevant data for each of the questions it asks you.

2. In addition to the SSL certificate, we also need to generate a custom dhparam file. This file helps ensure that our SSL connections are kept secure. By default, this would use a default one that isn’t nearly as secure.

To generate a 2048 byte long dhparam file, run the following command on your Raspberry Pi. This process will take quite a long time, up to 2 hours.

Adding the dhparam flag to the command will help speed up the process, but arguably is less secure.

sudo openssl dhparam -out /etc/nginx/dh2048.pem 2048

3. Now we need to chmod the three cert files we just generated.

sudo chmod 600 /etc/nginx/cert.pem
sudo chmod 600 /etc/nginx/cert.key
sudo chmod 600 /etc/nginx/dh2048.pem

4. Let’s clear the server config file since we will be copying and pasting our own version in it.

sudo sh -c "echo '' > /etc/nginx/sites-available/default"

5. Now let’s configure the web server configuration so that it runs Owncloud correctly. I use the nano text editor to edit most files.

sudo nano /etc/nginx/sites-available/default

6. Now simply copy and paste the following code into the file.

upstream php-handler {
    server unix:/var/run/php/php7.4-fpm.sock;
}

server {
    listen 80;
    server_name _;

    #Allow letsencrypt through
    location /.well-known/acme-challenge/ {
        root /var/www/owncloud;
    }

    # enforce https
    location / {
        return 301 https://$host$request_uri;
    }
}
  
server {
    listen 443 ssl http2;
    server_name _;
  
    ssl_certificate /etc/nginx/cert.pem;
    ssl_certificate_key /etc/nginx/cert.key;

    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:AES256+EDH';
    ssl_dhparam /etc/nginx/dh2048.pem;
    ssl_prefer_server_ciphers on;
    keepalive_timeout    70;
    ssl_stapling on;
    ssl_stapling_verify on;
  
    add_header Strict-Transport-Security "max-age=15552000; includeSubDomains; preload" always;
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;
  
    root /var/www/owncloud/;
  
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
  
    # The following 2 rules are only needed for the user_webfinger app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
    #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
  
    location = /.well-known/carddav {
        return 301 $scheme://$host/remote.php/dav;
    }
    location = /.well-known/caldav {
        return 301 $scheme://$host/remote.php/dav;
    }
  
    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 8 4K;
    fastcgi_ignore_headers X-Accel-Buffering;
  
    gzip off;
  
    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;
  
    location / {
        rewrite ^ /index.php$uri;
    }
  
    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
        return 404;
    }

    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
        return 404;
    }
  
    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS on;
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_read_timeout 180;
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off; #Available since NGINX 1.7.11
    }
  
    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
        try_files $uri $uri/ =404;
        index index.php;
    }
  
    location ~ \.(?:css|js)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "max-age=15778463";
        add_header Strict-Transport-Security "max-age=15552000; includeSubDomains";
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        access_log off;
    }

    location ~ \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg|map)$ {
        add_header Cache-Control "public, max-age=7200";
        try_files $uri /index.php$uri$is_args$args;
        access_log off;
    }
}

7. Now save and exit out of the file by pressing CTRL + X, then Y, followed by ENTER.

8. As we have made changes to NGINX’s configuration we need to restart it’s service by running the following command.

sudo systemctl restart nginx

Tweaking PHP for Owncloud

With NGINX now set up, we can now go ahead and prepare PHP to work with our Owncloud installation. As we use php-fpm, there are a few additional things we need to do.

1. Now that is done, there are a few more configurations we will need to update, first open up the PHP config file by entering.

sudo nano /etc/php/7.4/fpm/php.ini

2. In this file, we want to find and update the following lines. (CTRL + W allows you to search)

Find

upload_max_filesize = 2M

Replace With

upload_max_filesize = 2000M

Find

post_max_size = 8M

Replace With

post_max_size = 2000M

3. Once done, save and then exit by pressing CTRL + X, followed by Y, then ENTER.

4. Our next step is to make some changes to the php-fpm pool configuration. The reason for this is that php-fpm can’t access environment variables.

Run the following command to begin modifying the configuration file.

sudo nano /etc/php/7.4/fpm/pool.d/www.conf

5. Within this file, find the following block of code and replace it with what we have below.

You can use CTRL + W to find this block of code faster. Typically its located near the bottom of the file.

Find

;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp

Replace With

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

6. With these changes made, go ahead and save the file by pressing CTRL + X, followed by Y, then ENTER.

Adding Swap Memory

Our next step is to add some swap memory to our system.

Adding swap memory allows the Raspberry Pi to work further beyond its memory by making use of space on the storage device. While a lot slower then RAM it is better then the program crashing

1. To increase the amount of swap memory, we need to modify a file called dphys-swapfile.

To modify this file, make use of the following command:

sudo nano /etc/dphys-swapfile

2. Within this file, find the following line and change it to what we have below.

Find

CONF_SWAPSIZE=100

Replace With

CONF_SWAPSIZE = 512

3. Once done, save and then quit by pressing CTRL + X, followed by Y, then ENTER.

4. For our changes to take effect, we will need to now restart the Raspberry Pi by running the command below.

sudo reboot

Setting up a MySQL Database & User for Owncloud

Before beginning this section, you must have already set up a MySQL server on your Raspberry Pi.

1. To be able to create our database, we will need to make use of the MySQL command-line interface.

We can load up the tool by running the following command.

sudo mysql -u root -p

2. Once logged in, you can begin interacting with your MySQL server.

The database we will be creating is called ownclouddb. We can create this database by running the following command.

CREATE DATABASE ownclouddb;

3. With the database created, let’s now create a user that can interact with it.

We can create a user called ownclouduser by running the command below. Make sure that you replace [PASSWORD] with a secure password and make a note of it for later.

CREATE USER 'ownclouduser'@'localhost' IDENTIFIED BY '[PASSWORD]';

4. Our next step is to give access permissions to our new user.

We can grant these privileges by running the following command.

GRANT ALL PRIVILEGES ON ownclouddb.* TO 'ownclouduser'@'localhost';

5. The final task is to flush the privileges. If we don’t do this, then our changes won’t be utilized by the server.

To flush the privileges, all we need to do is run the following command.

FLUSH PRIVILEGES;

Once the privilege table has been flushed, we can proceed to install and set up the Owncloud software.

Downloading & Extracting Owncloud

Now in this section, we will be installing the actual Owncloud software on to our Raspberry Pi. Installing Owncloud requires a couple of straightforward steps.

1. Once the Pi has restarted, you will need to install Owncloud onto the Raspberry Pi.

Let us change to the directory where we will be running the script from.

cd /var/www/

2. Now that we are in the right directory we can now download the latest version of Owncloud.

To do this we will make use of wget by running the command below.

sudo wget https://download.owncloud.com/server/stable/owncloud-complete-latest.tar.bz2

3. Now extract the archive we downloaded by using the tar command.

sudo tar -xvf owncloud-complete-latest.tar.bz2

4. With everything extracted we need to make sure that the www-data owns the files.

We can recursively modify the permissions of the file by using the chown command.

sudo chown -R www-data:www-data /var/www

5. Now we need to open up the .user.ini file to enforce some of the changes we made earlier in the tutorial

sudo nano /var/www/owncloud/.user.ini

6. In here update the following values, so they are 2000M:

upload_max_filesize=2000M
post_max_size=2000M
memory_limit=2000M

7. Now that is done, we should be able to connect to Owncloud at your PI’s IP address.

Before you set up the admin account, you might want to mount an external drive, so you have lots of disk space for your Raspberry Pi Owncloud server. Just follow the instructions in the next section.

Mounting & Setting up a Drive

Setting up an external drive while should be relatively straightforward but sometimes things don’t work as correctly as they should.

These instructions are for mounting and allowing Owncloud to store files onto an external hard drive.

1. Firstly if you have an NTFS drive we will need to install an NTFS package by entering the following:

sudo apt-get install ntfs-3g

2. Now let’s make a directory we can mount.

sudo mkdir /media/ownclouddrive

3. Now we need to get the GID, UID, and the UUID as we will need to use these soon. Enter the following command for the GID:

id -g www-data

4. Now for the UID enter the following command:

id -u www-data

5. Also if we get the UUID of the hard drive, the Pi will remember this drive even if you plug it into a different USB port.

ls -l /dev/disk/by-uuid
UUID Hard Drive

Copy the light blue letters and numbers of the last entry (Should have something like -> ../../sda1 at the end of it).

6. Now let’s add your drive into the fstab file so that it will boot with the correct permissions.

sudo nano /etc/fstab

7. Now add the following line to the bottom of the file, updating UID, GUID and the UUID with the values we got above. (The following should all be on a single line)

UUID=DC72-0315 /media/ownclouddrive auto nofail,uid=33,gid=33,umask=0027,dmask=0027,noatime 0 0

8. Reboot the Raspberry Pi, and the drives should automatically be mounted. If they are mounted, we’re all good to go.

Note: If you get an error stating the Pi is in emergency mode at boot up then this likely means a problem with the fstab entry. Just edit the fstab file (sudo nano /etc/fstab) and remove the added line or look for a mistake and fix it.

Setting up Owncloud

I will briefly go through the basics of setting up Owncloud Raspberry Pi here. If you want more information, I highly recommend checkout out the manuals on their website. You can find them at the Owncloud manual site here.

1. In your favorite web browser, you need to go to your Raspberry Pi’s IP address.

If you don’t know your Pi’s local IP, you can run the hostname command.

hostname -I

2. Once you go to the IP you’re like to get a certificate error, add this to your exception list as it will be safe to proceed.

On Chrome, you click the Show advanced button (1.).

Then clickProceed to [YOURPISIPADDRESS] (unsafe)” (2.).

Raspberry Pi Owncloud Server Chrome Security Warning

3. When you first open up Owncloud, you will need to do some initial setup steps.

The first thing you need to do is specify a username and password for your Owncloud admin account. (1.)

Next, we need to bring up the storage and database settings. You can do this by clicking the “Storage & database” dropdown (2.).

If you are using a different data folder, you can specify it now by using the Data folder textbox (3.)

We then need to bring up the MySQL database options. You can find these by clicking the MySQL/MariaDB toggle (4.).

Next, we need to fill out three bits of information, the database user, the password for that user, and the database name.

  1. First, you need to specify the “Database user” (A.). If you are following this guide, this should be ownclouduser.
  2. The second option you will need to specify the password you set for the above user. (B.)
  3. Finally, we need to set the database name. (C.) If you have used the ones from this tutorial, you should set this to ownclouddb.

Once you have finished with all the settings, click the Finish setup button (4.).

Owncloud Server Setup Configuration Screen

If you ever need to update and you find the internal updater is not working, this likely means you will need to do it manually.

You can find a detailed process on how to update over at Owncloud’s update manual page.

The next two sections will show you how to improve your Owncloud software even further.

Setting up Memory Caching for Owncloud

In this section, we will be showing you how to configure Owncloud to make use of APCu and Redis. APCu is used as an object memory cache, and Redis is used to deal with transactional file locking.

Using both of these will help improve the performance of Owncloud on your Raspberry Pi.

1. To be able to enable these, we ill need to make a change to the Owncloud configuration file.

Begin editing this file by running the following command.

sudo nano /var/www/owncloud/config/config.php

2. Within this file, find the following line and add the block of text below it.

Find

'installed' => true,

Add Below

  'memcache.local' => '\OC\Memcache\APCu',
  'memcache.locking' => '\OC\Memcache\Redis',
  'redis' => [
    'host' => 'localhost',
    'port' => 6379,
  ],

3. Once done, save the file by pressing CTRL + X, then Y, followed by ENTER.

Using System Cron with Owncloud

The Owncloud team recommends that you should set it up so that the operating system runs the scripts cron jobs instead of Ajax.

1. To be able to set up a cron job for Owncloud, we will need to make use of the www-data user’s crontab.

Begin modifying the user’s cron by running the following command.

sudo crontab -u www-data -e

If you are asked what editor you should use to modify the crontab, we highly recommend that you use nano.

2. Add the following line to the bottom of this file.

*  *  *  *  * /usr/bin/php /var/www/owncloud/occ system:cron

This line will run Owncloud’s cron job every minute.

3. Once done, save the file by pressing CTRL + X, followed by Y, then ENTER.

You should now have Owncloud set up correctly on your Raspberry Pi.

Port Forwarding & External Access

If you want to have access to your cloud drive outside your local network, then you will need to setup port forwarding and make a few changes to our config files.

You can get your external IP address at what is my IP.

If you have a dynamic IP you may want to set up a dynamic DNS and use that as your address. You can find information on this in my guide to port forwarding.

To do this open up the Owncloud config file by using the following command.

sudo nano /var/www/owncloud/config/config.php

In here add a new item to the trusted domains array (This will be your external IP address). Your new entry should look something like this (x are just placeholders).

1 => 'xxx.xxx.xxx.xxx',

Finally update the URL of the “overwrite.cli.url” line to your IP Address. It should look something like this.

'overwrite.cli.url' => 'https://xxx.xxx.xxx.xxx',

Below is an example of the completed config.txt file.

External IP Change Example

Be sure to check out my guide on port forwarding and use the following port 443 for internal, and I recommended a random port for the external port. Make sure when setting up the external port that it isn’t already reserved for a specific program.

When connecting to the Owncloud server externally, you will need to make sure you use https otherwise you will get an invalid request in your browser.

Setting up port forwarding is super easy to do and allows you to have access to your personal cloud on the go. Also after you have done this, you can still connect via your local IP as well.

I hope this tutorial has helped you make your very own Raspberry Pi OwnCloud. If you have any troubles, want to leave feedback or if I have missed anything feel free to drop us a comment below.

Leave a Reply

Your email address will not be published. Required fields are marked *

306 Comments

  1. Avatar for Nick
    Nick on

    Hello,
    how can i upgrade to a newer version of Owncloud. Everytime I try by using Owncloud itself it gives me an error. Is there another way ??

    1. Avatar for Gus
      Gus on
      Editor

      Hi Nick,

      I am gonna take a look at this and a few other issues people seem to be having.

  2. Avatar for João Patrocínio
    João Patrocínio on

    Does it work with apache2 without ssl ????

  3. Avatar for Shahid
    Shahid on

    I have Followed all the steps. when i access via raspi’s IP add
    Access to the webpage was denied

    403
    You are not authorized to access the webpage at https://192.168.137.116/. You may need to sign in.
    Help please

  4. Avatar for Nick
    Nick on

    Hello,

    how can i update owncloud? There’s a newer version of owncloud this is owncloud 8.2.2 and i have owncloud 8.1.1.

    thnx

  5. Avatar for K'Ron
    K'Ron on

    This is a great walk through but when I went to enter my ip address into my web browser I get a web page error saying that the web page is unavailable. If anyone else has had this problem, please let me know and tell me how to managed to fix it. Any help would be greatly appreciated

    1. Avatar for Nick
      Nick on

      hey
      make sure you start with https:// and then your ip-address

  6. Avatar for Daniel
    Daniel on

    I have a 502 Bad Gateway error when i try to acces by browser. I had checked up all configs for 3 times and its all OK!.. What i do now?

    1. Avatar for Mac
      Mac on

      Exactly the same problem here. Did you manage to fix it?

  7. Avatar for Tyler
    Tyler on

    Everything has been double checked and I still can’t get my owncloud to work outside the firewall. I type in my external IP with https:// and my listening port, but I get a HTTP 500 error. Help anyone please

  8. Avatar for Alex
    Alex on

    I have seen this issue a few times in the comments, but it’s not answered. I went through all the installation and drive mounting steps (multiple times), but when I try and do the Basic First Setup I can’t get the ownCloud application to connect to my hard drive. When I enter “/media/ownclouddrive” I get the “can’t create or write into the data directory” error.

    I figured it was a permissions thing so I ran “sudo chmod -R 777 /media/ownclouddrive” to make it completely open. OwnCloud doesn’t like that and tells me to change the permissions to 0770 so that the dir cannot be listed by others. But when I do that I get an Internal Server Error. It doesn’t give any further details. I don’t know if there is a problem with the setting for my hard drive or if there is something in the configuration of my pi. Any help is appreciated.

  9. Avatar for Rob V
    Rob V on

    Great tutorial, easy to follow, and helpful. I was to create the server and mount the drive, but am not able to connect the pi. When I go to the ip address I get an error “Could not connect: Connection Refused” Any ideas, or help would be much appreciated.

    1. Avatar for Joey
      Joey on

      I came across this error, seems as though my /etc/nginx/sites-available/default was erased somewhere in the process (or I didn’t save it correctly). I just went through step 9 and 10 again and it worked

  10. Avatar for Jacke
    Jacke on

    Hey I have a problem after mounting my harddrive, after I write the blue text with the uuid and so I cant reboot. It says something like starting shell and then just stops there. When I type in startx I come to the root user and the server wont work?(I dont get any fails in the boot log) Do you have any ideas?
    thanks

    1. Avatar for William
      William on

      Hi Jacke,

      Can you please double check if you copy correctly the UUID for your hard drive? I had that problem and I fixed it with the correct UUID.
      It should look something like this:
      UUID=7EF46D3BF46CF6B5 /media/owncloud auto uid=33,gid=33,umask=0027,dmask=0027,noatime 0 0
      Best,

      William

  11. Avatar for kenneth dyson
    kenneth dyson on

    Hi, thanks for this tutorial. i was able to get this working in my lab which has a static ip, great news! however my home isp has dynamic dns. i got a hostname with no-ip, and set up port forwarding but i can’t seem to be able to get it to work, either from within or outside the home. a few questions for clarification (a noob at networking):
    1. For server name – do i enter the https? the www? or just the hostname without the prefixes?
    2. For the port forwarding, you mention to use 443 as internal and a random for external. is that for one entry? do i set up the service port as the random and internal as 443?
    3. I was under the understanding that web servers used port 80. my isp blocks port 80, so i had my no-ip host redirect to 8080. so does the port forwarding go like this,in one entry:
    service/external=8080
    internal=443
    ip address=my pi’s address taken from ifconfig
    protocol=all

    Thanks

    1. Avatar for William
      William on

      Hi Ken,

      I assume all your questions relating to port forwarding. So here is my answers:

      1. server name is your External IP address (simply replace the local IP you set up earlier with the external IP address) There are 2 of them in the file.

      2. My set up was:
      Internal port: 443
      External Port: xxxxx (a random number of 5 digits)
      Depending on your router or gateway, it will have different input but will be similar result. Mine asked starting port and ending port for both internal and external. So I filled both starting port and ending port of internal is 443, and the others are xxxxx.

      3. I would recommend you to use any random port number instead of 8080 to prevent overlapping.

      Hope it helps!

      William

    2. Avatar for kenneth dyson
      kenneth dyson on

      thanks for the quick reply William,
      i have some followup questions:
      1. since my external ip is dynamic i thought i could set the server name to be my no-ip host name “xxxxxxx.net” and that it would then send traffic to whatever ip address my isp set. is that not correct? if it is possible to do that, then would i set the server name to be “xxxxxx.net” or does it need the “www” before it or the “https://” before that?
      2. and 3. the no-ip host modification allows me to redirect from the default port 80. by default the redirect is 8080. are you saying that i should change 8080 to any random number of 5 digits, and then set up port forwarding to that number port? just curious, if it is not too much trouble, what is the reason for this? what is meant by “overlapping”.
      once again, thanks for taking the time to create this tutorial and do all this follow up.

    3. Avatar for kenneth dyson
      kenneth dyson on

      Thanks william,
      I got the port forwarding working with your advice. I have run into a couple of snags however. Perhaps you have some tips for these as well:

      Directing to my no-ip ddns domain name (lets call it: www.example.net) brings up “400 Bad Request – The plain HTTP request was sent to HTTPS port” and the ip address and port "xx.xx.xxx.xxx:xxxxx” shows in the navigation bar. typing “https://www.example.net” stalls until it finally times out. typing “https://xx.xx.xxx.xxx:xxxxx” brings me to my ounCloud. so that was workable, but not ideal given i could not use the no-ip domain i payed for. now, though, since my ip has changed typing in “https://xx.xx.xxx.xxx:xxxxx” with the new ip i am given the following message on the ownCloud page:

      "You are accessing the server from an untrusted domain.
      Please contact your administrator. If you are an administrator of this instance, configure the "trusted_domain" setting in config/config.php. An example configuration is provided in config/config.sample.php.
      Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain."
      -Add "www.example.net" as trusted domain -

      Clicking on the add domain button does nothing.

      I checked config/config.php and config/config.sample.php, and both are empty/blank files.

      I set up my certificate common name to be example.net. should that be www.example.net or http://www.example.net, or something like that? same goes for server name in default in nginx.

      In summary:

      • I can’t access ownCloud with domain name only by typing in ip address even though the address is associated with the ip.
      • Now since the ip has changed it is no longer trusted.
  12. Avatar for Mark
    Mark on

    Thank you for this great guide!

    Now, I was able to access and upload files from an external network.

    Before started following this guide, I got OSMC with Transmission and Samba got working. I can access my external hard drive through local network. After following this guide, OSMC is still working but I can no longer access my external hard drive.

    Is there something I can modify to allow me to access my external hard drive or at least let OSMC detect it so that I can add my videos, pictures, and movies to OSMC’s library?

    Thanks!

  13. Avatar for Nathanael
    Nathanael on

    When trying to restart nginx in the last step I get:

    Job for nginx.service failed. See ‘systemctl status nginx.service; and ‘journalctl -xn’ for details.

    Since I got to that step and that error, I can no longer access OwnCloud either internally or externally.

  14. Avatar for david woodruff
    david woodruff on

    How do I know it is using my external HDD for storage? When I log in or use my local OwnCloud app it says I am using X.X MB out of 8.4 GB.

    My external drive is 1 TB.

    1. Avatar for William
      William on

      Hi David,

      Please visit your owncloud then check settings -> users, and change the Quota to “Unlimited”

      Also make sure you selected correct path to your mounted external hard drive (/media/ownclouddrive) while you are setting up admin account.

      Or you can change it in config.php:

      sudo nano /var/www/owncloud/config/config.php

      Change to your preferred hard drive path:
      'datadirectory' => '/media/ownclouddrive',

      Hope it helps!

      William

  15. Avatar for indra
    indra on

    hi,, i have a question..
    this project can to access everywhere?

  16. Avatar for Terrance
    Terrance on

    Great tutorial
    I am having trouble adding the external usb drive. I added it as instructed and verified it was in the specified location using ls -l /media/ownclouddrive, however when I attempt to add it on my owncloud page under the personal info tab the drop down button is unresponsive and attempting to just type in the name is not helping.
    Any suggestions

    1. Avatar for david woodruff
      david woodruff on

      I did this in the terminal and it worked:
      chown -R www-data:www-data /media/ownclouddrive

    2. Avatar for Terrance
      Terrance on

      Thanks for the advice, but no success. I did some research and the only thing I could find is that I’m missing a directory /var/www/html and a of the children directories such as the apps folder and such

  17. Avatar for Ivan
    Ivan on

    when i try to do the create account with opencloud at beginning and i choose /media/ownclouddrive i get the following error

    Can’t create or write into the data directory /media/owncloud drive

  18. Avatar for sal
    sal on

    i have an error at the package installation stage where it fails to fetch some archives. It recommends then to run apt-get update but that doesn’t do anything.

    E: Failed to fetch http://mirrordirector.raspian.org... 404 not found[IP: x.xx.]
    is the server for these files no longer up? other packages were installed successfully

    1. Avatar for Drew
      Drew on

      Having same problem. Still looking for a workaround.

  19. Avatar for Davis
    Davis on

    I’m having an issue upon rebooting after mounting the drive. On boot I get the message: “Welcome to emergency mode! After logging in, type “journalctl -xb” to view system logs, “systemctl reboot” to reboot, “Sytemctl default” to try again to boot into default mode.
    sulogin: root account is locked, starting shell
    root@raspberrypi:”

    So far I haven’t found a way to log in and get passed this.

    1. Avatar for Randy
      Randy on

      Hi I had the same issue you’re probably using a Raspberry Pi 2 in that case you should mount you external hard disk with the following line:
      /dev/disk/by-uuid/d4384382-fe1c-4726-b536-a8c62435db94 /media/ownclouddrive ext4 auto uid=33,gid=33,umask=0027,dmask=0027, noatime 0 0
      ****use your own uuid of course.

    2. Avatar for Anon
      Anon on

      Thankyou so much for specifying this. ❤

    3. Avatar for Joshimuz
      Joshimuz on

      Thank you SOOOOOOOO MUCH!!
      I’ve been struggling with this for hours, trying to mount the HDD in other ways, but nothing working. Then I scroll down the comments section and find this, thank you SOOO MUCH. It works now! Amazing!

    4. Avatar for Rakesh
      Rakesh on

      Thankyou Randy you saved my day!!

    5. Avatar for William
      William on

      I had the same issue.

      My mistake was a typo. I would recommend you to double check the line of UUID.

      My mistake: (“ID” instead of “UUID”)
      ID=7EF46D3BF46CF6B5 /media/owncloud auto uid=33,gid=33,umask=0027,dmask=0027,noatime 0 0

      Correction:
      UUID=7EF46D3BF46CF6B5 /media/owncloud auto uid=33,gid=33,umask=0027,dmask=0027,noatime 0 0

      Hope it helps!

  20. Avatar for Carlo
    Carlo on

    Great tutorial, thanks.
    It works perfectly in my local network but when I try to connect to the server via the ip I get the message (I’ve checked in the owncolud.log) “…dont have permission to update and create…”.
    Could I have some help?