This instance of NextCloud will be installed on the server. If you wish to have it using Docker or Snap see the previous post [Link].

If you don’t have Apache + PHP + MySQL running follow these easy steps before starting with the NextCLoud it self:

sudo apt update && sudo apt upgrade -y
sudo apt install tasksel -y
sudo tasksel install lamp-server

Installing NextCloud

sudo apt install unzip
sudo rm -rf /var/www/html
sudo unzip -d /var/www/
sudo mv /var/www/nextcloud /var/www/html
sudo chown -R www-data:www-data /var/www/html/
sudo mysql

Get the latest at [Link].

MySQL Configuration

Create the database, create the user, give privileges, and flush MySQL privileges:

CREATE DATABASE nextcloud_db;
CREATE USER [email protected] IDENTIFIED BY 'nextcloud_password';
GRANT ALL PRIVILEGES ON nextcloud_db.* TO [email protected];

Configure Apache to NextCloud:

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

Paste this content and adjust the bolds accordingly:

ServerAdmin [email protected]
MDCertificateAgreement accepted
MDPrivateKeys RSA 4096

<VirtualHost *:80>
        ServerAdmin [email protected]
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        RewriteEngine On
        RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
<VirtualHost *:443>
        SSLEngine on
        SSLProtocol all -SSLv2 -SSLv3
        SSLHonorCipherOrder on
        ServerAdmin [email protected]
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        Protocols h2 http/1.1
        Header always set Strict-Transport-Security "max-age=63072000"
<Location "/md-status">
        SetHandler md-status

Note that HTTPS was configured on Apache, so configure the SSL/TLS encryption using the module MD, which uses Let’s Encrypt free service and is amazing!

sudo apt install libapache2-mod-md
sudo a2enmod md
sudo systemctl restart apache2
sudo a2enmod ssl
sudo systemctl reload apache2
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo a2enmod rewrite headers env dir mime setenvif ssl
sudo a2ensite nextcloud.conf
sudo apache2ctl configtest

If the test configuration goes well, restart Apache:

sudo systemctl restart apache2

If restarting fails check the log:

sudo tail -f /var/log/apache2/error.log

After restarting Apache successfully it will create the certificate for the HTTPS, and will necessary to be restarted once more after 1 or 2 minutes.

Access your new site on the browser

You may be prompted with a page with many requirements that are missing in your server to allow NextCloud features, such as image manipulating, compress files…

sudo apt install imagemagick php-imagick libapache2-mod-php7.4 php7.4-common php7.4-mysql php7.4-fpm php7.4-gd php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-mbstring php7.4-bz2 php7.4-intl php7.4-bcmath php7.4-gmp
sudo systemctl reload apache2

Refresh the page and the message will not be prompted anymore, but the installation process will start.

Create user and password for the NextCloud administrator.

Inform the database name and credentials you set before on the MySQL configuration.



OwnCloud is another opensource alternative to NextCloud, try it out and see what suits better to your needs:

sudo apt install -y
sudo docker run --name OwnCloud --restart=unless-stopped -v /opt/OwnCloudData:/mnt/data/ -d -e -p80:8080 owncloud/server

One Reply to “Private Cloud with NextCloud 23 on Ubuntu 20.04”

Comments are closed.