image

How to Install Nexcloud on VPS

Published : December 17, 2025
Last Updated : December 17, 2025
Published In : Technical Guide

Setting up your own cloud storage gives you complete control over your data. Nextcloud is an open source platform that lets you store files, sync across devices, and collaborate securely. This guide covers installing Nextcloud 32 on Debian 12 with Apache, MariaDB, and PHP 8.3.

This installation includes SSL encryption, Redis caching, automated backups, and firewall security. Expect 30 to 45 minutes to complete.

What You Need Before Starting

You need a Debian 12 server with root access, a minimum of 2 GB RAM and 20 GB disk space. For 10+ users or large files, use 4 GB RAM and increase storage accordingly.

You also need a domain name pointing to your server IP with DNS properly configured. Verify propagation with dig yourdomain.com before installing SSL.

Finally, ensure you have SSH access as root or a user with sudo privileges.

Update Your Server First

Update existing packages for security patches and compatibility:

				
					apt update && apt upgrade -y
				
			

This takes 2 to 5 minutes. Reboot after kernel updates.

Step 1: Install Core Programs

Install required software:

				
					ssh username@your_vps_ip
				
			

Components installed:

  • Apache – Web server to serve Nextcloud
  • MariaDB – Database to store your data
  • Redis – Memory cache for performance
  • UFW – Firewall for security
  • Utilities – Tools for file management

Step 2: Install PHP 8.3

Debian 12 includes PHP 8.2, but we will install PHP 8.3 from the Sury repository for better performance and security, which is supported until November 2026.

Nextcloud 32 supports PHP 8.1 through 8.4, with 8.3 recommended for production. PHP 8.4 is supported but less tested. Use 8.3 unless you specifically need 8.4.

Note: To use Debian PHP 8.2, skip Sury steps and install php8.2 packages from the default repos.

Add the PHP Repository

Install required packages:

				
					apt install ca-certificates apt-transport-https software-properties-common gnupg -y
				
			

Download the repository signing key:

				
					wget -qO /usr/share/keyrings/php-archive-keyring.gpg https://packages.sury.org/php/apt.gpg

				
			

Add the repository:

				
					echo "deb [signed-by=/usr/share/keyrings/php-archive-keyring.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list
				
			

Update package list:

				
					apt update
				
			

Install PHP and Required Modules

Install PHP 8.3 with extensions:

				
					apt install php8.3 libapache2-mod-php8.3 php8.3-zip php8.3-xml php8.3-mbstring php8.3-gd php8.3-curl php8.3-imagick php8.3-intl php8.3-bcmath php8.3-gmp php8.3-cli php8.3-mysql php8.3-apcu php8.3-redis php8.3-bz2 -y

				
			

Extensions: zip/bz2 (compression), xml/mbstring (text), gd/imagick (images), mysql (database), curl (HTTP), apcu/redis (caching), intl (i18n), bcmath/gmp (math).

 

Configure PHP Settings

Nextcloud needs specific PHP settings adjusted for optimal performance. Open the configuration file:

				
					nano /etc/php/8.3/apache2/php.ini
				
			

Modify these settings. Use Ctrl+W to search:

				
					memory_limit = 1024M
upload_max_filesize = 16G
post_max_size = 16G
date.timezone = Your/Timezone

				
			

Settings explanation:

  • memory_limit – Memory for operations like preview generation
  • upload_max_filesize – Maximum file size
  • post_max_size – Must equal or exceed upload_max_filesize
  • date.timezone – Your timezone such as America/New_York

Most users need only 2G upload limits.

Note: If you configure very large upload sizes of multiple GB, consider increasing memory_limit to 2G or more depending on your workload and installed extensions. Alternatively, reduce upload limits to match your server available RAM.

Save with Ctrl+X, then Y, then Enter.

Verify PHP Opcache

Verify PHP opcache is enabled, which caches compiled code for performance:

				
					php -m | grep opcache
				
			

