There are various cloud services available for you to store your data which include Google Drive, Microsoft Onedrive, and DropBox. The only thing not awesome with these services is that they are commercial services and you trust them to keep your data safe. What if there is an alternative to these commercial services? That is where Nextcloud comes in.

Nextcloud is a free and open-source platform that enables you to create your cloud service and is accessible wherever you want. It lets you stay in full control and protect the privacy of your data. It supports a wide range of apps like spreadsheets, documents, and presentations while also keeping calendar appointments and contacts. All these services are available via a web interface.

Nextcloud gives you access to all your files from wherever you are across any platform, whether at work, home, or road. With Nextloud you are eligible for constant improvements from the open-source community development models. You can choose to keep data on your server or on a data center that you trust with guaranteed compliance with business and legal requirements. Nextcloud was formed to focus on File syncing and sharing services, but they have expanded their toolset to include;

  • Nextcloud Talk for screen sharing, online meetings, and web conferencing without data leaks.
  • Nextcloud Groupware offers webmail, calendaring, and contacts integrated with Nextcloud files.

This guide shows you how to install Nextcloud on CentOS 9|AlmaLinux 9|RHEL 9.

Set up System for Nextcloud

Before installing Nextcloud, we need to have a few modules that will help run Nextcloud.


Install the LAMP Stack on your system. If not, follow through with this guide on Installing LAMP Stack on CentOS 9|AlmaLinux 9|RHEL 9.

You will also need to enable the EPEL repository on your system.

Install required dependencies for the installation

sudo dnf install -y yum-utils unzip curl wget bash-completion policycoreutils-python-utils mlocate bzip2

Install PHP extra modules.

sudo dnf install -y php-gd php-mbstring php-intl php-pecl-apcu php-mysqlnd php-opcache php-json php-zip

Then update your system.

sudo dnf update -y

Create Apache Virtualhost for Nextcloud

Create a virtual host for Nextcloud in the apache directory.

sudo vi /etc/httpd/conf.d/nextcloud.conf

Add the following content while specifying your server name and the root directory where you will store nextcloud files.

<VirtualHost *:80>
  DocumentRoot /var/www/html/nextcloud/

  <Directory /var/www/html/nextcloud/>
    Require all granted
    AllowOverride All
    Options FollowSymLinks MultiViews

    <IfModule mod_dav.c>
      Dav off


Restart apache service

sudo systemctl restart httpd

Create Database for Nextcloud

Start the MySQL command-line tool

sudo mysql -u root -p

Enter the following lines

CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'StrongPassword';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES on nextcloud.* to 'nextcloud'@'localhost';
FLUSH privileges;

Quit with the following command.


Install NextCloud on CentOS 9|AlmaLinux 9|RHEL 9

Download Nextcloud latest release of Nextcloud Server from the Download page. Go to the Download Server section and click on Download for Server under Archive file. You can alternatively use the wget command to download it as shown below.


Unzip the file to the /var/www/html/ directory.

sudo unzip -d /var/www/html

Create a data folder to help with the installation

sudo mkdir /var/www/html/nextcloud/data

Set permissions to Apache for the whole Nextcloud folder.

sudo chown -R apache:apache /var/www/html/nextcloud

Restart the Apache server.

sudo systemctl restart httpd

Create the firewall rule to allow apache access.

sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload

SELinux Configuration

If you have SELinux enabled on your Linux Distribution. You may need to run some commands to configure Nextcloud. More configuration settings can be found on the SELinux Configuration page. For this guide, Run the following commands.

sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/data(/.*)?'
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/config(/.*)?'
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/apps(/.*)?'
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/.htaccess'
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/.user.ini'
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/3rdparty/aws/aws-sdk-php/src/data/logs(/.*)?'

sudo restorecon -R '/var/www/html/nextcloud/'
sudo setsebool -P httpd_can_network_connect on

Once you are done with the configuration head over to your and continue with the next installation steps on Installation Wizard. The first thing to do is to create an account for administrative tasks.

As we want to use MySQL/MariaDB database, click on Storage & database then select the database type, and enter the details that we created above for the Database. Then click on Install. You can also choose to continue with the SQLite database for inial development instances.

The next page lists the recommended apps to install.

Your setup is finished and you will see the dashboard page as shown below.

You can click on Profile to view other details that you can add like profile picture, Email, Role, organization, About, Languages, Locale, Headline, etc.

The Files section contains a list of your files.

The mail section allows you to connect your mail account or do a manual connection.

The Talk section allows you to start conversations with colleagues and friends.

The Photos Sections allow you to view your photos.

