Skip to main content

[How-To] Configure Nextcloud after Installation

Purpose

This document aims to make config adjustments to get ride of all errors in Nextcloud after initial installation and setup. 

Prerequisites

List of prerequisites:

  • Root user or sudo user
  • Nextcloud Server

Nextcloud Configuration 

Step 1: Configure Nextcloud Config.php

First, run the following to change to the correct directory:

cd /var/www/nextcloud/config

Next, run the following command to install redis:

sudo apt update
sudo apt install redis-server php-redis

Now, run this command to enable redis on startup:

sudo systemctl enable redis-server

Next, run the following command to edit the config.php file:

sudo nano config.php

Once in the file, work off of this below golden image, making sure not to change anything values already set that are *** out of this golden config:

<?php
$CONFIG = array (
  'instanceid' => '******',
  'passwordsalt' => '******',
  'secret' => '******',
  'trusted_domains' =>
  array (
    0 => 'cloud.dev.stretchpowered.com',
  ),
  'trusted_proxies' =>
  array (
    0 => '10.10.30.100',
  ),
  'overwritehost' => 'cloud.dev.stretchpowered.com',
  'datadirectory' => '/var/www/nextcloud/data',
  'dbtype' => 'mysql',
  'version' => '29.0.2.2',
  'overwrite.cli.url' => 'https://cloud.dev.stretchpowered.com',
  'overwriteprotocol' => 'https',
  'dbname' => 'nextcloud_db',
  'dbhost' => 'localhost',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'mysql.utf8mb4' => true,
  'dbuser' => 'nextclouduser',
  'dbpassword' => '******',
  'installed' => true,
  'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' => [
    'host' => 'localhost',
    'port' => 6379,
    // Optional for password-protected Redis instances
    // 'password' => '******',
    'timeout' => 0.0,
    'read_timeout' => 0.0,
    'dbindex' => 0,
],
  'default_phone_region' => 'US',
  'mail_from_address' => 'nextcloud-leffringo',
  'mail_smtpmode' => 'smtp',
  'mail_sendmailmode' => 'smtp',
  'mail_domain' => 'outlook.com',
  'mail_smtphost' => 'smtp-mail.outlook.com',
  'mail_smtpport' => '587',
  'mail_smtpauth' => 1,
  'mail_smtpname' => 'nextcloud-leffringo@outlook.com',
  'mail_smtppassword' => '******',
  'maintenance_window_start' => 7,
  'maintenance' => false,
  'theme' => '',
  'loglevel' => 2,
);

Next, run the following command to restart Apache web server:

sudo systemctl restart apache2

Once you've made all the changes to match the golden config, move on to step 2.

Step 2: Configure Apache2 nextcloud.conf

Run the following command to go to the correct directory:

cd /etc/apache2/sites-available

Run the following command to edit the nextcloud.conf file:

sudo nano nextcloud.conf

Make the following changes if anything is different, being careful not to mess with domain settings for the environment you are working with:

<VirtualHost *:80>
    ServerName cloud.dev.stretchpowered.com
    DocumentRoot /var/www/nextcloud/

    # log files
    ErrorLog /var/log/apache2/cloud.dev.stretchpowered.com-error.log
    CustomLog /var/log/apache2/cloud.dev.stretchpowered.com-access.log combined

    <Directory /var/www/nextcloud/>
        Options +FollowSymlinks
        AllowOverride All

        <IfModule mod_dav.c>
            Dav off
        </IfModule>

        SetEnv HOME /var/www/nextcloud
        SetEnv HTTP_HOME /var/www/nextcloud
    </Directory>
</VirtualHost>

Once you've matched the golden config, move on to step 3.

Step 3: Configure .htaccess Config

Run the following command to change to the correct directory:

cd /var/www/nextcloud

Run the following command to enable mod_rewrite on apache2:

sudo a2enmod rewrite

Run the following command to edit the config file:

sudo nano .htaccess

Most of this document default is fine, just scroll down toward the bottom and add lines missing from this section:

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTP_USER_AGENT} DavClnt
  RewriteRule ^$ /remote.php/webdav/ [L,R=302]
  RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
  RewriteRule ^\.well-known/host-meta /nextcloud/public.php?service=host-meta [QSA,L]
  RewriteRule ^\.well-known/host-meta\.json /nextcloud/public.php?service=host-meta-json [QSA,L]
  RewriteRule ^\.well-known/carddav /remote.php/dav/ [R=301,L]
  RewriteRule ^\.well-known/caldav /remote.php/dav/ [R=301,L]
  RewriteRule ^\.well-known/webfinger /nextcloud/public.php?service=webfinger [QSA,L]
  RewriteRule ^remote/(.*) remote.php [QSA,L]
  RewriteRule ^(?:build|tests|config|lib|3rdparty|templates)/.* - [R=404,L]
  RewriteRule ^\.well-known/(?!acme-challenge|pki-validation) /index.php [QSA,L]
  RewriteRule ^ocm-provider/?$ index.php [QSA,L]
  RewriteRule ^(?:\.(?!well-known)|autotest|occ|issue|indie|db_|console).* - [R=404,L]
</IfModule>

Once you have added these missing lines, move on to step 4.

Step 4: Configure nginx reverse proxy config

Run the following command to change to the correct directory (on the reverse proxy nginx box, not nextcloud):

cd /etc/nginx/conf.d

Run the following command to edit the correct conf file name:

sudo nano cloud.dev.stretchpowered.com.conf

Match this config with the items below, making sure not to mess with the SSL and domain settings you already have specific to the environment. 

server {
        server_name cloud.dev.stretchpowered.com;
        client_max_body_size 64000m;
        location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Host $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://10.30.20.151:80;

        # Adjusted timeout settings
        proxy_connect_timeout 600s;
        proxy_send_timeout 600s;
        proxy_read_timeout 600s;
        send_timeout 600s;

        # Adjusted buffer settings
        proxy_buffer_size 128k;
        proxy_buffers 4 256k;
        proxy_busy_buffers_size 256k;
        proxy_temp_file_write_size 256k;
        }

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

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/cloud.dev.stretchpowered.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/cloud.dev.stretchpowered.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = cloud.dev.stretchpowered.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


        listen 80;
        server_name cloud.dev.stretchpowered.com;
    return 404; # managed by Certbot


}

Once you've matched these to the golden config, move on to step 5.

Step 5: Configure apcu Config

First lets make sure apcu is running under the correct version of PHP:

php -m | grep apcu

This should return the word apcu. Once you have that confirmed, run the following to edit the config:

sudo nano /etc/php/8.2/mods-available/apcu.ini

Once editing, add the following lines:

extension=apcu.so
apc.enable_cli=1

Save and exit that config file. Then, run the following to enable the apcu module for PHP 8.2:

sudo phpenmod apcu

Then, restart the web server:

sudo systemctl restart apache2

Then, if you have this error or just as a good check, run this command to make sure no database entries are missing:

sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices

That is it for this step, move on to step 6.

Step 6: Clear Nextcloud Error Log

Run the following command to become root as you need to be for this:

sudo su -l

Run the following command to change to the correct directory:

cd /var/www/nextcloud/data

Run the following command to remove the nextcloud config file:

rm -f nextcloud.log

With that, you've completed the initial config. Refresh your nextcloud instance in browser on admin tab to see if you have the famous green check mark.