« Nextcloud » : différence entre les versions
De Banane Atomic
Aller à la navigationAller à la recherche
Ligne 40 : | Ligne 40 : | ||
# copy the missing apps | # copy the missing apps | ||
sudo cp -r /var/www/nextcloud.bak/apps/[app-name] /var/www/nextcloud/apps | sudo cp -r /var/www/nextcloud.bak/apps/[app-name] /var/www/nextcloud/apps | ||
# upgrade with the www-data user | # upgrade with the www-data user | ||
Ligne 52 : | Ligne 47 : | ||
# set maintenance mode off | # set maintenance mode off | ||
sudo -u www-data php occ maintenance:mode --off | sudo -u www-data php occ maintenance:mode --off | ||
# adjust file ownership and permissions | |||
sudo chown -R www-data:www-data /var/www/nextcloud | |||
sudo find /var/www/nextcloud/ -type d -exec chmod 750 {} \; | |||
sudo find /var/www/nextcloud/ -type f -exec chmod 640 {} \; | |||
# enable cron task | # enable cron task |
Version du 5 septembre 2023 à 23:29
Links
Manual upgrade
Updates between multiple major versions and downgrades are unsupported. |
Backup the database, the data directory and the config.php file.
# stop the web service # nginx sudo rm /etc/nginx/sites-enabled/nextcloud.conf sc-reload nginx # disable cron task sudo crontab -u www-data -e # backup #sudo tar czf --totals=USR1 /tmp/nextcloud.tar.gz nextcloud sudo mariadb-dump -x -e -B nextcloud -r /var/mariadb/dump/nextcloud.sql # download the latest Nextcloud Server release wget https://download.nextcloud.com/server/releases/nextcloud-27.0.2.tar.bz2 # unpack it tar -xjf nextcloud-*.tar.bz2 # backup nexcloud folder and move the new one sudo mv /var/www/nextcloud /var/www/nextcloud.bak sudo mv ~/download/nextcloud /var/www # copy the config sudo cp /var/www/nextcloud.bak/config/config.php /var/www/nextcloud/config # copy the data folder sudo cp -r /var/www/nextcloud.bak/data /var/www/nextcloud # copy the missing apps sudo cp -r /var/www/nextcloud.bak/apps/[app-name] /var/www/nextcloud/apps # upgrade with the www-data user cd /var/www/nextcloud sudo -u www-data php occ upgrade # set maintenance mode off sudo -u www-data php occ maintenance:mode --off # adjust file ownership and permissions sudo chown -R www-data:www-data /var/www/nextcloud sudo find /var/www/nextcloud/ -type d -exec chmod 750 {} \; sudo find /var/www/nextcloud/ -type f -exec chmod 640 {} \; # enable cron task sudo crontab -u www-data -e # restart the web service # nginx sudo ln -s /etc/nginx/sites-enabled/nextcloud.conf /etc/nginx/sites-available/nextcloud.conf sc-reload nginx |
Check the version
|
Configuration
NGINX
/etc/nginx/sites-available/nextcloud.conf |
upstream php-handler { server unix:/var/run/php/php-fpm-nextcloud.sock; } # Set the `immutable` cache control options only for assets with a cache busting `v` argument map $arg_v $asset_immutable { "" ""; default "immutable"; } server { listen 80; listen [::]:80; server_name cloud.example.com; # Prevent nginx HTTP Server Detection server_tokens off; # Enforce HTTPS return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name cloud.example.com; # Path to the root of your installation root /var/www/nextcloud; # Use Mozilla's guidelines for SSL/TLS settings # https://mozilla.github.io/server-side-tls/ssl-config-generator/ ssl_certificate /etc/ssl/nginx/cloud.example.com.crt; ssl_certificate_key /etc/ssl/nginx/cloud.example.com.key; # Prevent nginx HTTP Server Detection server_tokens off; # HSTS settings # WARNING: Only add the preload option once you read about # the consequences in https://hstspreload.org/. This option # will add the domain to a hardcoded list that is shipped # in all major browsers and getting removed from this list # could take several months. #add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" always; # set max upload size and increase upload timeout: client_max_body_size 512M; client_body_timeout 300s; fastcgi_buffers 64 4K; # Enable gzip but do not remove ETag headers gzip on; gzip_vary on; gzip_comp_level 4; gzip_min_length 256; gzip_proxied expired no-cache no-store private no_last_modified no_etag auth; gzip_types application/atom+xml text/javascript application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/wasm application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy; # Pagespeed is not supported by Nextcloud, so if your server is built # with the `ngx_pagespeed` module, uncomment this line to disable it. #pagespeed off; # The settings allows you to optimize the HTTP2 bandwitdth. # See https://blog.cloudflare.com/delivering-http-2-upload-speed-improvements/ # for tunning hints client_body_buffer_size 512k; # HTTP response headers borrowed from Nextcloud `.htaccess` add_header Referrer-Policy "no-referrer" always; add_header X-Content-Type-Options "nosniff" always; add_header X-Download-Options "noopen" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Permitted-Cross-Domain-Policies "none" always; add_header X-Robots-Tag "noindex, nofollow" always; add_header X-XSS-Protection "1; mode=block" always; # Remove X-Powered-By, which is an information leak fastcgi_hide_header X-Powered-By; # Add .mjs as a file extension for javascript # Either include it in the default mime.types list # or include you can include that list explicitly and add the file extension # only for Nextcloud like below: include mime.types; types { text/javascript js mjs; } # Specify how to handle directories -- specifying `/index.php$request_uri` # here as the fallback means that Nginx always exhibits the desired behaviour # when a client requests a path that corresponds to a directory that exists # on the server. In particular, if that directory contains an index.php file, # that file is correctly served; if it doesn't, then the request is passed to # the front-end controller. This consistent behaviour means that we don't need # to specify custom rules for certain paths (e.g. images and other assets, # `/updater`, `/ocm-provider`, `/ocs-provider`), and thus # `try_files $uri $uri/ /index.php$request_uri` # always provides the desired behaviour. index index.php index.html /index.php$request_uri; # Rule borrowed from `.htaccess` to handle Microsoft DAV clients location = / { if ( $http_user_agent ~ ^DavClnt ) { return 302 /remote.php/webdav/$is_args$args; } } location = /robots.txt { allow all; log_not_found off; access_log off; } # Make a regex exception for `/.well-known` so that clients can still # access it despite the existence of the regex rule # `location ~ /(\.|autotest|...)` which would otherwise handle requests # for `/.well-known`. location ^~ /.well-known { # The rules in this block are an adaptation of the rules # in `.htaccess` that concern `/.well-known`. location = /.well-known/carddav { return 301 /remote.php/dav/; } location = /.well-known/caldav { return 301 /remote.php/dav/; } location /.well-known/acme-challenge { try_files $uri $uri/ =404; } location /.well-known/pki-validation { try_files $uri $uri/ =404; } # Let Nextcloud's API for `/.well-known` URIs handle all other # requests by passing them to the front-end controller. return 301 /index.php$request_uri; } # Rules borrowed from `.htaccess` to hide certain paths from clients location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/) { return 404; } location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { return 404; } # Ensure this block, which passes PHP files to the PHP process, is above the blocks # which handle static assets (as seen below). If this block is not declared first, # then Nginx will encounter an infinite rewriting loop when it prepends `/index.php` # to the URI, resulting in a HTTP 500 error response. location ~ \.php(?:$|/) { # Required for legacy support rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+|.+\/richdocumentscode\/proxy) /index.php$request_uri; fastcgi_split_path_info ^(.+?\.php)(/.*)$; set $path_info $fastcgi_path_info; try_files $fastcgi_script_name =404; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $path_info; fastcgi_param HTTPS on; fastcgi_param modHeadersAvailable true; # Avoid sending the security headers twice fastcgi_param front_controller_active true; # Enable pretty urls fastcgi_pass php-handler; fastcgi_intercept_errors on; fastcgi_request_buffering off; fastcgi_max_temp_file_size 0; } # Serve static files location ~ \.(?:css|js|mjs|svg|gif|png|jpg|ico|wasm|tflite|map)$ { try_files $uri /index.php$request_uri; add_header Cache-Control "public, max-age=15778463, $asset_immutable"; access_log off; # Optional: Don't log access to assets location ~ \.wasm$ { default_type application/wasm; } } location ~ \.woff2?$ { try_files $uri /index.php$request_uri; expires 7d; # Cache-Control policy borrowed from `.htaccess` access_log off; # Optional: Don't log access to assets } # Rule borrowed from `.htaccess` location /remote { return 301 /remote.php$request_uri; } location / { try_files $uri $uri/ /index.php$request_uri; } } |
Create a php-fpm pool
/etc/php/8.2/fpm/pool.d/nextcloud.conf |
[nextcloud] user = www-data group = www-data listen = /run/php/php8.2-fpm-nextcloud.sock listen.owner = www-data listen.group = www-data pm = ondemand pm.max_children = 5 pm.process_idle_timeout = 60s; env[HOSTNAME] = $HOSTNAME 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 php_value[memory_limit] = 512M php_value[opcache.validate_timestamps] = 0 ; disable the revalidation completely php_value[opcache.jit] = 1255 php_value[opcache.jit_buffer_size] = 128M php_value[opcache.interned_strings_buffer] = 32 |
# get the PATH var sudo -u www-data printenv PATH |
Apache
/etc/apache2/sites-available/nextcloud.conf |
<VirtualHost *:80> ServerName nextcloud.domain.fr Redirect / https://nextcloud.domain.fr/ </VirtualHost> <VirtualHost _default_:443> ServerName nextcloud.domain.fr DocumentRoot /var/www/nextcloud SSLCertificateFile /etc/letsencrypt/live/domain.fr/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/domain.fr/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf <FilesMatch "\.php$"> # use the nextcloud php-fpm pool SetHandler "proxy:unix:/run/php/php8.2-fpm-nextcloud.sock|fcgi://localhost" SSLOptions +StdEnvVars </FilesMatch> ErrorLog ${APACHE_LOG_DIR}/nextcloud-error.log CustomLog ${APACHE_LOG_DIR}/nextcloud-access.log combined <IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15768000; preload" </IfModule> <Directory /var/www/nextcloud> Options FollowSymlinks AllowOverride all Require all granted </Directory> </VirtualHost> |
Pretty URL
config/config.php |
'overwrite.cli.url' => 'https://nextcloud.domain.fr/', 'htaccess.RewriteBase' => '/', |
sudo -u www-data php /var/www/nextcloud/occ maintenance:update:htaccess |
Server tuning
MariaDB
Increase the cache of Mariadb so it won't use swap partition when it receives a burst of requests. !!! OPTIONAL !!!
/etc/mysql/conf.d/mysql.cnf |
[mysqld] innodb_buffer_pool_size = 1G innodb_io_capacity = 4000 |
-- get value in GB SELECT @@innodb_buffer_pool_size/1024/1024/1024; -- default 128 MB SELECT @@innodb_io_capacity; -- default 200 |
Get the best value for innodb_buffer_pool_size |
Background jobs
# edit crontab for user www-data sudo crontab -u www-data -e # run cron.php every 5 minutes */5 * * * * php -f /var/www/nextcloud/cron.php |
With admin account, change the Settings → Administration → Basic settings → Background jobs = Cron
Settings
Resetting a lost admin password
# change the admin password sudo -u www-data php /var/www/nextcloud/occ user:resetpassword admin |
Email server
Setting | Value |
---|---|
Send mode | SMTP |
Authentication method |
|
Authentication required | use same credential as for roundcube |
Server address | smtp.domain.fr:25 |
Apps
Installer des Apps:
- se connecter en admin
- cliquer sur l'icone du profile en haut à droite → Apps
Deck
Outils de gestion de taches similaire à Trello
Key | Value |
---|---|
IMAP host | hostname.domain.net |
IMAP security | STARTTLS |
IMAP port | 143 |
SMTP host | hostname.domain.net |
SMTP security | STARTTLS |
SMTP port | 25 |
Talk
Chat, video & audio calls
Calendar
Installation sur Ubuntu 18.04
wget https://download.nextcloud.com/server/releases/latest-27.tar.bz2 tar xf latest-*.tar.bz2 sudo mv -T nextcloud /var/www/nextcloud sudo chown -R root:root /var/www/nextcloud # vérifier que les modules php suivant sont bien installés dpkg -l php-zip php-gd php-curl php-imagick # folders rights sudo chown -R www-data:www-data apps sudo chown -R www-data:www-data config sudo chown -R www-data:www-data data sudo chmod 750 config |
create database nextcloud; grant all privileges on nextcloud.* to 'nextcloud'@'localhost' identified by 'password'; flush privileges; |
Errors
Memcache \OC\Memcache\APCu not available for local cache
/etc/php/7.4/mods-available/apcu.ini |
apc.enable_cli=1 |
The PHP memory limit is below the recommended value of 512MB
/etc/php/7.4/apache2/php.ini |
memory_limit = 512M |
MySQL is used as database but does not support 4-byte characters
A memcache is not required and you may safely ignore the warning if you prefer
config/config.php |
'memcache.local' => '\OC\Memcache\APCu', |