--- 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 '';` `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 ``` #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/" Options +FollowSymlinks AllowOverride All Dav off Require all granted SetEnv HOME /var/www/nextcloud SetEnv HTTP_HOME /var/www/nextcloud ErrorLog ${APACHE_LOG_DIR}/nextcloud_error_log CustomLog ${APACHE_LOG_DIR}/nextcloud_access_log common ``` 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 => '', ), ``` #### Trusted Domains Array of trusted domains. ``` 'trusted_domains' => array ( 0 => '', 1 => '', ), ``` ## 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 ```