« Nextcloud » : différence entre les versions
De Banane Atomic
Aller à la navigationAller à la recherche
(110 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Category:Web]] | [[Category:Web]] | ||
[[Category:Ubuntu]] | [[Category:Ubuntu]] | ||
= Manual upgrade = | = Links = | ||
* [https://nextcloud.com/changelog/ Nextcloud Server Changelog] | |||
* [https://docs.nextcloud.com/server/latest/admin_manual/installation/system_requirements.html System requirements] | |||
= [https://docs.nextcloud.com/server/latest/admin_manual/maintenance/manual_upgrade.html Manual upgrade] = | |||
{{warn | Updates between multiple major versions and downgrades are unsupported.}} | |||
Backup the database, the {{boxx|data}} directory and the {{boxx|config.php}} file. | |||
<kode lang='bash'> | <kode lang='bash'> | ||
# config folder | # stop the web service | ||
sudo chown -R www-data:www-data config | # 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 (calendar, deck, mail) | |||
sudo cp -r /var/www/nextcloud.bak/apps/[app-name] /var/www/nextcloud/apps | |||
# adjust file ownership and permissions | |||
sudo chown -R www-data:www-data /var/www/nextcloud | |||
sudo chmod 750 /var/www/nextcloud/config | |||
#sudo find /var/www/nextcloud/ -type d -exec chmod 750 {} \; | |||
#sudo find /var/www/nextcloud/ -type f -exec chmod 640 {} \; | |||
#sudo chmod 755 /var/www/nextcloud | |||
# restart the web service | |||
# nginx | |||
sudo ln -s /etc/nginx/sites-available/nextcloud.conf /etc/nginx/sites-enabled/nextcloud.conf | |||
sc-reload nginx | |||
# upgrade with the www-data user | # upgrade with the www-data user | ||
sudo -u www-data php | cd /var/www/nextcloud | ||
sudo -u www-data php occ upgrade | |||
# set maintenance mode off | |||
sudo -u www-data php occ maintenance:mode --off | |||
# restart php-fpm | |||
sc-restart php8.2-fpm.service | |||
# enable cron task | |||
sudo crontab -u www-data -e | |||
</kode> | </kode> | ||
= [https://docs.nextcloud.com/server/17/admin_manual/installation/source_installation.html#apache-web-server-configuration | {{info | Check the version | ||
<filebox fn='/etc/apache2/sites-available/nextcloud.conf' lang='apache'> | <syntaxhighlight lang='bash' inline>sudo -u www-data php occ -V</syntaxhighlight>}} | ||
{{warn | Version may not be immediately updated on {{boxx|<nowiki>https://nextcloud.domain.net/status.php</nowiki>}} and | |||
# login with an admin account | |||
# click on user logo on top right ̣→ Administration Settings}} | |||
* [https://scan.nextcloud.com Nextcloud Security Scan] | |||
= Configuration = | |||
== [https://docs.nextcloud.com/server/latest/admin_manual/installation/nginx.html NGINX] == | |||
<filebox fn='/etc/nginx/sites-available/nextcloud.conf' lang='nginx' collapsed> | |||
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; | |||
} | |||
} | |||
</filebox> | |||
=== Create a php-fpm pool === | |||
<filebox fn='/etc/php/8.2/fpm/pool.d/nextcloud.conf' lang='ini' collapsed> | |||
[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 = 3 ; # cores - 1 | |||
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] = 64 | |||
php_value[opcache.memory_consumption] = 256 | |||
</filebox> | |||
<kode lang='bash'> | |||
# get the PATH var | |||
sudo -u www-data printenv PATH | |||
# restart php8.2-fpm service to create the /run/php/php8.2-fpm-nextcloud.sock socket | |||
sc-restart php8.2-fpm.service | |||
</kode> | |||
* [https://docs.nextcloud.com/server/latest/admin_manual/installation/source_installation.html#php-fpm-tips-label php-fpm configuration notes] | |||
== [https://docs.nextcloud.com/server/17/admin_manual/installation/source_installation.html#apache-web-server-configuration Apache] == | |||
<filebox fn='/etc/apache2/sites-available/nextcloud.conf' lang='apache' collapsed> | |||
<VirtualHost *:80> | <VirtualHost *:80> | ||
ServerName nextcloud.domain.fr | ServerName nextcloud.domain.fr | ||
Ligne 26 : | Ligne 327 : | ||
<FilesMatch "\.php$"> | <FilesMatch "\.php$"> | ||
# use the nextcloud php-fpm pool | |||
SetHandler "proxy:unix:/run/php/php8.2-fpm-nextcloud.sock|fcgi://localhost" | |||
SSLOptions +StdEnvVars | SSLOptions +StdEnvVars | ||
</FilesMatch> | </FilesMatch> | ||
Ligne 44 : | Ligne 347 : | ||
</filebox> | </filebox> | ||
== [https://docs.nextcloud.com/server/17/admin_manual/installation/source_installation.html#pretty-urls Pretty URL] == | === [https://docs.nextcloud.com/server/17/admin_manual/installation/source_installation.html#pretty-urls Pretty URL] === | ||
<filebox fn='config/config.php'> | <filebox fn='config/config.php'> | ||
'overwrite.cli.url' => 'https://nextcloud.domain.fr/', | 'overwrite.cli.url' => 'https://nextcloud.domain.fr/', | ||
Ligne 53 : | Ligne 356 : | ||
</kode> | </kode> | ||
= [https://docs.nextcloud.com/server/ | = [https://docs.nextcloud.com/server/latest/admin_manual/installation/server_tuning.html Server tuning] = | ||
== | == MariaDB == | ||
<filebox fn='/ | Increase the cache of Mariadb so it won't use swap partition when it receives a burst of requests. !!! OPTIONAL !!! | ||
<filebox fn='/etc/mysql/conf.d/mysql.cnf' lang='ini'> | |||
[mysqld] | |||
innodb_buffer_pool_size = 1G | |||
innodb_io_capacity = 4000 | |||
</filebox> | </filebox> | ||
< | <kode lang='mariadb'> | ||
-- get value in GB | |||
SELECT @@innodb_buffer_pool_size/1024/1024/1024; -- default 128 MB | |||
SELECT @@innodb_io_capacity; -- default 200 | |||
</kode> | |||
</ | |||
{{info | Get the best value for [[MySQL#innodb_buffer_pool_size|innodb_buffer_pool_size]]}} | |||
= [https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/background_jobs_configuration.html Background jobs] = | = [https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/background_jobs_configuration.html Background jobs] = | ||
Ligne 94 : | Ligne 383 : | ||
</kode> | </kode> | ||
With admin account, change the Settings → Administration → Basic settings → Background jobs = Cron | With admin account, change the Settings → Administration → Basic settings → Background jobs = Cron | ||
= Settings = | |||
== [https://docs.nextcloud.com/server/latest/admin_manual/configuration_user/reset_admin_password.html Resetting a lost admin password] == | |||
<kode lang='bash'> | |||
# change the admin password | |||
sudo -u www-data php /var/www/nextcloud/occ user:resetpassword admin | |||
</kode> | |||
== [https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/email_configuration.html Email server] == | |||
{| class="wikitable wtp" | |||
! Setting | |||
! Value | |||
|- | |||
| Send mode || SMTP | |||
|- | |||
| Authentication method || | |||
* None: to send emails on the domain only | |||
* Plain: to send emails to other domains (cf Postfix smtpd_relay_restrictions) | |||
|- | |||
| Authentication required || use same credential as for roundcube | |||
|- | |||
| Server address || smtp.domain.fr:25 | |||
|} | |||
= Apps = | = Apps = | ||
Ligne 104 : | Ligne 416 : | ||
== [https://github.com/nextcloud/mail#readme Mail] == | == [https://github.com/nextcloud/mail#readme Mail] == | ||
{| class="wikitable wtp" | |||
! Key | |||
! Value | |||
|- | |||
| IMAP host || hostname.domain.net | |||
|- | |||
| IMAP security || STARTTLS | |||
|- | |||
| IMAP port || 143 | |||
|- | |||
| SMTP host || hostname.domain.net | |||
|- | |||
| SMTP security || STARTTLS | |||
|- | |||
| SMTP port || 25 | |||
|} | |||
== [https://github.com/nextcloud/spreed Talk] == | == [https://github.com/nextcloud/spreed Talk] == | ||
Ligne 112 : | Ligne 440 : | ||
= Installation sur Ubuntu 18.04 = | = Installation sur Ubuntu 18.04 = | ||
<kode lang='bash'> | <kode lang='bash'> | ||
wget https://download.nextcloud.com/server/releases/latest-27.tar.bz2 | |||
wget https://download.nextcloud.com/server/releases/ | tar xf latest-*.tar.bz2 | ||
tar - | sudo mv -T nextcloud /var/www/nextcloud | ||
sudo chown -R root:root /var/www/nextcloud | |||
sudo chown | |||
# vérifier que les modules php suivant sont bien installés | # vérifier que les modules php suivant sont bien installés | ||
dpkg -l php-zip php-gd php-curl php-imagick | 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 | |||
</kode> | </kode> | ||
<kode lang=' | <kode lang='mariadb'> | ||
create database nextcloud; | create database nextcloud; | ||
grant all privileges on nextcloud.* to 'nextcloud'@'localhost' identified by 'password'; | grant all privileges on nextcloud.* to 'nextcloud'@'localhost' identified by 'password'; | ||
Ligne 128 : | Ligne 461 : | ||
</kode> | </kode> | ||
= | = Errors = | ||
== [https://github.com/nextcloud/server/issues/27781 Memcache \OC\Memcache\APCu not available for local cache] == | |||
<filebox fn='/etc/php/7.4/mods-available/apcu.ini'> | |||
apc.enable_cli=1 | |||
</filebox> | |||
== The PHP memory limit is below the recommended value of 512MB == | == The PHP memory limit is below the recommended value of 512MB == | ||
<filebox fn='/etc/php/7.4/apache2/php.ini'> | <filebox fn='/etc/php/7.4/apache2/php.ini'> | ||
Ligne 137 : | Ligne 475 : | ||
== [https://docs.nextcloud.com/server/20/admin_manual/configuration_server/caching_configuration.html#id1 A memcache is not required and you may safely ignore the warning if you prefer] == | == [https://docs.nextcloud.com/server/20/admin_manual/configuration_server/caching_configuration.html#id1 A memcache is not required and you may safely ignore the warning if you prefer] == | ||
<filebox fn='config/config.php'> | |||
'memcache.local' => '\OC\Memcache\APCu', | |||
</filebox> | |||
== [https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/config_sample_php_parameters.html#maintenance-window-start Server has no maintenance window start time configured] == | |||
<filebox fn='config/config.php'> | |||
'maintenance_window_start' => 1, | |||
// 1: will only run the background jobs between 01:00am UTC and 05:00am UTC. | |||
// 100: (defaults) disables the feature | |||
</filebox> |
Dernière version du 1 février 2024 à 16:35
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 (calendar, deck, mail) sudo cp -r /var/www/nextcloud.bak/apps/[app-name] /var/www/nextcloud/apps # adjust file ownership and permissions sudo chown -R www-data:www-data /var/www/nextcloud sudo chmod 750 /var/www/nextcloud/config #sudo find /var/www/nextcloud/ -type d -exec chmod 750 {} \; #sudo find /var/www/nextcloud/ -type f -exec chmod 640 {} \; #sudo chmod 755 /var/www/nextcloud # restart the web service # nginx sudo ln -s /etc/nginx/sites-available/nextcloud.conf /etc/nginx/sites-enabled/nextcloud.conf sc-reload nginx # 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 # restart php-fpm sc-restart php8.2-fpm.service # enable cron task sudo crontab -u www-data -e |
Check the version
sudo -u www-data php occ -V |
Version may not be immediately updated on https://nextcloud.domain.net/status.php and
|
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 = 3 ; # cores - 1 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] = 64 php_value[opcache.memory_consumption] = 256 |
# get the PATH var sudo -u www-data printenv PATH # restart php8.2-fpm service to create the /run/php/php8.2-fpm-nextcloud.sock socket sc-restart php8.2-fpm.service |
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', |
Server has no maintenance window start time configured
config/config.php |
'maintenance_window_start' => 1, // 1: will only run the background jobs between 01:00am UTC and 05:00am UTC. // 100: (defaults) disables the feature |