wiki-grav/pages/02.linux/10.nextcloud/default.en.md
2022-05-20 21:08:08 +02:00

4.7 KiB

title
Nextcloud

Installation

Nextcloud will be using apache
# apt install mlocate apache2 libapache2-mod-php mariadb-client mariadb-server wget unzip bzip2 curl php php-common php-curl php-gd php-mbstring php-mysql php-xml php-zip php-intl php-apcu php-redis php-bcmath php-gmp php-imagick

Not found: php-http-request python-certbot-apache

No password set
# mariadb -u root -p

CREATE DATABASE nextcloud;
For UTF8 support use this instead:
"CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"

GRANT ALL ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY '<password>';

FLUSH PRIVILEGES;

Exit the MariaDB prompt

Download Nextcloud into /var/www
# wget https://download.nextcloud.com/server/releases/nextcloud-(version).tar.bz2

# tar -xf nextcloud-(version).tar.bz2

Change owner to the apache user
# chown -Rfv www-data:www-data /var/www/nextcloud

Create nextcloud configuration for apache
# vi /etc/apache2/sites-available/nextcloud.conf

Configuration file

<VirtualHost *:80> #specify listen ip addresses: (address):(port) for ipv4, [(address)]:(port) vor ipv6, *:80 for all
		ServerAdmin webmaster@localhost
    DocumentRoot /var/www/nextcloud
		Alias /nextcloud "/var/www/nextcloud/"

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

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

				Require all granted

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

		ErrorLog ${APACHE_LOG_DIR}/nextcloud_error_log
		CustomLog ${APACHE_LOG_DIR}/nextcloud_access_log common
</VirtualHost>

Enable nextcloud and disable the default site
# a2ensite nextcloud.conf && a2dissite 000-default.conf

Edit ports.conf for apache2 to only bind the addresses you need

# systemctl restart apache2

Cron

To execute regular jobs, I personally use cron.
Edit crontab as the www-data user.
sudo -u www-data crontab -e

Add this following line:
*/5 * * * * php -f (nextcloud dir)/cron.php

Configuration

The main config file is (nextcloud dir)/config/config.php

Automatic Trash clearing

See this page for more options
{.is-info}

This settings keeps the files for 15 days, unless drive space is getting low.
In that case it delets them earlier.
'trashbin_retention_obligation' => 'auto, 15',

Trust Proxy

This disables the warning of untrusted proxy in the webinterface.

'trusted_proxies' =>
    array (
	      0 => '<proxy ip>',
),

Trusted Domains

Array of trusted domains.

'trusted_domains' => 
    array (
        0 => '<domain 1>',
        1 => '<domain 2>',
),

Maintenance

Maintenance Mode

Enable maintenance mode to prevent data inconsistencies
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on

To disable maintenance mode again, run the same command with --off instead of --on

Upgrade with CLI

sudo -u www-data php /var/www/nextcloud/updater/updater.phar

Backup Database

Dump database to file
mysqldump --single-transaction -h [server] -u [username] -p[password] [db_name] > nextcloud-sqlbkp_`date +"%Y%m%d"`.bak

Official documentation
{.is-info}

Backup Script

#!/bin/bash
set -euo pipefail

server=
username=
password=
db_name=

sudo mkdir -p /var/www/database-backup

sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on

mysqldump --single-transaction -h $server -u $username -p$password $db_name | sudo tee /var/www/database-backup/nextcloud-sqlbkp_`date +"%Y%m%d"`.bak

sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off

Restore Database

mariadb -h $server -u $username -p$password -e "DROP DATABASE nextcloud"
mariadb -h $server -u $username -p$password  -e "CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"

mariadb -h $server -u $username -p$password $db_name < nextcloud-sqlbkp.bak

Nextcloud documentation
{.is-info}

Collabora Online Container

Unfinished {.is-warning}

# podman run -t -d --name collabora-online -p 9980:9980 \
    -e "extra_params=--o:ssl.enable=false" \
    --restart always \
    --label "io.containers.autoupdate=image" \
    docker.io/collabora/code:latest

Onlyoffice Container

Unfinished {.is-warning}

# podman run -it -d --name onlyoffice -p 9480:80 \
    --restart always \
    --label "io.containers.autoupdate=image" \
    docker.io/onlyoffice/documentserver:latest