nextcloudpleskVPS

How to install Nextcloud 15 within Plesk with nginx only

Changes 25.03.2019
– Add screenshot for finding out Plesk-User
– Add link to Redis to clarify
– Add link to Nextcloud-Background-Job-Manual
– Add instructions to adjust nginxClientMaxBodySize
———————————————–
Changes 23.03.2019
– Add Screenshot for memcache-block in config.php to clarify
– Adjust entry for crontab

In this Howto I will show you to install Nextcloud 15 on a Plesk VPS with nginx only
Nextcloud recommends the use of a MemoryCache. If we have ssh-access to our server, we install redis for this. Redis is an in-memory database with a simple key-value data structure and belongs to the family of NoSQL databases.
If you want to know more, follow this link.

The following command installs the appropriate package:

sudo apt-get install redis-server

please check the status of redis:

sudo systemctl status redis

Output:

Prepare vHost:

In Plesk we create the subdomain under domains:

 

 

and secure it with LetsEncrypt:

 

 

Within the subdomain we use the file manager:

 

 

and remove all files and directories:

 

 

Now we have to download the Nextcloud-Webinstaller from the following URL to our workstation:

Nextcloud Webinstaller

Afterwards we upload it to our Webspace in Plesk:

 

In Apache/NGINX settings of the subdomain, we set the following values for Additional nginx directives (Customize Domain / Subdomain):

rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
rewrite ^/.well-known/webfinger /public.php?service=webfinger last;
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";

location = /.well-known/carddav {
	return 301 $scheme://$host/remote.php/dav;
}

location = /.well-known/caldav {
	return 301 $scheme://$host/remote.php/dav;
}

location = /robots.txt {
	allow all;
	log_not_found off;
	access_log off;
}

# 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 application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject 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;

location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
	deny all;
}

location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
	deny all;
}

location ~ ^\/(?:updater|ocs-provider)(?:$|\/) {
	try_files $uri/ =404;
	index index.php;
}

# Adding the cache control header for js and css files

location ~ \.(?:css|js|woff2?|svg|gif)$ {
	try_files $uri /index.php$request_uri;
	add_header Cache-Control "public, max-age=15778463";
	add_header X-Content-Type-Options nosniff;
	add_header X-XSS-Protection "1; mode=block";
	add_header X-Robots-Tag none;
	add_header X-Download-Options noopen;
	add_header X-Permitted-Cross-Domain-Policies none;
	add_header Referrer-Policy no-referrer;
}

location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
	try_files $uri /index.php$request_uri;
}

 

NGINX-Settings:

 

 

In PHP settings we set the version to 7.2.x or 7.3.x and enter the following value under OPEN-Base-Dir:

 

{WEBSPACEROOT}{/}{:}{TMP}{/}:/dev/urandom:/proc/meminfo

 

in section disable_functions you have to delete opcache_get_status and insert none.

Don’t forget to adjust the upload_max_filesize and post_max_size values.

as example we can use the following values if you want to upload files not greater than 2 GB:

 

 

Then set pm to dynamic and adjust, as example:
 

 

At the bottom of the page under Additional configuration instructions, we set following parameters:

 

opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

[php-fpm-pool-settings]
env[PATH] = /usr/local/bin:/usr/bin:/bin

 

To allow uploading large files, we have to adjust the nginxClientMaxBodySize in panel.ini of Plesk:
We can do this in two ways, the easiest way is to edit the file with nano:

sudo nano /opt/psa/admin/conf/panel.ini

and we add the following content:

[webserver]
nginxClientMaxBodySize = 2048M

or you can install the „Panel.ini Editor“-Extension of Plesk and edit the file in Plesk:

Do not to forget to save this file.

Among the hosting settings, we have to set the 301 redirect (http to https) and run php set to FPM Application served by nginx:

 

 

Prepare Database

 

Add a database within the subdomain:

 

 

and accept or adjust the following settings and write them down for later use:

 

 

Finish the installation

 

Via the web browser, we call our Nextcloud-Webinstaller and complete the Installation now:

https://nextcloud.your-domain.tld/setup-nextcloud.php

In the next step, we enter a single „.“ into the field:

And after another click on „Next“, we should see the success of the installation:

The next step is to adjust the settings:

 

If we are logged in, we have to edit the config.php in config directory in Plesk via File Manager and insert the following block for the cache behind the „Trusted Domains-Array“ (if redis is installed):

 

'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.local' => '\OC\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
),

 

it should look like this:

If we have ssh-access (as root or Plesk-User), then we can create a CRON job (adjust user) for Nextcloud-Background-Jobs:

you can find the user in the domain view of plesk:

 
as example with my User as root:

sudo crontab -u nextclouding.de -e

 

if you have ssh-Access as Plesk-User „nextclouding.de“ than:

crontab -e

and enter the following lines (customize domain and subdomain):

 
for php7.2:

SHELL="/bin/sh"
*/15    *       *       *       *       /opt/plesk/php/7.2/bin/php -f 'nextcloud.your-domain.tld/cron.php' > /dev/null

 
for php7.3:

SHELL="/bin/sh"
*/15    *       *       *       *       /opt/plesk/php/7.3/bin/php -f 'nextcloud.your-domain.tld/cron.php' > /dev/null

Sometimes it is also possible to add a task via the GUI:

Otherwise, we use an external WebCron service, for example EasyCron.

The URL that needs to be called is:

 

https://nextcloud.domain.tld/nextcloud/cron.php

 
Among the basic settings, we check Nextcloud for errors and subsequently also in Plesk in the subdomain under logs.

you should see a warning for bigint indentifiers

because of this you have to execute the following command in your shell:

sudo -u admin php /var/www/vhosts/your-domain.tld/nextcloud.your-domain.tld/occ db:convert-filecache-bigint