If not listed, install it:

				
					apt install php8.3-opcache -y
systemctl restart apache2

				
			

Step 3: Configure MariaDB Database

 

Secure MariaDB Installation

Run the security script:

				
					mysql_secure_installation
				
			

Press Enter for current root password (none set). Answer all prompts with Yes:

  • Set root password – Choose strong password, store securely
  • Remove anonymous users – Prevents unauthorized access
  • Disallow remote root login – Local connections only
  • Remove test database – Eliminates security risk
  • Reload privilege tables – Applies changes

     

Create Nextcloud Database

Log into MariaDB:

				
					mysql -u root -p
				
			

Create a database and a user with proper character encoding:

				
					CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'secure_password';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
EXIT;

				
			

The utf8mb4 character set ensures full Unicode support, including emojis.

Replace secure_password with a strong password having 16+ characters, mixed case, numbers, and symbols. Use a password manager. Save for Step 11.

User nextcloud@localhost can only connect locally, preventing remote access attempts.

Step 4: Download Nextcloud

Download Nextcloud 32, which is approximately 180 MB and takes 30 to 60 seconds:

				
					cd /tmp && wget https://download.nextcloud.com/server/releases/latest-32.zip
				
			

Extract and move to web directory:

				
					unzip latest-32.zip && mv nextcloud /var/www/ && rm latest-32.zip

				
			

Verify Download Integrity (Optional)

For added security, verify the download SHA256 checksum:

				
					wget https://download.nextcloud.com/server/releases/latest-32.zip.sha256
sha256sum -c latest-32.zip.sha256

				
			

Step 5: Set Up Apache Web Server

 

Enable Required Apache Modules

Enable required modules:

				
					a2enmod rewrite headers env dir mime
				
			

These modules provide:

  • rewrite – Enables clean URLs and proper routing
  • headers – Manages HTTP headers for security and caching
  • env – Handles environment variables
  • dir – Controls directory listing behavior
  • mime – Sets correct content types for files

Create Nextcloud Configuration

Create configuration file:

				
					nano /etc/apache2/sites-available/nextcloud.conf
				
			

Replace cloud.domain.com with your domain and [email protected] with your email:

				
					<VirtualHost *:80>
    ServerAdmin admin@domain.com
    DocumentRoot /var/www/nextcloud/
    ServerName cloud.domain.com
    
    Alias /nextcloud "/var/www/nextcloud/"
    
    <Directory /var/www/nextcloud/>
        Options +FollowSymlinks
        AllowOverride All
        Require all granted
    </Directory>
    
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

				
			

This sets the document root, server name, and directory permissions.

Enable the site and restart Apache:

				
					a2ensite nextcloud.conf && systemctl restart apache2

				
			

Step 6: Create Data Folder and Set Permissions

Create a separate data directory (improves security and backup management):

				
					mkdir /home/data
				
			

Set ownership and permissions:

				
					chown -R www-data:www-data /var/www/nextcloud /home/data
chmod -R 755 /var/www/nextcloud

				
			

Apache runs as www-data. Permissions 755 means the owner gets read, write, and execute, while group and others get read and execute.

For tighter security, use 750:

				
					chmod -R 750 /var/www/nextcloud

				
			

This applies only to the owner and the group.

Step 7: Configure Firewall

Configure firewall:

				
					ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

				
			

Type Y when prompted.

Ports allowed:

  • 22 – SSH for server management
  • 80 – HTTP for setup and SSL verification
  • 443 – HTTPS for encrypted connections

Verify:

				
					ufw status
				
			

Step 8: Install SSL Certificate

Install SSL certificate from Let’s Encrypt:

				
					apt install certbot python3-certbot-apache -y
certbot --apache

				
			

Follow prompts: enter email, agree to ToS by typing A, confirm domain, choose option 2 to redirect to HTTPS.

If SSL module errors occur:

				
					a2enmod ssl && systemctl restart apache2

				
			

Certbot obtains a certificate, configures Apache, and enables auto-renewal (90 days).

