Install the pre-requis

apt install apache2 libapache2-mod-php mariadb-server php-xml php-cli 
php-cgi php-mysql php-mbstring php-gd php-curl php-zip

Create The Database

Nextcloud works with Squlite3, MySQL, and PostgreSQL. Since this guide is based on a LAMP stack, it’s going to use MySQL/MariaDB. You can use PostreSQL, if you want. Sqlite3 is not recommended. Start off by signing in as your database’s root user.

Before you sign in, run the built-in secure installation script to remove junk and set up your admin account.

$ sudo mysql_secure_installation

Follow the instructions, and set up a new root password when asked. You can accept the defaults for everything.

# mysql -u root -p

Once in MySQL, you can create a new cloud database.


Next, create a user. You can use an existing user and skip this step, if you would prefer.

CREATE USER 'clouduser'@'localhost' IDENTIFIED BY 'yourpassword';

Finally, grant that new user all privileges on the cloud database.

GRANT ALL ON cloud.* TO 'clouduser'@'localhost';

Now, just flush the privileges and exit.



Get Nextcloud

With everything else set up and ready to go, you can now download Nextcloud and install it. Nextcloud is provided as a zip or tarball instead of a package. That’s actually okay. It’s easier to install and manage that way.

Rather than going the graphical route, just cd to your Downloads folder and get Nextcloud with wget You can go graphical, but this guide isn’t going to cover it.

$ cd ~/Downloads
$ wget

Now, just unzip.

$ unzip

It’s finally time to stick that newly unzipped Nextcloud folder in your web root directory. You can copy it there as root.

# mv nextcloud cloud
# cp -r /home/user/Downloads/cloud /var/www/cloud

The folder permissions won’t be ideal for use. You need to make Apache’s user the owner of nextcloud in order for it to be able to write your files to the directory. On Debian, that user is www-data.

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

Create the VirtualHost

Nous allons créer un VirtualHost via la commande suivante :

# vi /etc/apache2/sites-available/cloud.conf

Et on y enregistre :

<VirtualHost *:80>
     DocumentRoot /var/www/cloud/
     <Directory /var/www/cloud/>
          Options +FollowSymLinks
          AllowOverride All
          <IfModule mod_dav.c>
               Dav off
          SetEnv HOME /var/www/cloud/
          SetEnv HTTP_HOME /var/www/cloud/
     ErrorLog /var/log/apache2/cloud/error.log
     LogLevel warn
     CustomLog /var/log/apache2/cloud/access.log combined
     ServerSignature Off

Maintenant que l’on a configuré, le virtualhost, nous devons l’activer. Pour cela nous tapons la commande suivante :

# a2ensite cloud

On va créer le répertoire qui contiendra les fichiers de log de Nextcloud via la commande suivante :

# mkdir /var/log/apache2/cloud/

Nous devons créer le répertoire data afin de procéder à la configuration de Nextcloud :

# mkdir /var/www/cloud/data

Nous allons modifier le propriétaire sur les répertoires et fichiers pour le bon fonctionnement de Nextcloud :

# chown -R www-data:www-data /var/www/cloud/apps/
# chown -R www-data:www-data /var/www/cloud/config/
# chown -R www-data:www-data /var/www/cloud/data/
# chown -R www-data:www-data /var/www/cloud/themes/
# chown -R www-data:www-data /var/www/cloud/updater/
# chown root:www-data /var/www/cloud/.htaccess

On vérifie que l’on n’a pas fait d’erreur lors de la configuration de notre VirtualHost via la commande suivant :

# apachectl configtest

Si en retour on obtient un « Syntax OK », on rend le VirtualHost créé disponible via la commande suivante :

# systemctl restart apache2.service

Install Let’s encrypt

sudo apt install letsencrypt python-certbot-apache

sudo letsencrypt --apache --agree-tos --email your-email-address -d

Now we need to ensure that HTTP reverse proxy is set up:

sudo a2enmod proxy proxy_wstunnel proxy_http ssl

Add in the SSL Vhosts configuration

<IfModule mod_headers.c>
      Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"


Using the operating system cron feature is the preferred method for executing regular tasks. This method enables the execution of scheduled jobs without the inherent limitations the Web server might have.

To run a cron job on a *nix system, every 15 minutes, under the default Web server user (often, www-data or wwwrun), you must set up the following cron job to call the cron.php script:

# crontab -u www-data -e
*/15  *  *  *  * php -f /var/www/cloud/cron.php

You can verify if the cron job has been added and scheduled by executing:

# crontab -u www-data -l
*/15  *  *  *  * php -f /var/www/cloud/cron.php


add this line to your config.php file:

'memcache.local' => '\OC\Memcache\APCu',