---
title: Nextcloud
---

[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](https://bayton.org/docs/nextcloud/nextcloud-hoarding-trash-how-to-force-automatic-removal-of-deleted-items/) 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  
``mysqldump --single-transaction -h [server] -u [username] -p[password] [db_name] > nextcloud-sqlbkp_`date +"%Y%m%d"`.bak``  

> [Official documentation](https://docs.nextcloud.com/server/latest/admin_manual/maintenance/backup.html)  

#### 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](https://docs.nextcloud.com/server/latest/admin_manual/maintenance/restore.html)

## 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
```