NextCloud

De Le Wiki de Lug
Aller à la navigation Aller à la recherche

LXC Ubuntu 20.04

Installation Serveur

Source autre source

# apt update && apt upgrade

Archive NextCloud

Page de téléchargement

# apt install unzip
# cd /tmp/
# wget https://download.nextcloud.com/server/releases/nextcloud-21.0.1.zip
# unzip nextcloud-21.0.1.zip -d /var/www/
# rm nextcloud-21.0.1.zip
# chown -R www-data. /var/www/nextcloud

Serveur SQL MariarDB

Installation :

# apt install mariadb-server

On lance le script pour attribuer un mot de passe root, virer l'utilisateur anonyme etc.

# mysql_secure_installation
Set root password? [Y/n] y
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
... Success!

On créé la base de donnée pour NextCloud :

# mysql -U
MariaDB [(none)]> create database nextcloud;
MariaDB [(none)]> create user nextcloud@localhost identified by 'motdepasse';
MariaDB [(none)]> grant all privileges on nextcloud.* to nextcloud@localhost IDENTIFIED BY 'motdepasse';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit;

Installation de Apache2 & PHP7.4

# apt install imagemagick php-imagick libapache2-mod-php7.4 php7.4-common php7.4-mysql php7.4-fpm php7.4-gd php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-mbstring php7.4-bz2 php7.4-intl php7.4-bcmath php7.4-gmp

On créé le vhost local :

# vi /etc/apache2/sites-available/nextcloud.conf
Alias /nextcloud "/var/www/nextcloud/"

<Directory /var/www/nextcloud/>
  Require all granted
  AllowOverride All
  Options FollowSymLinks MultiViews

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

</Directory>

On active le site :

# a2ensite nextcloud.conf

On active quelques modules :

# a2enmod rewrite
# a2enmod headers
# a2enmod env
# a2enmod dir
# a2enmod mime

On active SSL :

# a2enmod ssl
# a2ensite default-ssl
# systemctl reload apache2

Configuration de NextCloud

On se rend sur l'adresse https://IP_NEXCLOUD/nextcloud/ et on rempli les champs indiqués puis ont clique sur "Terminer l'installation".

Page d'installation NextCloud

Si message d'erreur pas de panique, on retourne sur https://IP_NEXCLOUD/nextcloud/ pour vérifier que tout s'est bien déroulé.

Page de première connexion.

Configuration Reverse-Proxy NGINX

VHost NextCloud

Exemple de vhost pour NextCloud :

server {
listen 80;
    listen [::]:80;
    server_name     nextcloud.exemple.com;
   # return 404;
    return 301 https://$host$request_uri;
}

server {
server_name     nextcloud.exemple.com;
    error_page 403  https://nextcloud.exemple.com;

    location / {
            client_max_body_size 0; # 0 supprime la limite d'upload
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Protocol $scheme;
            proxy_set_header X-Forwarded-Host $http_host;
            proxy_pass https://IP_SERVEUR_NEXTCLOUD/nextcloud/;
    }

    listen [::]:443 ssl; # managed by Certbot
    listen 443 ssl; # managed by Certbot


    ssl_certificate /etc/letsencrypt/live/nextcloud.exemple.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/nextcloud.exemple.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    add_header Strict-Transport-Security "max-age=31536000" always;
    ssl_trusted_certificate /etc/letsencrypt/live/nextcloud.exemple.com/chain.pem;
    ssl_stapling on;
    ssl_stapling_verify on;

    location ^~ /.well-known {
        # The following 6 rules are borrowed from `.htaccess`

        location = /.well-known/carddav     { return 301 /remote.php/dav/; }
        location = /.well-known/caldav      { return 301 /remote.php/dav/; }
        # Anything else is dynamically handled by Nextcloud
        location ^~ /.well-known            { return 301 /index.php$uri; }

        try_files $uri $uri/ =404;
    }

}

Configuration de Nextcloud

On modifie le fichier de configuration de NextCloud pour qu'il accepte le nom de domaine et le reverse proxy :

NextCloud ~# vi /var/www/nextcloud/config/config.php
...
'trusted_domains' =>
 array (
         0 => '12.34.56.789',
         1 => 'nextcloud.exemple.com',
 ),
 'trusted_proxies' =>
 array (
         0 => 'IP_PROXY',
 ),
 'overwritewebroot' => '/',
...

Post-Installation

NextCloud est maintenant fonctionnel, mais si vous vous rendez, depuis la page de l'administrateur, sur Administrateur -> Paramètres -> Vue d'ensemble .

Accès du menu "Vue d'ensemble"

Il reste quelques réglages à effectués. (3 si vous avez suivie ce tutorial).

Message d'erreurs post installation

(optionnel) Jolie URL

# vi /var/www/nextcloud/config/config.php
...
  'installed' => true,
  'overwrite.cli.url' => 'https://nextcloud.exemple.com/nextcloud',
  'htaccess.RewriteBase' => '/nextcloud',
);
# cd /var/www/nextcloud/
# sudo -u www-data php /var/www/nextcloud/occ maintenance:update:htaccess