The contacts section allows you to add contacts

The Calendar Tab allows you to schedule events and configure appointments.


Create a user on Nextcloud

To create a user, Go to Users then click on New user.

Then enter the details of the New User then click on

You will be required to enter the Admin password to authorize the user creation. The user will then be added to the list of other users as shown below.

Other actions can be done to the user as shown below.

Install Addons on Nextcloud

Nextcloud offers Apps that can be installed on the server to customize it further and improve its functionalities. They can be found on the Apps webpage on Nextcloud Site.

However, you have to connect the server to the website to access the available apps. For this, edit the configuration file and add the following entries.

$ sudo vi /var/www/html/nextcloud/confi/config.php
'appstoreenabled' => true,
'appstoreurl' => '',
'appsallowlist' => [],
'apps_paths' => [
                'path'=> '/var/www/html/nextcloud/apps',
                'url' => '/apps',
                'writable' => true,
'appcodechecker' => true,

Save and exit the file then refresh your server on the web.

Go to Apps then on available apps you will view them as shown. Click on the app you want to install, in my case, Breeze Dark theme, Then click Download and Enable.

Next, Go to Settings > Theming.

Then scroll to Breeze Dark. Click on the Checkbox to enable the theme by default.

Then refresh the page to see the changes.

Secure Nextcloud with SSL


  • Self-signed Certificate stored in /etc/pki/tls/certs directory
  • Let’s Encrypt Certificate stored in /etc/letsencrypt/live/ directory

Configure the Firewall to enable HTTPS access.

sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload

Install the mod_ssl package.

sudo dnf install mod_ssl

Self-signed Certificate

Open the SSL configuration file and set paths to the corresponding keys.

$ sudo vi /etc/httpd/conf.d/ssl.conf
SSLCertificateKeyFile "/etc/pki/tls/certs/server.key"
SSLCertificateFile "/etc/pki/tls/certs/server.crt"

Configure only the root to have access to the keys.

sudo chown root:root /etc/pki/tls/certs/server.key
sudo chmod 600 /etc/pki/tls/certs/server.key

Restart Apache server

sudo systemctl restart httpd

Let’s Encrypt certificate

Open the SSL configuration file and set the key’s path.

$ sudo vi /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/letsencrypt/live/
SSLCertificateKeyFile /etc/letsencrypt/live/

Configure only the root to have access to the keys.

sudo chown root:root /etc/letsencrypt/live/
sudo chmod 600 /etc/letsencrypt/live/

Restart the Apache Web server

sudo systemctl restart httpd

Use your browser to access

Configure Nginx as HTTPD Proxy.

Install Nginx with the following command.

sudo dnf install nginx

Edit the main configuration file to add the root folder and the following details to the server block.

$ sudo vi /etc/nginx/nginx.conf
listen                3200;
listen                [::]:3200;
root                   /var/www/html/nextcloud;

location / {

Save and exit the file.

Edit the Nextcloud configuration file to add the server name to the trusted domains.

$ sudo vi /var/www/html/nextcloud/config/config.php
'trusted_domains' => 
  array (
    0 => '',
    1 => '',

Configure SELinux to allow Nginx to forward traffic.

sudo setsebool -P httpd_can_network_connect 1
sudo  semanage port -a -t http_port_t -p tcp 3200
sudo semanage port -m -t http_port_t -p tcp 3200

Start and enable the service to autostart at boot.

sudo systemctl enable --now nginx

Check the status of the service.

$ sudo systemctl status nginx
 nginx.service - The nginx HTTP and reverse proxy server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor pre>
    Drop-In: /usr/lib/systemd/system/nginx.service.d
     Active: active (running) since Wed 2022-06-29 14:18:44 EAT; 7s ago
    Process: 10259 ExecStartPre=/usr/bin/rm -f /run/ (code=exited, sta>
    Process: 10260 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCE>
    Process: 10261 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
   Main PID: 10262 (nginx)
      Tasks: 3 (limit: 48771)
     Memory: 3.5M
        CPU: 30ms
     CGroup: /system.slice/nginx.service
             ├─10262 "nginx: master process /usr/sbin/nginx"
             ├─10263 "nginx: worker process"
             └─10264 "nginx: worker process"

Use a browser to connect to


We have looked at an overview of available cloud services and Nextcloud. We have also installed Nextcloud on CentOS 9|AlmaLinux 9|RHEL 9 systems. Nextcloud offers the option of having control of your data, whether in an office or a home set up in a free and secure way.

More guides to check out:


Please enter your comment!
Please enter your name here