Catégories
Divers

Nextcloud

Nextcloud est un équivalent Open Source de Dropbox ou de Google Drive, et dispose comme ceux-ci de clients Android, IOS ou encore Windows, OSX ou Linux pour disposer de nos fichiers partout !

  • L’avantage est de récupérer le contrôle de nos données puisqu’on les héberge nous même, et de ne pas payer d’abonnement
  • Inconvénients: il faut gérer la partie serveur et la sécuriser correctement, faute de quoi on risquerait de s’exposer à la fuite de toutes nos données… ce qui serait catastrophique

Dropbox et Google Drive

Les grands acteurs actuels fournissent des espaces de stockages gratuits qui comportent certaines limitations :

  • Google drive nous offre (03/2020) 15 Go en version gratuite mais ces 15Go sont partagée 😲 entre les Gmail, les Google Photos et Drive… Et remplir cet espace partagé nous force à prendre l’abonnement pro immédiatement pour ne pas bloquer la réception de ses mails…
  • Dropbox limite depuis Mars 2019 dans sa formule gratuite 2 Go avec une utilisation sur 3 appareils maximum 🤨… ce qui peut être vite limitant! Ses formules payantes démarrent à 10€ par mois pour 2 To de stockage.

Bien sur il existe de nombreuses alternatives à Nextcloud, Droptbox et Google Drive fournissant des services de stockage, à choisir en fonction de ses exigences en terme de sécurité, fonctionnalité et tarifs.

Installation sous Linux

Installer les pré-requis

Il faut tout d’abord installer les outils nécessaire à l’exécution de Nextcloud, à savoir notre serveur web Nginx, un préprocesseur PHP php-fpm (supporte max v7.3 pour Nextcloud 18) et des modules PHP nécessaires et une base de données, il faudra choisir entre SQLite (pour un usage personnel), MariaDB ou autres.

sudo apt update && apt install -y \
	curl \
	nginx \
	php7.3-fpm \
	php7.3-intl \
	php7.3-ldap \
	php7.3-imap \
	php7.3-gd \
	php7.3-pgsql \
	php7.3-curl \
	php7.3-xml \
	php7.3-zip \
	php7.3-mbstring \
	php7.3-soap \
	php7.3-smbclient \
	php7.3-json \
	php7.3-gmp \
	php7.3-bz2 \
	php-pear \
	libbz2-dev \
	php-intl \
	php-imagick \
	php7.3-mysql \
	php-apcu \

Récupérer les fichiers à installer de Nextcloud

Il faut ensuite récupérer l’archive de la dernière version disponible de Nextcloud (ex ici: nextcloud-18.0.2.tar.bz2) et la décompresser.

cd /tmp
curl https://download.nextcloud.com/server/releases/nextcloud-18.0.2.tar.bz2 -o nextcloud-18.0.2.tar.bz2
sudo -u www-data tar xvjf nextcloud-18.0.3.tar.bz2 -C /var/www

Installation et configuration via occ

Nextcloud nous met à disposition un outil de gestion de notre installation Nextcloud dénommé occ (voir doc).
C’est un script PHP qui se lance donc via le binaire php (/usr/bin/php7.3 ou simplement php si on ne dispose que d’1 seule version dans notre cas).
Il va nous permettre de configurer l’installation (connexion à la BDD, chemins d’install etc.) et d’effectuer la maintenance de notre installation Nextcloud.

cd /var/www/nextcloud/
sudo -u www-data php occ list # help
sudo -u www-data php occ maintenance:install --database "mysql" --database-name "nextcloud" --database-user "root" --database-pass "password" --admin-user "admin" --admin-pass "password"

Configuration de php-fpm

J’utilise exclusivement des Nginx et non des Apaches en tant que serveurs web ou reverse proxies, pour pouvoir processer du PHP il faut donc une installation fonctionnelle de php-fpm:

# décommenter les lignes suivantes dans /etc/php/7.3/fpm/pool.d/www.conf
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

clear_env = no
# paramétrer la taille MAX autorisés pour les uploads /etc/php/7.3/fpm/php.ini
post_max_size = 300M
upload_max_filesize = 300M
# configurer un pool php-fpm avec un unixsocket
cat << POOL_CONF > "$PHP_POOL_DIR"/nextcloud.conf
[Nextcloud]
user = www-data
group = www-data
listen = /run/php/php"$PHPVER"-fpm.nextcloud.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
; max_children is set dynamically with calculate_php_fpm()
pm.max_children = 8
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 3
env[HOSTNAME] = $(hostname -f)
env[PATH] = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
security.limit_extensions = .php
php_admin_value [cgi.fix_pathinfo] = 1
; Optional
; pm.max_requests = 2000
POOL_CONF
sudo -u www-data php7.3 occ # <======== version php a spécifier 

