---
title: "Installation de NEXTCLOUD sur DEBIAN 11."
canonical: "https://blog.kaptus.net/space/BKAP/blog/169279489/Installation%20de%20NEXTCLOUD%20sur%20DEBIAN%2011."
format: markdown
---
> Macro (toc)

# 1. Introduction.

J’utilise [NEXTCLOUD](https://nextcloud.com/fr/) pour le stockage et le partage de document pour la société KAPTUS depuis quelques années maintenant. Le choix d’héberger sur nos propres serveurs, une instance [NEXTCLOUD](https://nextcloud.com/fr/), me permet de maitriser et de sécuriser les données. Pour ceux qui ne connaissent pas, je vous laisse découvrir la solution sur leur site. Bien sur si l’aspect maitrise de la sécurité n’est pas primordiale, vous pouvez vous tourner sur des solutions clés en main tel que celles proposées par l’hébergeur allemand [HETZNER](https://www.hetzner.com/storage/storage-share).

L'objectif de ce document est de décrire les étapes qui ont été effectuées pour installer une instance de [NEXTCLOUD](https://nextcloud.com/fr/) sur une VM sous [PROXMOX](https://www.proxmox.com/en/proxmox-virtual-environment/overview).

# 2. Mise en place d'un serveur dédié à NextCloud.

L’instance qui va être déployé est pour un club de tennis avec une volumétrie assez limité. Du coup je vais opté pour une VM sur PROXMOX.

|  |  |
| --- | --- |
|  | **HARDWARE** |
| Server Name | CPUs | Mem | Disk |
| ** **<span style="color: #ff6600">**tepalasaurus**</span>** ** ** **<span style="color: #ff6600">** **</span>  
** ** | <span style="color: #333333"> 2 </span> | <span style="color: #333333">4Go</span> | <span style="color: #333333">22Go</span> |
| **CONFIGURATION** |
| **Réseau** | **OS** | **Partitions** |
| ** **<span style="color: #000000">**IP**</span>  
** ** | ** **<span style="color: #000000">**XXX.XXX.XXX.XXX**</span>** ** | Debian 11.7 | / |
| ** **<span style="color: #000000">**MAC**</span>** ** | ** **<span style="color: #000000">**52:54:00:01:03:a3**</span>** ** |

# 3. Installation de la VM.

Pour ajouter une VM dans mon environnement, je pars d’une template DEBIAN11 sur notre serveur PROXMOX :

![image](media://0aa1126e-e377-4f5b-8f6d-7032143e40e1)

> Macro (drawio)

![image](media://2c3572f8-2fd1-4cfa-a44e-cfeee870c050)

Ensuite j’ai automatisé le reste de la configuration du serveur avec des playbooks ANSIBLE qui appellent différents rôles pour l’installation des composants dont je vais avoir besoin pour l’application NEXTCLOUD (apache, mariadb, les aspects sécurités, le DNS, etc…).

# 4. Installation de NextCloud.

Les préconisation d’installation de [NEXTCLOUD](https://docs.nextcloud.com/server/latest/admin_manual/installation/system_requirements.html), nous impose d’installer PHP 8.1 ou 8.2. Malheureusement, cette version de PHP n’est pas supporté par la version [BULLEYE](https://wiki.debian.org/PHP) de DEBIAN. Il faut donc l’installer à la mimine 💪.

## 4.1. Installation de PHP 8.

### 4.1.1. Désinstallation de PHP 7.4.

On désinstalle l'ancienne version de PHP.

```shell
service apache2 stop
aptitude remove -f php php-common
```

On liste des dépendances installées :

```shell
dpkg -l | grep php
```

![image](media://35561161-3144-4feb-8857-734013d8821c)

Et on supprime les dépendances associées :

```shell
aptitude remove libapache2-mod-php7.4 php7.4-bz2 php7.4-cli php7.4-common php7.4-curl php7.4-gd php7.4-common php7.4-curl  php7.4-gd  php7.4-json  php7.4-mbstring  php7.4-mysql php7.4-opcache   php7.4-readline  php7.4-xml php7.4-zip
```

### 4.1.2. Installation de PHP 8.1.

On ajoute des packages nécessaire pour installer les versions 8 de PHP :

```shell
apt-get install ca-certificates apt-transport-https software-properties-common wget curl lsb-release
apt-get install imagemagick
apt-get install libmagickcore-6.q16-6-extra
```

et on ajoute le dépôt des packages PHP 8 : 

```shell
curl -sSL https://packages.sury.org/php/README.txt | bash -x
apt-get update
```

Ensuite on peut installer PHP 8.1 :

```shell
apt-get install php8.1
apt-get install libapache2-mod-php8.1
systemctl restart apache2
php -v
```

![image](media://952602d0-bb18-41a9-b7dc-ed6adf72c156)

On installe ensuite les extensions :

```shell
aptitude install php8.1-bcmath  php8.1-bz2  php8.1-cgi php8.1-cli php8.1-common php8.1-curl php8.1-fpm php8.1-gd  php8.1-gmp php8.1-intl php8.1-json php8.1-ldap php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-phpdbg php8.1-readline php8.1-soap php8.1-xml php8.1-zip php8.1-mcrypt libapache2-mod-fcgid php8.1-imagick
```

La configuration du serveur httpd pour la prise en compte de la nouvelle version de PHP : 

```
a2enmod proxy_fcgi setenvif
a2enconf php8.1-fpm
systemctl restart apache2
systemctl status php8.1-fpm
```

Et le tour est joué 🤠.

On édite le fichier configuration php.ini et on l’adapte à ses besoins et ensuite on le copie dans les répertoire suivant :

```shell
cp php.ini /etc/php/8.1/apache2/
cp php.ini /etc/php/8.1/fpm/
cp php.ini /etc/php/8.1/cgi/
```

Et relancer le serveur apache.

```
service apache2 restart
```

## 4.2. Configuration de la base de données.

Se connecter à la base :

```shell
mysql -u root -p
```

Créer un base et l'utilisateur pour NextCloud et configurer les privilèges  :

```sql
CREATE DATABASE nextclouddb;
CREATE USER 'xxxxxxxxxxxxxxxx'@'localhost' IDENTIFIED BY 'xxxxxxxxxxxxxxxx';
GRANT ALL ON nextclouddb.* TO 'xxxxxxxxxxxxxxxx'@'localhost';
FLUSH PRIVILEGES;
```

## 4.3. Récupération de l'application NextCloud.

Télécharger la dernière version de NextCloud :

```shell
cd /opt/naos/archives/src/
wget https://download.nextcloud.com/server/releases/nextcloud-25.0.10.tar.bz2
```

## 4.4. Installation de NextCloud.

Décompresser l'archive :

```
mkdir -p /opt/naos/https/tepala.fr
cd /opt/naos/https/tepala.fr
tar xfv /opt/naos/archives/src/nextcloud-25.0.10.tar.bz2
chown -R www-data:www-data nextcloud
chmod -R 755 nextcloud
```

## 4.5. Configuration.

Dans le fichier de configuration de NEXTCLOUD :

```shell
vi /opt/naos/https/tepala.fr/nextcloud/config/config.php
```

Ajouter la ligne :

```php
'default_phone_region' => 'FR',
```

### 4.5.1. Mise en place du logo.

Placer le logo du TEPALA dans le répertoire **/opt/naos/https/tepala.fr/nextcloud/data **et ensuite lancer la commande :

```
sudo -u www-data php8.1 /opt/naos/https/tepala.fr/nextcloud/occ theming:config logo /opt/naos/https/tepala.fr/nextcloud/data/logo_tepala.png 
```

## 4.6. Mise en place d'un cron pour les tâche de fond.

NEXTCLOUD a besoin de lancer des tâches de fond régulièrement. Du coup, il faut mettre en place le cron suivant :

```shell
crontab -u www-data -e
```

Avec le contenu suivant :

```plaintext
*/5 * * * * php8.1 -f /opt/naos/https/tepala.fr/nextcloud/cron.php
```

Pour le lancer à la main :

```shell
sudo -u www-data php8.1 -f /opt/naos/https/tepala.fr/nextcloud/cron.php
```

## 4.7. Configuration apache2.

Le fichier **05_nextcloud_kpt_pw_443.conf** :

```xml
<VirtualHost *:443>
    DocumentRoot /opt/naos/https/tepala.fr/nextcloud
    ServerName nextcloud.tepala.fr
    Alias /nextcloud "/opt/naos/https/tepala.fr/nextcloud/"
    
    ServerAdmin webmaster@naostech.com
    DirectoryIndex index.html index.php
    ErrorLog /var/log/apache2/nextcloud.tepala.fr-error.log
    TransferLog /var/log/apache2/nextcloud.tepala.fr-access.log
    #
    # Errors files
    #
    ErrorDocument 400 https://www.kaptus.fr/400.html
    #ErrorDocument 401 https://www.kaptus.fr/401.html
    ErrorDocument 402 https://www.kaptus.fr/400.html
    ErrorDocument 403 https://www.kaptus.fr/403.html
    ErrorDocument 404 https://www.kaptus.fr/404.html
    ErrorDocument 405 https://www.kaptus.fr/405.html
    ErrorDocument 407 https://www.kaptus.fr/407.html
    ErrorDocument 408 https://www.kaptus.fr/408.html
    ErrorDocument 500 https://www.kaptus.fr/500.html
    ErrorDocument 501 https://www.kaptus.fr/501.html
    ErrorDocument 502 https://www.kaptus.fr/502.html
    ErrorDocument 503 https://www.kaptus.fr/503.html
    ErrorDocument 504 https://www.kaptus.fr/504.html
    ErrorDocument 505 https://www.kaptus.fr/505.html
    <IfModule http2_module>
    	Protocols h2 http/1.1
    </IfModule>
    SSLEngine on
# Certificat generated by par NAOS and certified by Let's Encrypt.
	SSLCertificateFile /var/lib/dehydrated/certs/nextcloud.tepala.fr/cert.pem
	SSLCertificateKeyFile /var/lib/dehydrated/certs/nextcloud.tepala.fr/privkey.pem
	SSLCertificateChainFile /var/lib/dehydrated/certs/nextcloud.tepala.fr/chain.pem
    <Directory "/opt/naos/https/tepala.fr/nextcloud">
    	Options +FollowSymlinks
      AllowOverride All
      <IfModule mod_dav.c>
      	Dav off
      </IfModule>
      SetEnv HOME /opt/naos/https/tepala.fr/nextcloud
      SetEnv HTTP_HOME /opt/naos/https/tepala.fr/nextcloud
        # New directive needed in Apache 2.4.3:
        Require all granted
    </Directory>
</VirtualHost>
```

# 5. Installation des applications tierces.

## 5.1. OnlyOffice

### 5.1.1. Configuration dans nextcloud.

Avec un compte admin, aller dans paramétres :

![image](media://d886ac8d-df4c-43ae-a13e-b7323fa4cc7c)

Cliquer sur ONLYOFFICE et configurer les paramétres comme suit :

![image](media://38bbcc77-f357-4e0a-ac13-4e71ccfa5d7e)

Cliquer sur enregistrer et si tous se passe bien, on devrait avoir le message suivant :

![image](media://75e390fc-35f1-4534-89f4-bd4c53b6e5b1)

## 5.2. KeeWeb.

### 5.2.1. Installation.

Installer l'application KeeWeb (rubrique "<span style="color: #ff6600"> </span><span style="color: #ff6600">**Intégrations**</span><span style="color: #ff6600"> </span>")depuis l'interface NextCloud :

![image](media://f0d5b6d1-250d-4ca8-9cfb-188251b1513e)

### 5.2.2. Configuration.

Ajouter dans la config NextCloud les mimes types suivants :

```shell
cd /opt/naos/https/tepala.fr/nextcloud/config
vi mimetypemapping.json 
vi config/mimetypealiases.json
```

  


```plaintext
{
	"km": [ "application/km" ],
	"kdbx": [ "application/x-kdbx" ]
}
```

  


```plaintext
{
    "application/km": "mindmap",
    "application/x-kdbx": "keeweb"
}
```

Mettre à jours les données pour l'ensemble des utilisateurs :

```shell
cd /opt/naos/https/tepala.fr/nextcloud
sudo -u www-data php8.1 occ maintenance:mimetype:update-js
sudo -u www-data php8.1 occ files:scan --all 
```

  


```plaintext
Starting scan for user 1 out of 3 (xxxxxx)
Starting scan for user 2 out of 3 (xxxxxx)
Starting scan for user 3 out of 3 (xxxxxx)
+---------+-------+--------------+
| Folders | Files | Elapsed time |
+---------+-------+--------------+
| 32      | 51    | 00:00:00     |
+---------+-------+--------------+
```

## 5.3. Configuration du cache REDIS.

### 5.3.1. Dépendances.

Les packages à installer :

```shell
aptitude install redis-server php8.1-redis
aptitude install php8.1-apcu 
```

### 5.3.2. REDIS.

Éditer le fichier /etc/redis/redis.conf :

```shell
vi /etc/redis/redis.conf
```

Et modifier la configuration :

```shell
unixsocket /var/run/redis/redis-server.sock
unixsocketperm 770
```

et :

```shell
port 0
```

### 5.3.3. NEXTCLOUD.

Editer le fichier /opt/naos/https/tepala.fr/nextcloud/config/config.php :

```
vi /opt/naos/https/tepala.fr/nextcloud/config/config.php
```

et ajouter la config :

```plaintext
'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'redis' => [
   'host'     => '/run/redis/redis-server.sock',
   'port'     => 0,
   'dbindex'  => 0,
   'timeout'  => 1.5,
      ],  
```

Ajouter le user www-data au groupe redis :

```shell
usermod -a -G redis www-data
```

Il faut ajouter dans la config du module php apc la ligne suivante :

```shell
vi /etc/php/8.1/mods-available/apcu.ini
```

```plaintext
apc.enable_cli=1
```

Exécuter la commande suivant :

```shell
sudo -u www-data php8.1 /opt/naos/https/tepala.fr/nextcloud/occ maintenance:repair
```

Ajouter le service fmp au boot :

```shell
systemctl enable php8.1-fpm
```

et relancer les services :

```shell
a2enmod socache_redis
systemctl restart php8.1-fpm.service
service redis-server restart
service apache2 restart
```

Normalement ça devrait fonctionner.

Dans l’interface NEXTCLOUD, il faudra bien s’assurer que tous les tests de contrôles soient bien passés :   


![image](media://d909d69c-d8f6-4aa6-94ce-f6cc426bb7a6)

Et ne pas hésiter à utiliser le scan de sécurité du site [NEXTCLOUD](https://scan.nextcloud.com/) : 

> Macro (drawio)

# 6. Conclusion.

Avec un peu de paramétrage on obtient la page d’authentification suivante :  

![image](media://c0f8591d-a818-4fa3-90f7-74de0800a309)

Et la page d’acceuil :   


![image](media://0115c1db-2033-4885-858a-76c584271208)