Limite de mémoire PHP à 512 Mo

# vi /etc/php/7.4/apache2/php.ini
...
memory_limit = 512M
...
# apache2ctl graceful

Préfixe de région par défaut

# vi /var/www/nextcloud/config/config.php
...
  'htaccess.RewriteBase' => '/nextcloud',
  'default_phone_region' => 'FR',
);

Memcache via Redis & APCu

source

# apt install redis-server php-redis php-apcu
# vi /etc/redis/redis.conf

Il faut activer les deux ligne suivantes en supprimant le "#" devant + modification des droits :

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

On désactive l'écoute TCP :

port 0
# usermod -a -G redis www-data
# systemctl restart redis
# systemctl restart apache2

Enfin, on édite Nextcloud pour utiliser Redis :

# vi /var/www/nextcloud/config/config.php
...
  'default_phone_region' => 'FR',
  'memcache.local' => '\OC\Memcache\APCu',
  'memcache.locking' => '\OC\Memcache\Redis',
  'memcache.distributed' => '\OC\Memcache\Redis',
  'redis' =>
  array (
    'host' => '/var/run/redis/redis-server.sock',
    'port' => 0,
    'timeout' => 1.5,
 ),
);

Il faut activer APCu dans "cli" pour éviter un bug avec certaines commandes :

# vi /etc/php/7.4/cli/conf.d/20-apcu.ini
extension=apcu.so
apc.enable_cli=1

Test final

On retoune dans le menu "Vue d'ensemble", normalement tous les tests devraient être validés :

Satisfaisant non ? :)

Comme suggéré on se rend sur ce site pour tester le niveau de sécurité de notre serveur NextCloud, si tout va bien vous devriez obtenir ceci :

une note comme j'aurais aimé en avoir à l'école.

Crontab

Source

# vi /etc/systemd/system/nextcloudcron.service
[Unit]
Description=Nextcloud cron.php job

[Service]
User=www-data
ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php
KillMode=process

Puis

# vi /etc/systemd/system/nextcloudcron.timer
[Unit]
Description=Run Nextcloud cron.php every 5 minutes

[Timer]
OnBootSec=5min
OnUnitActiveSec=5min
Unit=nextcloudcron.service

[Install]
WantedBy=timers.target

On active les scripts :

# systemctl enable --now nextcloudcron.timer

On peut ensuite se rendre dans "Paramètres" -> "Paramètres de base" pour vérifier que le changement est prise en compte :

C'est par ici Activation confirmé

datadirectory

Variable nécessaire pour certaines applications comme RainLoop :

# vi /var/www/nextcloud/config/config.php
...
 'overwritewebroot' => '/',
 'datadirectory' => '/var/www/nextcloud/data',
 'dbtype' => 'mysql',
...

Désactiver le découpage des 10Mb

Par default NextCloud découpe les téléchargement en portion de 10Mb, ce qui peut grandement ralentir les envoies de fichier imposant, pour le désactiver :

# cd /var/www/nextcloud/
# sudo -u www-data php occ config:app:set files max_chunk_size --value 0

Désactivé les "espaces de travails riches"

Source

Une fonction que je n'ai jamais utilisé, crée des fichier "readme.md" et des messages d'érreurs.. a voir.

# cd /var/www/nextcloud/
# sudo -u www-data php occ config:app:set text workspace_available --value=0

Astuces de personnalisation

Fichiers par défaut

Lorsque l'on créé un nouvel utilisateur, Nextcloud peuplera le nouveau dossier personnel avec le contenu de "/var/www/nextcloud/core/skeleton". Par défaut tous les utilisateurs se retrouveront donc avec diverse images et fichiers d'exemple sans intérêt.

Désativation du modèle de création

# vi /var/www/nextcloud/config/config.php
...
 'default_phone_region' => 'FR',
 'skeletondirectory' => '',
 'memcache.locking' => '\OC\Memcache\Redis',
...

Modèle de création personnalisé

Création du dossier pour le modèle :

# mkdir /var/www/nextcloud/mon_model

Ensuite on peut créer/copier les dossiers/fichiers que l'on souhaite à l'intérieur. Puis l'on attribue les droits au dossier et son contenu :

# chown -R www-data. /var/www/nextcloud/mon_model

Enfin, on active le nouveau dossier :

# vi /var/www/nextcloud/config/config.php
...
 'default_phone_region' => 'FR',
 'skeletondirectory' => '/var/www/nextcloud/mon_model',
 'memcache.locking' => '\OC\Memcache\Redis',
...

Application

Les applications s'installent via la GUI de l'administrateur :

Par ici les apps!

Certaines demandent cependant des interventions supplémentaires.

Antivirus ClamAV

Installation

Source

Il faut simplement installer l'antivirus sur le serveur :

# apt-get install clamav clamav-daemon

Puis installer "Antivirus for files" depuis la GUI de l'administrateur. Voila!

Configuration

