Step-by-step guide to deploy Nextcloud on DreamCompute

This article explains how to install Nextcloud on two DreamCompute instances. One instance is for  the application itself and the other instance for the database it uses.

Step 1 — Add a security group

First, create a Security Group for the database instance. This is so it allows TCP on port 3306, the MySQL/MariaDB port. View the following two articles for further instructions:

Step 2 — Launch an instance

Next, launch two Ubuntu 16.04 LTS instances.

  • The first instance will be for the database only.
  • The second instance is for the webserver NextCloud will run on.

View the following category of articles for different ways to do this:

When launching the database instance, make sure to assign the Security Group you just created in Step 1 above. If you forgot to add it while creating the instance, you can still add it later.

Use a volume based instance

It is recommended to boot a volume backed instance as they are permanent as opposed to ephemeral disks and can be larger than 80GB in size if larger amounts of data will be stored. This can be done in the DreamCompute dashboard or with the OpenStack command line client.

Step 3 — Installing MariaDB on instance #1

In order to install MariaDB on your database server, first log into the server with with your default username and security key:

Next, switch to your root user so you can install MariaDB:

[user@dbserver]$ sudo su - 
[root@dbserver]# 

As your root user, install mariadb by running:

[root@dbserver]# apt update
[root@dbserver]# apt install mariadb-server

During installation the root database user will be set up without a password, but an authentication plugin will prevent login from anyone but the operating system root user. A password can be set if desired.

Step 4 — Configuring MariaDB

Changing the bind address

Edit the 50-server.cnf file located at /etc/mysql/mariadb.conf.d/50-server.cnf. It will show the following:

[user@dbserver]$ vim /etc/mysql/mariadb.conf.d/50-server.cnf

bind-address            = 127.0.0.1

Edit this to change the IP to your database server.

bind-address            = $IP

where $IP is the IP address of the database instance.

If you have private networking enabled, this will be the private IP address and not the floating IP if your DB server has one.

This makes the database listen to connections from its IP address instead of only listening on 127.0.0.1 (the localhost).

Allowing root login from a foreign IP address

The database will now listen to connections from other servers, but you must allow users to log in from another IP address. Do this by logging into the DB as root.

[root@dbserver]# mysql -u root

Then run the following commands to create a database named 'nextcloud'.

MariaDB [(none)]> create database nextcloud;

In the next command, change $IP to the IP address of the second instance you created for the web server.

Do not add the IP address of the database instance as this will cause it to not connect.

Make sure to leave the single quotes around username, IP, and password. For example, if your password is Xhd379s, enter it like this

  • 'Xhd379s'
MariaDB [(none)]> GRANT ALL ON nextcloud.* TO 'nextclouduser'@'$IP' IDENTIFIED BY '$PASSWORD';

Check to confirm the user was added:

MariaDB [(none)]> select user from mysql.db where db='nextcloud';
+---------------+
| user          |
+---------------+
| nextclouduser |
+---------------+

Flush all privileges when finished.

MariaDB [(none)]> flush privileges;

If you want to allow root login from any IP address, you can change $IP to '%'. However this is not recommended, especially if your database server has a public IP address (because then anyone can try to access it).

Log out of the database:

MariaDB [(none)]> quit
Bye

Next, restart the mariadb service so the new configs are loaded by running:

[root@dbserver]# service mysql restart

This completes the installation of the database server.

Step 5 — Installing the Nextcloud application on instance #2

Installing dependencies

You must now deploy the frontend application. Log into the second instance you created. This is the instance you will install Nextcloud on. Once logged in, switch to the root shell again by running:

[user@webserver]$ sudo su - 
[root@webserver]# 

Then run the following commands to install Nextcloud and its dependencies.

[root@webserver]# apt update
[root@webserver]# apt-get install apache2 libapache2-mod-php7.0 unzip
[root@webserver]# apt-get install php7.0-gd php7.0-json php7.0-mysql php7.0-curl \
php7.0-mbstring php7.0-intl php7.0-mcrypt php-imagick php7.0-xml php7.0-zip

The backslash character \ is used when entering a long command. When you enter the \, the terminal command continues to the next line until you finish entering it.

You could also remove the \ character and put every parameter into a single line.

Step 6 — Downloading Nextcloud

Now we need to download the actual Nextcloud application.

  1. Navigate to https://nextcloud.com/install/#instructions-server in a browser.
  2. Right click the Download Nextcloud button. From the dropdown menu click 'copy link address'.
  3. In your root shell run the following (change the version to the link you just copied).
    [root@webserver]# wget https://download.nextcloud.com/server/releases/nextcloud-12.0.4.zip
    
  4. This will download a compressed copy of the Nextcloud application.
  5. Decompress the file by running the following (change the version number to the version you're using).
    [root@webserver]# unzip nextcloud-12.0.3.zip
    
This creates a directory called 'nextcloud' in your current directory.

Setting up the nextcloud directory

You must now copy Nextcloud to the directory /var/www/nextcloud. Run the following:

[root@webserver]# cp -R nextcloud /var/www/

Change the permissions of the nextcloud directory so the web user, www-data in this case, can access it. Run the following:

[root@webserver]# chown -R www-data:www-data /var/www/nextcloud

Step 7 — Configuring Apache

You must now configure Apache to use Nextcloud. Create a file in the directory /etc/apache2/sites-available called 'nextcloud.conf'.

[root@webserver]# touch /etc/apache2/sites-available/nextcloud.conf

Add the following contents to this file:

Alias /nextcloud "/var/www/nextcloud/"

<Directory /var/www/nextcloud/>
  Options +FollowSymlinks
  AllowOverride All

 <IfModule mod_dav.c>
  Dav off
 </IfModule>

 SetEnv HOME /var/www/nextcloud
 SetEnv HTTP_HOME /var/www/nextcloud

</Directory>

Next, symlink /etc/apache2/sites-enabled/nextcloud.conf to /etc/apache2/sites-available/nextcloud.conf by running the following:

[root@webserver]# ln -s /etc/apache2/sites-available/nextcloud.conf \
/etc/apache2/sites-enabled/nextcloud.conf

Nextcloud also needs certain apache modules to run properly. Enable them by running:

[root@webserver]# a2enmod rewrite

You should also use SSL with Nextcloud to protect login information and data. Apache installed on Ubuntu comes with a self-signed cert. To enable SSL using that certificate, run:

[root@webserver]# a2enmod ssl
[root@webserver]# a2ensite default-ssl
[root@webserver]# service apache2 restart

Step 8 — Finishing the Installation

Now that everything is configured on the server, open a browser and visit https://IP/nextcloud where IP is the IP address of your application instance.

Enter an admin username and password for this installation.

Next, scroll down and enter your database credentials:

  • The database user is 'nextclouduser'
  • The password is the password you set up for that user
  • The database name is the name you created it is in Step#4 above
  • The host is the IP address of your database server with :3306 appended to the end

Click Finish Installation and you have a working installation of Nextcloud.

Did this article answer your questions?

Article last updated PST.