After this errors or warnings should no longer be displayed.

If you have problems or questions, suggestions, don’t hesitate to contact me.

See you and happy Nextclouding 🙂

18 Gedanken zu „How to install Nextcloud 15 within Plesk with nginx only

  1. Hi Markus,
    I would like to use the “ pretty urls“ function get rid of the „/index.php“ in my urls. I tried to integrate it here: „Additional nginx directives“. But I don’t found out how to do that correctly, so i switched back to your addidtional directives.
    Do you know how to get the pretty urls working with nginx?

    Thanks for your help,
    Lukas

  2. Hi Markus

    another question, is it safe to apply Nginx directions to an existent Nextcloud running on Apache? to become Nginx only

    thanks again

  3. dear Markus
    thank you very much for your tutorials, they are really helpfull,
    i have followed this tutorial from the first step, which is installing Redis Server
    i have Plesk Onyx latest version on Ubuntu 16.04
    but when I add these lines to config.php I get this error on the website:

    Internal Server Error

    The server encountered an internal error and was unable to complete your request.
    Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.
    More details can be found in the webserver log.

    should I make some configurations for Redis?
    I’m not a linux user but I can follow copy paste commands 🙂
    thanks in advance

      1. You are using a fallback implementation of the intl extension. Installing the native one is highly recommended instead. at /var/www/vhosts/mns.ps/cloud.mns.ps/3rdparty/patchwork/utf8/src/Patchwork/Utf8/Bootup/intl.php#18

        Every 15 min, after i’v choseen Cron

      2. Dear Markus

        the log file is empty :/
        but when I remove the lines from the config.php I can enter the next cloud
        but I notice now that there is a problem with Cron I think
        Error PHP You are using a fallback implementation of the intl extension. Installing the native one is highly recommended instead. at /var/www/vhosts/mns.ps/cloud.mns.ps/3rdparty/patchwork/utf8/src/Patchwork/Utf8/Bootup/intl.php#18

          1. Dear Markus
            the input is :
            ● redis-server.service – Advanced key-value store
            Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
            Active: active (running) since Thu 2019-03-21 16:47:21 CET; 1 day 17h ago
            Docs: http://redis.io/documentation,
            man:redis-server(1)
            Main PID: 121568 (redis-server)
            Tasks: 3
            Memory: 1.4M
            CPU: 2min 8.123s
            CGroup: /system.slice/redis-server.service
            └─121568 /usr/bin/redis-server 127.0.0.1:6379

            Mar 21 16:47:21 mns.ps systemd[1]: Starting Advanced key-value store…
            Mar 21 16:47:21 mns.ps run-parts[121559]: run-parts: executing /etc/redis/redis-server.pre-up.d/00_exampl
            Mar 21 16:47:21 mns.ps run-parts[121569]: run-parts: executing /etc/redis/redis-server.post-up.d/00_examp
            Mar 21 16:47:21 mns.ps systemd[1]: Started Advanced key-value store.
            Mar 21 16:55:49 mns.ps systemd[1]: Started Advanced key-value store.
            ~
            ~
            ~
            ~
            ~
            ~
            ~
            ~
            ~
            ~
            ~
            ~
            lines 1-17/17 (END)
            it works.

          2. i have found the nextcloud.log file,
            here it is:
            {„reqId“:“t5cEpoCwvMjSACJ8qKCM“,“level“:3,“time“:“2019-03-21T15:26:13+00:00″,“remoteAddr“:““,“user“:“–„,“app“:“PHP“,“method“:““,“url“:“–„,“message“:“You are using a fallback implementation of the intl extension. Installing the native one is highly recommended instead. at \/var\/www\/vhosts\/mns.ps\/cloud.mns.ps\/3rdparty\/patchwork\/utf8\/src\/Patchwork\/Utf8\/Bootup\/intl.php#18″,“userAgent“:“–„,“version“:“15.0.5.3″}

            and when I add these configs to the conf file at the end:
            ……
            ‚installed‘ => true,
            23
            );
            24
            ‚Memcache.distributed‘ => ‚\\ OC \\ \\ Memcache Redis‘
            25
            ‚Memcache.local‘ => ‚\ OC \ Memcache \ Redis‘
            26
            ‚Memcache.locking‘ => ‚\\ OC \\ \\ Memcache Redis‘
            27
            ‚Redis‘ => array (
            28
            ‚Host‘ => ‚localhost‘
            29
            ‚Port‘ => 6379
            30
            )

            I get this error:
            Internal Server Error

            The server encountered an internal error and was unable to complete your request.
            Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.
            More details can be found in the webserver log.

          3. Sorry, you have to insert this behind Array Trusted Domains etc… behind ),

            ‚Memcache.distributed‘ => ‚\\ OC \\ \\ Memcache Redis‘
            ‚Memcache.local‘ => ‚\ OC \ Memcache \ Redis‘
            ‚Memcache.locking‘ => ‚\\ OC \\ \\ Memcache Redis‘
            ‚Redis‘ => array (
            ‚Host‘ => ‚localhost‘
            ‚Port‘ => 6379
            ),

            I will add a Screenshot in this Guide to make it easier to understand.

  4. Hi Markus, thank you very much for this new blog post.
    It really helped me getting strange problems solved. With the configuration I previously had (I think it came from your NC 13 Guide). After the NC15.0.5 update I had Problems to sync/create folders that ended like some file-extentions (such as tar in „Congstar“). I really don’t what exactly was going on there, but i got
    “ 405 MKCOL /remote.php/webdav/Dokumente/Schriftverkehr/Congstar HTTP/2.0″ errors in my logs.

    The updated Plesk-Config in this post solved my problems.
    Thanks for sharing this!

    Chris

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.