Verify auto-renewal:

				
					certbot renew --dry-run
				
			

Step 9: Enable Redis for Performance

Enable Redis (installed in Step 1):

				
					systemctl enable redis-server
systemctl start redis-server

				
			

Configure in Step 12 for file locking and memory caching.

Step 10: Set Up Background Jobs

Set up background jobs:

				
					crontab -u www-data -e
				
			

Add this line (runs maintenance every 5 minutes):

				
					*/5 * * * * php -f /var/www/nextcloud/cron.php
				
			

Save and exit.

Step 11: Complete Web Installation

Navigate to https://cloud.domain.com

If the connection fails, verify DNS with dig cloud.domain.com.

Fill in the installation wizard:

Admin Account

Username and a strong password (12+ characters).

Data Directory

Enter /home/data or leave the default.

Database

  • User: nextcloud
  • Password: From Step 3
  • Name: nextcloud
  • Host: localhost

Click Install (takes 1 to 2 minutes).

Step 12: Configure Redis Integration

Configure Redis:

				
					nano /var/www/nextcloud/config/config.php
				
			

Add before closing bracket:

				
					 'memcache.local' => '\OC\Memcache\APCu',
  'memcache.locking' => '\OC\Memcache\Redis',
  'redis' => [
    'host' => 'localhost',
    'port' => 6379,
  ],

				
			

APCu handles local caching, Redis handles file locking. Dramatically improves concurrent performance.

Restart Apache:

				
					systemctl restart apache2

				
			

Step 13: Verify Installation

Log in and navigate to Settings, then Administration, then Overview.

Review security warnings and configuration status.

Common warnings:

  • Background jobs not cron – Fixed in Step 10
  • Phone region not set – Add country code
  • Missing database indices – Run suggested occ commands

Verify Redis in Memory caching section.

Step 14: Set Up Automated Backups

Create backup directory:

				
					mkdir /root/nextcloud-backups
				
			

Create backup script:

				
					nano /root/backup-nextcloud.sh
				
			

Add this content. Replace your_secure_password with your database password:

				
					#!/bin/bash

BACKUP_DIR="/root/nextcloud-backups"
DATE=$(date +%Y%m%d-%H%M%S)
NC_DIR="/var/www/nextcloud"
DATA_DIR="/home/data"
DB_NAME="nextcloud"
DB_USER="nextcloud"
DB_PASS="your_secure_password"

sudo -u www-data php ${NC_DIR}/occ maintenance:mode --on
mysqldump --single-transaction --default-character-set=utf8mb4 -u ${DB_USER} -p${DB_PASS} ${DB_NAME} > ${BACKUP_DIR}/nextcloud-db-${DATE}.sql
tar -czf ${BACKUP_DIR}/nextcloud-data-${DATE}.tar.gz ${DATA_DIR}
tar -czf ${BACKUP_DIR}/nextcloud-files-${DATE}.tar.gz ${NC_DIR}
sudo -u www-data php ${NC_DIR}/occ maintenance:mode --off
find ${BACKUP_DIR} -type f -mtime +7 -delete

echo "Backup completed: ${DATE}"

				
			

The single-transaction flag ensures consistent backups for InnoDB tables without locking. The default-character-set utf8mb4 flag preserves full Unicode characters.

For better security, use ~/.my.cnf:

				
					nano ~/.my.cnf

				
			

Add:

				
					[mysqldump]
user=nextcloud
password=your_secure_password

				
			

Secure it:

				
					chmod 600 ~/.my.cnf

				
			

Then remove the password parameter from the mysqldump in the script.

Security Warning: Never share this file. Store backups with encryption.

Make executable and schedule:

				
					chmod +x /root/backup-nextcloud.sh

				
			

Schedule daily backups:

				
					crontab -e


				
			

Add:

				
					0 2 * * * /root/backup-nextcloud.sh >> /var/log/nextcloud-backup.log 2>&1
				
			