vade retro satanas!

Support de Stockages Externes

Il faut activer "External storage support" via la GUI de l'administrateur. Un nouveau menu "Stockages Externes" apparaitra dans la console d'administration de l'administrateur.

Menu Stockages Externes

Partages CIFS/Samba

source

Par défaut les partages dit de types Windows ne sont pas disponible, il suffit d'installer les paquets suivants :

# apt install smbclient libsmbclient

Collabora Online

Client

On installe l'application "Collabora Online" via la GUI de l'administrateur.

Serveur

Source Autre source

On active le dépôt de Collabora :

# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0C54D189F4BA284D
# echo 'deb https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-ubuntu2004 ./' >> /etc/apt/sources.list

On installe le serveur de base :

# apt update && apt upgrade
# apt install loolwsd code-brand

On installe les modules de langue désirés (ici français, espagnol et anglais)

# apt install collaboraofficebasis6.4-fr collaboraofficebasis6.4-es collaboraofficebasis6.4-en-gb collaboraofficebasis6.4-en-us

On désactive la prise en charge du certificat SSL en local et on l'active pour le proxy :

# loolconfig set ssl.enable false
# loolconfig set ssl.termination true

On autorise notre serveur à se connecter :

# loolconfig set storage.wopi.host nextcloud.example.com

On redémarre le serveur Collabora pour activer les changements :

# systemctl restart loolwsd

Reverse-Proxy

Exemple de VHost pour le reverse proxy :

server {
    server_name  collabora.exemple.com;

    error_log /var/log/nginx/collabora.error;

    # static files
    location ^~ /loleaflet {
        proxy_pass http://12.34.56.789:9980;
        proxy_set_header Host $http_host;
    }

    # WOPI discovery URL
    location ^~ /hosting/discovery {
        proxy_pass http://12.34.56.789:9980;
        proxy_set_header Host $http_host;
    }

    # Capabilities
    location ^~ /hosting/capabilities {
        proxy_pass http://12.34.56.789:9980;
        proxy_set_header Host $http_host;
    }

    # main websocket
    location ~ ^/lool/(.*)/ws$ {
        proxy_pass http://12.34.56.789:9980;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $http_host;
        proxy_read_timeout 36000s;
    }

    # download, presentation and image upload
    location ~ ^/lool {
        proxy_pass http://12.34.56.789:9980;
        proxy_set_header Host $http_host;
    }

    # Admin Console websocket
    location ^~ /lool/adminws {
        proxy_pass http://12.34.56.789:9980;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $http_host;
        proxy_read_timeout 36000s;
    }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/collabora.exemple.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/collabora.exemple.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    add_header Strict-Transport-Security "max-age=31536000" always; # managed by Certbot

    ssl_trusted_certificate /etc/letsencrypt/live/collabora.exemple.com/chain.pem; # managed by Certbot
    ssl_stapling on; # managed by Certbot
    ssl_stapling_verify on; # managed by Certbot
}

server {
    if ($host = collabora.exemple.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80;
    listen [::]:80;
    server_name  collabora.exemple.com;

    error_log /var/log/nginx/collabora.error;

    # static files
    location ^~ /loleaflet {
        proxy_pass http://12.34.56.789:9980;
        proxy_set_header Host $http_host;
    }

    # WOPI discovery URL
    location ^~ /hosting/discovery {
        proxy_pass http://12.34.56.789:9980;
        proxy_set_header Host $http_host;
    }

    # Capabilities
    location ^~ /hosting/capabilities {
        proxy_pass http://12.34.56.789:9980;
        proxy_set_header Host $http_host;
    }

    # main websocket
    location ~ ^/lool/(.*)/ws$ {
        proxy_pass http://12.34.56.789:9980;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $http_host;
        proxy_read_timeout 36000s;
    }

    # download, presentation and image upload
    location ~ ^/lool {
        proxy_pass http://12.34.56.789:9980;
        proxy_set_header Host $http_host;
    }

    # Admin Console websocket
    location ^~ /lool/adminws {
        proxy_pass http://12.34.56.789:9980;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $http_host;
        proxy_read_timeout 36000s;
    }

}

Liaison Client/Serveur

On se rend dans le menu "Collabora Online" du menu d'administration de l'admin :

Ça se passe par ici Menu de configuration pour l'accès au serveur Collabora.

Webmail RainLoop intégré

Installation et configuration

On installe l'application "RainLopp" via la GUI de l'administrateur puis on se rend dans le menu "Paramètres" -> "Administration" -> "Paramètres supplémentaires" et on clique sur "Accédez à la page d'administration de RainLoop"


Menu Paramètres supplémentaires. Accès menu administration RainLoop.

Il faut se connecter avec l'utilisateur "admin" et le mot de passe par défaut "12345"


Ça fait peut n'est-ce pas ? Aucun problème réel cependant :)


Toujours sur la page d'accueil de l'administration de RainLoop (menu "génénral"), on peut voir que les limitations de PHP ne correspondent pas aux valeur par défaut de RainLoop :