wiki-grav/pages/02.linux/nextcloud/default.en.md

5.0 KiB

title visible
Nextcloud true

[toc]

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

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

NOTE: The password needs to be inserted directly after -p without any space

mysqldump --single-transaction -h {SERVER} -u {USERNAME} -p{PASSWORD} {DB NAME} > nextcloud-sqlbkp_`date +"%Y%m%d"`.bak

Official documentation

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

Collabora Online Container

Unfinished

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

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