NextCloud is an open source fork of ownCloud that has gone completely FOSS (Free and Open-Source Software), the significant difference being ownCloud is closed source with two pricing models, wheras NextCloud is open source. The NextCloud developers value their users.
I recommend hosting this on a VPS with more than 100GB’s of storage or a dedicated server since the whole point of NextCloud is to be like Dropbox and save your files the more storage the better while the minimum storage requirement is 20GB.
- 1Ghz CPU
- 1GB Ram
- 20GB HDD
Even though a 20GB disk would be enough to install NextCloud on it’s not recommended due to the limited storage space for files. It is also recommended to keep backups of your server in the event of a failure. Most hosts will keep backups of the node, but will not be liable if you lose any data.
If you are looking for a reasonably priced VPS take a look at RamNode, they offer a great performance to dollar ratio.
Preparing the Server
For the purpose of this guide it’s best to install a fresh Ubuntu 16.04 LTS server (Minimal or Full) x64.
Since brand new installations are based on images, it’s best to update the server before any work has been done so that all packages are the most recent.
apt update && apt upgrade
Once the fetch has been completed hit the enter button to accept the upgrades and continue the installation.
Create a user account so that you can log in as a non-root user. Assign sudoers to your new account also.
adduser newuser sudo
Installing Nextcloud Dependencies
Time to install the basic LAMP stack! This command will install apache2, mysql, php7 and several modules that makes sure the three servers can collaborate between each other. When you are prompted to continue, press enter.
sudo apt install lamp-server^
During the installation MySQL will ask to set a root password. I suggest you use a random password generator site to generate a password and save it in a password manager. Tap enter when you have entered your desired password.
Nextcloud will also need some more dependencies so let’s install them now. Confirm the packages and press enter.
sudo apt install php-apcu redis-server php-redis && sudo apt install php-zip php-dompdf php-xml php-mbstring php-gd php-curl
This will install APCu, Redis, and the required PHP modules. Now it’s time to enable a few Apache modules required for configuration:
sudo a2enmod rewrite headers env dir mime
sudo service apache2 restart
Navigate to http://your-server-ip and verify that the page is working.
Installing Let’s Encrypt
Let’s Encrypt is a certificate authority which “hands out” free SSL certificates, the only catch is that they need to be renewed frequently but I will cover how to set-up auto renewal in this guide.
sudo apt install letsencrypt python-letsencrypt-apache
Now lets create the certificate
sudo letsencrypt --apache --agree-tos --email your-email-address -d nextcloud.your-domain.com
When going through the Let’s Encrypt setup wizard choose the Secure option.
Now when you navigate to your site you will be greeted with a green confirmation in your URL bar confirming that SSL is enabled.
While we are configuring Apache, let’s edit the le-config and add a line at the bottom of the file right after the SSLCertificateKeyFile line:
<IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" </IfModule>
sudo systemctl reload apache2
Your webroot default directory is set too /var/www/html lets cd to /var/www and rm -rf html
Download the latest version of NextCloud from their official site.
sudo wget https://download.nextcloud.com/server/releases/nextcloud-10.0.0.tar.bz2
Unpack the archive with the command.
sudo tar -xvjf nextcloud-10.0.0.tar.bz2
Now let’s rename the nextcloud folder to www.
sudo mv nextcloud www
Change the permissions so Apache can read and write to the folder.
sudo chown -R www-data:www-data /var/www/html
Creating MySQL Database
You can either give nextcloud your root MySQL password and it can create the databases for you or you can use this section to create your own databases if you do not feel comfortable giving nextcloud your root MySQL information.
Open a root MySQL session.
mysql -U root -p
Let’s create a database and a user for NextCloud. (Replace database name, username and password with your own information of your choice).
CREATE DATABASE nextcloud; CREATE USER 'YOURUSER'@'localhost' IDENTIFIED BY 'YOURPASSWORD'; GRANT ALL PRIVILEGES ON nextcloud . * TO 'YOURUUSER'@'localhost';
Exit the MySQL session with:
Once you have navigated back to your NextCloud ui and put in the database information, let’s move on to finishing the setup and tuning the URL’s.
1. Enabling .htaccess
sudo nano /etc/apache2/apache2.conf
Use Ctrl+W and paste the first line in below to jump to the correct section.
Options Indexes FollowSymLinks AllowOverride
Require all granted
sudo service apache2 restart
2. Configure Redis
Confirm that Redis is set to start on boot:
sudo systemctl enable redis
Open the next cloud configuration file:
sudo nano /var/www/nextcloud/config/config.php
Add the following lines above the );
'memcache.distributed' => '\OC\Memcache\Redis', 'memcache.local' => '\OC\Memcache\Redis', 'memcache.locking' => '\OC\Memcache\Redis', 'redis' => array( 'host' => 'localhost', 'port' => 6379, ),
3. Making the URL look cleaner
Go to your nextcloud root folder.
Open the NextCloud config file:
sudo nano /var/www/html/config/config.php
Add the following to the end of the file below an existing line:
'htaccess.RewriteBase' => '/',
Update the .htaccess:
sudo -u www-data php occ maintenance:update:htaccess
That pretty much wraps up how to install NextCloud on an Ubuntu Server. If you have any further questions please leave a comment below and I will do my best to help you out.