--- title: Nextcloud visible: true --- [toc] ## Installation Nextcloud will be using apache ```sh 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 ```sh mariadb -u root -p ``` ```sql CREATE DATABASE nextcloud; ``` For UTF8 support use this instead: ```sql 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` ```sh wget https://download.nextcloud.com/server/releases/nextcloud-(version).tar.bz2 tar -xf nextcloud-(version).tar.bz2 ``` Change owner to the apache user ```sh chown -Rfv www-data:www-data /var/www/nextcloud ``` Create nextcloud configuration for apache ```sh vi /etc/apache2/sites-available/nextcloud.conf ``` Configuration file ```apacheconf #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 ```sh a2ensite nextcloud.conf && a2dissite 000-default.conf ``` Edit `ports.conf` for apache2 to only bind the addresses you need ```sh systemctl restart apache2 ``` ### Cron To execute regular jobs, I personally use cron. Edit `crontab` as the `www-data` user. ```sh 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 ```sh 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 ```sh sudo -u www-data php /var/www/nextcloud/updater/updater.phar ``` ### Backup Database Dump database to file ```sh 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 ```sh #!/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 ```sh 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" ``` ```sh 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 ```sh 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 ```sh podman run -it -d --name onlyoffice -p 9480:80 \ --restart always \ --label "io.containers.autoupdate=image" \ docker.io/onlyoffice/documentserver:latest ```