Script keeps 7 days of backups.

Test manually:

				
					/root/backup-nextcloud.sh
				
			

Important: Copy backups off server for disaster recovery using rsync, scp, or cloud storage.

 

What to Do Next

Start by downloading the desktop client from nextcloud.com for Windows, macOS, or Linux. This enables automatic file syncing between your computer and server.

Configure email settings by navigating to Settings then Basic settings. Enter your SMTP details to enable notifications and password resets.

Enable two-factor authentication for additional security. Navigate to Settings then Security. Nextcloud supports TOTP apps like Google Authenticator and Authy, plus hardware keys.

Explore the App Store to install additional functionality. Popular apps include Calendar, Contacts, Notes, Talk for video calls, and Collabora for document editing.

Create user accounts, set storage quotas, and organize users into groups for easier permission management.

Common Issues and Solutions

If you see permission errors or cannot upload files, run the following command to fix ownership:

				
					chown -R www-data:www-data /var/www/nextcloud /home/data
				
			

For database connection failures, verify your credentials in MariaDB. Log in and run the GRANT command from Step 3 again.

If SSL certificate installation fails, verify DNS propagation with dig +short cloud.domain.com. Check that your firewall allows ports 80 and 443.

When you cannot upload large files, check PHP settings in /etc/php/8.3/apache2/php.ini and verify disk space using df -h. You may also need to add the following to your Apache config Directory section, then restart Apache:

				
					LimitRequestBody 0
				
			

The value 0 means unlimited file size.

If Apache won’t start, find syntax errors by running:

				
					apache2ctl configtest

				
			

Fix any reported errors before attempting to restart Apache.

For Redis connection errors, verify Redis is running:

				
					systemctl status redis-server

				
			

Then check that config.php has correct Redis settings.

If you experience slow performance, enable PHP opcode caching as shown in Step 2. Increase memory_limit if needed. Ensure background jobs use cron instead of AJAX.

Keeping Your System Updated

Update your system packages monthly using the following command:

				
					apt update && apt upgrade -y
				
			

This updates Apache, PHP, MariaDB, and all system packages. Remember to reboot after kernel updates.

For Nextcloud updates, navigate to Settings, then Overview. When updates are available, you will see an Update button. Always create a backup first using your backup script.

Subscribe to Nextcloud security advisories at nextcloud.com/security/advisories to receive notifications about critical patches.

Monitor your logs regularly for errors or unusual activity:

				
					tail -f /var/log/apache2/error.log
tail -f /var/www/nextcloud/data/nextcloud.log

				
			

Watch for repeated failed logins, PHP errors, or database connection issues.

 

Wrapping Up

Your Nextcloud 32 installation includes SSL encryption, Redis caching, automated backups with 7-day retention, and firewall protection. You have a production-ready configuration.

You control your data on your infrastructure with no terms of service changes, price increases, or privacy concerns.

For support: Nextcloud community forums or docs.nextcloud.com.


About the Author Peter French is the Managing Director at Virtarix, with over 17 years in the tech industry. He has co-founded a cloud storage business, led strategy at a global cloud computing leader, and driven market growth in cybersecurity and data protection.

Other posts

image
December 17, 2025
Published in : Technical Guide
How to Install Nexcloud on VPS

Step-by-step guide to install Nextcloud 32 on Debian 12 VPS with SSL, Redis, backups, and firewall for secure, private cloud storage.

image
December 12, 2025
Published in : Technical Guide
What is Umask and How to Use It on a VPS?

Learn how umask controls default file and directory permissions, and how to configure it on your VPS for better security, collaboration, and server management.

image
December 9, 2025
Published in : Technical Guide
Complete Guide to Offshore Streaming Servers

Offshore streaming servers offer high performance, privacy, unmetered bandwidth, and global reach for IPTV, live events, gaming, and large streaming platforms.

Listed on WHTop.com Listed on WHTop.com

© 2025 : Virtarix. All Rights Reserved