« Nextcloud » : différence entre les versions
De Banane Atomic
Aller à la navigationAller à la recherche
(→NGINX) |
|||
Ligne 70 : | Ligne 70 : | ||
<filebox fn='/etc/nginx/sites-available/nextcloud.conf' lang='nginx' collapsed> | <filebox fn='/etc/nginx/sites-available/nextcloud.conf' lang='nginx' collapsed> | ||
upstream php-handler { | upstream php-handler { | ||
server unix:/var/run/php/php-fpm.sock; | 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"; | |||
} | } | ||
Ligne 76 : | Ligne 82 : | ||
listen 80; | listen 80; | ||
listen [::]:80; | listen [::]:80; | ||
server_name cloud. | server_name cloud.example.com; | ||
# | |||
return 301 https://$server_name | # Prevent nginx HTTP Server Detection | ||
server_tokens off; | |||
# Enforce HTTPS | |||
return 301 https://$server_name$request_uri; | |||
} | } | ||
server { | server { | ||
listen 443 ssl http2; | listen 443 ssl http2; | ||
listen [::]:443 ssl http2; | listen [::]:443 ssl http2; | ||
server_name cloud. | 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 | # WARNING: Only add the preload option once you read about | ||
# the consequences in https://hstspreload.org/. This option | # the consequences in https://hstspreload.org/. This option | ||
Ligne 99 : | Ligne 113 : | ||
# in all major browsers and getting removed from this list | # in all major browsers and getting removed from this list | ||
# could take several months. | # 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; | |||
add_header Referrer-Policy "no-referrer" always; | # Pagespeed is not supported by Nextcloud, so if your server is built | ||
add_header X-Content-Type-Options "nosniff" always; | # with the `ngx_pagespeed` module, uncomment this line to disable it. | ||
add_header X-Download-Options "noopen" always; | #pagespeed off; | ||
add_header X-Frame-Options "SAMEORIGIN" always; | |||
add_header X-Permitted-Cross-Domain-Policies "none" always; | # The settings allows you to optimize the HTTP2 bandwitdth. | ||
add_header X-Robots-Tag " | # See https://blog.cloudflare.com/delivering-http-2-upload-speed-improvements/ | ||
add_header X-XSS-Protection "1; mode=block" always; | # 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 | # Remove X-Powered-By, which is an information leak | ||
fastcgi_hide_header X-Powered-By; | 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 { | location = /robots.txt { | ||
Ligne 120 : | Ligne 183 : | ||
} | } | ||
# 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 | |||
location | # 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; | |||
} | } | ||
location ~ ^ | # 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; } | |||
location ~ ^ | |||
# 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)(/.*)$; | |||
fastcgi_split_path_info ^(.+?\.php)( | |||
set $path_info $fastcgi_path_info; | set $path_info $fastcgi_path_info; | ||
try_files $fastcgi_script_name =404; | try_files $fastcgi_script_name =404; | ||
include fastcgi_params; | include fastcgi_params; | ||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | ||
fastcgi_param PATH_INFO $path_info; | fastcgi_param PATH_INFO $path_info; | ||
fastcgi_param HTTPS on; | fastcgi_param HTTPS on; | ||
# Avoid sending the security headers twice | |||
fastcgi_param | fastcgi_param modHeadersAvailable true; # Avoid sending the security headers twice | ||
fastcgi_param front_controller_active true; # Enable pretty urls | |||
fastcgi_pass php-handler; | fastcgi_pass php-handler; | ||
fastcgi_intercept_errors on; | fastcgi_intercept_errors on; | ||
fastcgi_request_buffering off; | fastcgi_request_buffering off; | ||
fastcgi_max_temp_file_size 0; | |||
} | } | ||
location ~ | # Serve static files | ||
try_files $uri/ = | 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?$ { | |||
location ~ \. | |||
try_files $uri /index.php$request_uri; | 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 | location / { | ||
try_files $uri /index.php$request_uri | try_files $uri $uri/ /index.php$request_uri; | ||
} | } | ||
} | } |
Version du 30 août 2023 à 11:45
Links
Manual upgrade
Updates between multiple major versions and downgrades are unsupported. |
Backup the database, the data directory and the config.php file.
# backup tar czf /folder/nextcloud.tar.gz nextcloud sudo mysqldump -rnextcloud.sql nextcloud # download the latest Nextcloud Server release wget https://download.nextcloud.com/server/releases/nextcloud-23.0.0.tar.bz2 # unpack it tar -xjf nextcloud-*.tar.bz2 # disable cron task sudo crontab -u www-data -e # stop the web server (apache) sudo a2dissite nextcloud sc-reload apache2 # rename old version and move the new one mv /var/www/nextcloud /var/www/nextcloud-old mv ~/download/nextcloud /var/www # copy the config cp /var/www/nextcloud-old/config/config.php /var/www/nextcloud/config # copy the data folder cp /var/www/nextcloud-old/data /var/www/nextcloud # adjust file ownership and permissions chown -R www-data:www-data /var/www/nextcloud find /var/www/nextcloud/ -type d -exec chmod 750 {} \; find /var/www/nextcloud/ -type f -exec chmod 640 {} \; # start the web server (apache) a2ensite nextcloud sc-reload apache2 # upgrade with the www-data user chmod 755 /var/www/nextcloud cd /var/www/nextcloud sudo -u www-data php occ upgrade chmod 750 /var/www/nextcloud # disable the maintenance mode if required sudo -u www-data php occ maintenance:mode --off # enable cron task sudo crontab -u www-data -e |
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.interned_strings_buffer] = 16 ; disable the revalidation completely php_value[opcache.validate_timestamps] = 0 php_value[opcache.jit] = 1255 php_value[opcache.jit_buffer_size] = 128M |
# 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$"> 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
PHP-FPM
/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 = dynamic pm.max_children = 10 pm.start_servers = 4 pm.min_spare_servers = 2 pm.max_spare_servers = 6 php_value[memory_limit] = 512M php_value[opcache.interned_strings_buffer] = 16 ; disable the revalidation completely php_value[opcache.validate_timestamps] = 0 php_value[opcache.jit] = 1255 php_value[opcache.jit_buffer_size] = 128M |
/etc/apache2/sites-available/nextcloud.conf |
<FilesMatch "\.php$"> # use the nextcloud php-fpm pool SetHandler "proxy:unix:/run/php/php8.2-fpm-nextcloud.sock|fcgi://localhost" SSLOptions +StdEnvVars </FilesMatch> |
# restart PHP FPM sc-restart php8.2-fpm.service |
MySQL
Get the best value for innodb_buffer_pool_size |
/etc/mysql/conf.d/mysql.cnf |
[mysqld] innodb_buffer_pool_size = 1G innodb_io_capacity = 4000 |
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
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', |