Difference between revisions of "Nextcloud"

From wiki
Jump to navigation Jump to search
Line 90: Line 90:
  
 
==Enable caching==
 
==Enable caching==
In /var/packages/WebStation/target/misc/WebStation-php74/conf.d add:
+
 
 +
* Running DSM7 and PHP8 edit <code>/usr/local/etc/php80/cli/conf.d/extension.ini</code>
 +
* Running DSM6 and PHP7 edit <code>/var/packages/WebStation/target/misc/WebStation-php74/conf.d</code>
 +
 
 +
add to this file:
 
:<code>zend_extension = opcache.so</code>
 
:<code>zend_extension = opcache.so</code>
 
:<code>extension = apcu.so</code>
 
:<code>extension = apcu.so</code>
Line 96: Line 100:
 
In the nextcloud configuration file add:
 
In the nextcloud configuration file add:
 
:<code>'memcache.local' => '\OC\Memcache\APCu',</code>
 
:<code>'memcache.local' => '\OC\Memcache\APCu',</code>
 
  
 
=Tips and Troubleshooting=
 
=Tips and Troubleshooting=

Revision as of 16:32, 22 October 2022

An opensource private cloud solution [1].

I'm running it on a synology diskstation, below is based on my experience.

Installation

Installation is as simple as deploying a new web-site. Tips for installing on Synology bit outdated using php7

  • The package can be installed in the root of a (virtual) webserver.
  • The configuration is in <webroot>/config/config.php. To (re)start the initialization:
  1. (re)move the config file
  2. delete all tables in the nextcloud database
  3. put a file named CAN_INSTALL in the config directory.
  4. browse to your nextcloud webserver
  • When you have unix-sockets enabled use localhost:<socketpath> as dbhost

Allow larger files to be uploaded

Change php settings:

upload_max_filesize = 16G
post_max_size = 16G

As my nextcloud server is a synology diskstation:

vi /volume1/@appstore/PHP7.4/misc/php-fpm.ini
/usr/syno/sbin/synoservice --restart pkgctl-PHP7.4
Change nginx setting for the nextcloud server
client_max_body_size 0
This will disable the checking of body size. The php settings rule.

cronjob

*/5 * * * * sudo -u http php74 -f /var/www/nextcloud/cron.php
Configure this in your crontab or other job-scheduler

Client installation

sudo add-apt-repository ppa:nextcloud-devs/client
sudo apt update
sudo apt install nextcloud-client

config file

Located in the installation directory in ./config/config.php. Mine looks like:

 <?php
 $CONFIG = array (
   'maintenance' => false,
   'instanceid' => 'REMOVED',
   'passwordsalt' => 'REMOVED',
   'secret' => 'REMOVED',
   'trusted_domains' => 
   array (
     0 => 'nextcloud.local.antiperfect.org',
   ),
   'datadirectory' => '/volume1/nextcloud/',
   'dbtype' => 'mysql',
   'version' => '21.0.4.1',
   'overwrite.cli.url' => 'https://nextcloud.<mydomain>',
   'dbname' => 'nextcloud',
   'dbhost' => 'localhost:/run/mysqld/mysqld10.sock',
   'dbport' => '',
   'dbtableprefix' => 'oc_',
   'mysql.utf8mb4' => true,
   'dbuser' => 'nextcloud',
   'dbpassword' => 'REMOVED',
   'installed' => true,
   'mail_from_address' => 'nextcloud',
   'mail_smtpmode' => 'smtp',
   'mail_sendmailmode' => 'smtp',
   'mail_domain' => 'mydomain.tld',
   'mail_smtphost' => 'localhost',
   'mail_smtpport' => '25',
   'theme' => '',
   'loglevel' => 2,
 );

Force clients to use https

In the nginx frontend server configuration add:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Enable imagick

In /var/packages/WebStation/target/misc/WebStation-php74/conf.d add:

extension = imagick.so;

Enable caching

  • Running DSM7 and PHP8 edit /usr/local/etc/php80/cli/conf.d/extension.ini
  • Running DSM6 and PHP7 edit /var/packages/WebStation/target/misc/WebStation-php74/conf.d

add to this file:

zend_extension = opcache.so
extension = apcu.so

In the nextcloud configuration file add:

'memcache.local' => '\OC\Memcache\APCu',

Tips and Troubleshooting

sudo -u http php74 /var/www/nextcloud/occ files:scan --all
Rescan all files (update database)
sudo -u http php74 /var/www/nextcloud/occ files:scan --path="/<username>/files/<dir to scan>"
Rescan all files in specified path
touch <file>
When everything looks OK, you fixed mounts and file permissions, try touch on the client.

A file is reported locked and it is not a file-protection issue

  1. put Nextcloud in maintenance mode: edit config/config.php and change this line:
'maintenance' => true,
  1. Empty table oc_file_locks (the default table prefix is oc_, this prefix can be different or even empty)
  2. disable maintenance mode (undo first step).
'maintenance' => false,

Upgrader times out

This is due to PHP timeout settings which may be increased.

The upgrade process progress is registered in ../nextcloud/updater-<whatever>/.step. When a step is completed it shows e.g.: {"state":"end","step":3} for 'Create backup'. When the step that timed out is ready reload the updater pages and click the 'Continue Upgrade' button.

Repeat this a often as needed.

Nextcloud remains in maintenance mode after upgrade

Turn off maintenance mode from the commandline and retry the upgrade from the command line.

sudo -u http php74 /var/www/nextcloud/occ maintenance:mode --off
sudo -u http php74 /var/www/nextcloud/occ upgrade

Cronjob is running very long since a large number of files have been added

  1. Stop the cronjob schedule
  2. Kill the running nextcloud cronjob(s) ps -ef|grep nextcloud|grep cron
  3. sudo -u http php74 /var/www/nextcloud/occ files:scan-app-data

This solved the issue for me. More information may be available in the related github issue.

App cannot be installed from the web interface

Find the correct appname using occ list, then update

sudo -u http php74 /var/www/nextcloud/occ app:list
sudo -u http php74 /var/www/nextcloud/occ app:update <appname>

The overview page complains about .well-known things not to be accessible

For webfinger I've not figured it out yet but I don't use that.

In the nginx frontend server configuration add:

  location ^~ /.well-known {

   location = /.well-known/carddav     { return 301 /remote.php/dav/; }
   location = /.well-known/caldav      { return 301 /remote.php/dav/; }

   # Anything else is dynamically handled by Nextcloud
   location ^~ /.well-known            { return 301 /index.php$uri; }

   try_files $uri $uri/ =404;
  }