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.
Les avantages :
- récupérer le contrôle de nos données personnelles 📈 puisqu’on les héberge nous même
- ne pas payer d’abonnement 💰
- disposer d'une quantité de stockage en ligne énorme
Les inconvénients:
- il faut gérer la partie serveur soi meme (installation, mises à jour de Nextcloud)
- sécuriser notre infrastructure, faute de quoi on risquerait de s’exposer à la fuite de toutes nos données… 😱
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 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 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 php occ update:check
La commande précédente (occ update:check
) retourne ce type d’infos:
Nextcloud X.X.X is available. Get more information on how to update at
Mise à jour de la version de Nextcloud
Warning : les mises à jours de Nextcloud se font par incrément de version Majeur uniquement (ex: passage de 25.x.x à 26.x.x, mais pas de saut de version comme passer de 25.x.x à 27.x.x).
via l'interface web
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:
Mise à jour d’une application Nextcloud depuis l’interface d’admin La mise à jour peut être effectuée manuellement en suivant la procédure ou en utilisant l’interface d’admin:
Process de mise à jour de Nextcloud via l’interface d’admin
Docker
- Backup de la config
/data
(si utilisation de SQLitght la DB est dedans/data/owncloud.db
) :tar cvzf nc-config.tgz ./config
- vérifier que le
docker-compose.yml
pointe vers l'imagelatest
(ou la version +1 souhaitée) - récupération de la dernière version via
docker-compose pull
- redémarrage du service
docker-compose up -d
- bien attendre en suivant les logs que la mise à jour s'est bien déroulée : ![[nextcloud-docker-compose-pull-logs.png]]
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
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
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 aussi.
Liens
OCC
sudo -u www-data php 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