# si pb de version PHP: 
vi lib/versioncheck.php # et modifier le if.. 

Permissions sur le système de fichiers

sudo chown -R www-data:www-data nextcloud
sudo find nextcloud/ -type d -exec chmod 750 {} \;
sudo find nextcloud/ -type f -exec chmod 640 {} \;

Pour un upgrade à la mano de son installation utiliser cette doc.

Mises à jour

Les mises à jour peuvent être effectuées depuis l’interface d’admin mais aussi avec la command occ:

sudo -u www-data php7.3 occ update:check

La commande précédente (occ update) retourne ce type d’infos:
Nextcloud 18.0.3 is available. Get more information on how to update at https://docs.nextcloud.com/server/18/admin_manual/maintenance/upgrade.html.
Update for twofactor_totp to version 4.1.3 is available.

Mise à jour de la version de Nextcloud

La mise à jour peut être effectuée manuellement en suivant la procédure ou en utilisant l’interface d’admin:

Mise à jour d’applications Nextcloud

Se connecter en admin et depuis le menu apparaissant lorsqu’on clique sur l’icône du profile (tout en haut à droite) et aller dans les applications:

MAJ application Nextcloud admin
Mise à jour d’une application Nextcloud depuis l’interface d’admin

Sécurité

Il faut garder en tête que tout serveur web mis en ligne est soumis à des attaques en permanence, c’est pourquoi si vous souhaitez hébergé votre propre Nextcloud, il va falloir mettre en place quelques protections, à commencer par la mise à jour permanente de tous les composants de votre installation.

Ensuite Nextcloud nous met à disposition un scanner de vulnérabilités sur https://scan.nextcloud.com:

scan.nextcloud.com

Troubleshooting

Limite de mémoire PHP est inférieure à la valeur recommandée de 512Mo

Si vous recevez le message La limite de mémoire PHP est inférieure à la valeur recommandée de 512Mo. il suffit de modifier la ligne :

# éditer le fichier /etc/php/7.3/fpm/pool.d/www.conf
php_admin_value[memory_limit] = 512M

# puis redémarrer le service php-fpm
sudo systemctl restart php7.3-fpm
limite de mémoire PHP inférieure à la valeur recommandée de 512Mo
php-fpm: La limite de mémoire PHP est inférieure à la valeur recommandée de 512Mo

Upstream sent too big header

Si vous trouvez dans vos logs d’erreur Nginx un message du type upstream sent too big header while reading response header from upstream, c’est au niveau de la conf Nginx qu’il faut agir.
Ajouter dans votre directive server : fastcgi_buffer_size 32k;
Et pour comprendre et bien dimensionner ce buffer lire ceci et aussi.

Liens

OCC

sudo -u www-data php7.3 occ -v
Partage de fichiers 17.0.2
# OCC
## Usage:
  command [options] [arguments]

## Options:

  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi            Force ANSI output
      --no-ansi         Disable ANSI output
  -n, --no-interaction  Do not ask any interactive question
      --no-warnings     Skip global warnings, show command output only
  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
  check                               check dependencies of the server environment
  help                                Displays help for a command
  list                                Lists commands
  status                              show some status information
  upgrade                             run upgrade routines after installation of a new release. The release has to be installed before.
 activity
  activity:send-mails                 Sends the activity notification mails
 app
  app:check-code                      check code to be compliant
  app:disable                         disable an app
  app:enable                          enable an app
  app:getpath                         Get an absolute path to the app directory
  app:install                         install an app
  app:list                            List all available apps
  app:remove                          remove an app
  app:update                          update an app or all apps
 background
  background:ajax                     Use ajax to run background jobs
  background:cron                     Use cron to run background jobs
  background:webcron                  Use webcron to run background jobs
 config
  config:app:delete                   Delete an app config value
  config:app:get                      Get an app config value
  config:app:set                      Set an app config value
  config:import                       Import a list of configs
  config:list                         List all configs
  config:system:delete                Delete a system config value
  config:system:get                   Get a system config value
  config:system:set                   Set a system config value
 dav
  dav:create-addressbook              Create a dav addressbook
  dav:create-calendar                 Create a dav calendar
  dav:list-calendars                  List all calendars of a user
  dav:move-calendar                   Move a calendar from an user to another
  dav:remove-invalid-shares           Remove invalid dav shares
  dav:send-event-reminders            Sends event reminders
  dav:sync-birthday-calendar          Synchronizes the birthday calendar
  dav:sync-system-addressbook         Synchronizes users to the system addressbook
 db
  db:add-missing-indices              Add missing indices to the database tables
  db:convert-filecache-bigint         Convert the ID columns of the filecache to BigInt
  db:convert-mysql-charset            Convert charset of MySQL/MariaDB to use utf8mb4
  db:convert-type                     Convert the Nextcloud database to the newly configured one
 encryption
  encryption:change-key-storage-root  Change key storage root
  encryption:decrypt-all              Disable server-side encryption and decrypt all files
  encryption:disable                  Disable encryption
  encryption:enable                   Enable encryption
  encryption:encrypt-all              Encrypt all files for all users
  encryption:list-modules             List all available encryption modules
  encryption:set-default-module       Set the encryption default module
  encryption:show-key-storage-root    Show current key storage root
  encryption:status                   Lists the current status of encryption
 files
  files:cleanup                       cleanup filecache
  files:recommendations:recommend
  files:scan                          rescan filesystem
  files:scan-app-data                 rescan the AppData folder
  files:transfer-ownership            All files and folders are moved to another user - shares are moved as well.
 group
  group:add                           Add a group
  group:adduser                       add a user to a group
  group:delete                        Remove a group
  group:list                          list configured groups
  group:removeuser                    remove a user from a group
 integrity
  integrity:check-app                 Check integrity of an app using a signature.
  integrity:check-core                Check integrity of core code using a signature.
  integrity:sign-app                  Signs an app using a private key.
  integrity:sign-core                 Sign core using a private key.
 l10n
  l10n:createjs                       Create javascript translation files for a given app
 log
  log:file                            manipulate logging backend
  log:manage                          manage logging configuration
  log:tail                            Tail the nextcloud logfile
  log:watch                           Watch the nextcloud logfile
 maintenance
  maintenance:data-fingerprint        update the systems data-fingerprint after a backup is restored
  maintenance:mimetype:update-db      Update database mimetypes and update filecache
  maintenance:mimetype:update-js      Update mimetypelist.js
  maintenance:mode                    set maintenance mode
  maintenance:repair                  repair this installation
  maintenance:theme:update            Apply custom theme changes
  maintenance:update:htaccess         Updates the .htaccess file
 migrations
  migrations:execute                  Execute a single migration version manually.
  migrations:generate
  migrations:generate-from-schema
  migrations:migrate                  Execute a migration to a specified version or the latest available version.
  migrations:status                   View the status of a set of migrations.
 notification
  notification:generate               Generate a notification for the given user
 preview
  preview:delete_old                  Delete old preview folder (pre NC11)
  preview:generate-all                Generate previews
  preview:pre-generate                Pre generate previews
 security
  security:certificates               list trusted certificates
  security:certificates:import        import trusted certificate
  security:certificates:remove        remove trusted certificate
 sharing
  sharing:cleanup-remote-storages     Cleanup shared storage entries that have no matching entry in the shares_external table
 trashbin
  trashbin:cleanup                    Remove deleted files
  trashbin:expire                     Expires the users trashbin
 twofactorauth
  twofactorauth:cleanup               Clean up the two-factor user-provider association of an uninstalled/removed provider
  twofactorauth:disable               Disable two-factor authentication for a user
  twofactorauth:enable                Enable two-factor authentication for a user
  twofactorauth:enforce               Enabled/disable enforced two-factor authentication
  twofactorauth:state                 Get the two-factor authentication (2FA) state of a user
 update
  update:check                        Check for server and app updates
 user
  user:add                            adds a user
  user:delete                         deletes the specified user
  user:disable                        disables the specified user
  user:enable                         enables the specified user
  user:info                           show user info
  user:lastseen                       shows when the user was logged in last time
  user:list                           list configured users
  user:report                         shows how many users have access
  user:resetpassword                  Resets the password of the named user
  user:setting                        Read and modify user settings
 versions
  versions:cleanup                    Delete versions
  versions:expire                     Expires the users file versions