How to install and configure NextCloud on Ubuntu 22.04 and LEMP

Pinterest LinkedIn Tumblr

In this guide, we are going to set up NextCloud on a Ubuntu 22.04 server hosted with Nginx, Mariadb and PHP (LEMP stack). We will be using Mariadb 10 and PHP 7.4 for this guide.

Nextcloud is an Open Source suite of client-server software for creating and using file hosting services. It is a  a free self-hosted cloud storage solution similar to Dropbox, Google Drive, etc. With Nextcloud, you don’t have to worry about the pricey alternatives and since you will host your own files, you don’t have to worry about privacy or someone collecting your data.

NextCloud can be installed on a private home server or a virtual private server in the cloud. Files can then be uploaded and then synced to a local desktop, laptop or even a smartphone. This way you have full control of your data.

Features of NextCloud

  • NextCloud has sync clients for Linux, Mac OS, Windows, Android and IOS
  • End to end encryption – files are encrypted while being uploaded to the server
  • NextCloud is free and Open Source
  • Can be integrated with an online office suite (Collobora, OnlyOffice) so you can create and edit your doc, ppt, xls files directly from NextCloud.
  • The app store contains hundreds of apps to extend functionality (like calendar app, notes-taking app, video conferencing app, etc).

Related Content


To follow along this guide, ensure that you have:

  • An up to date Ubuntu 20.04 Server
  • Internet access from the server
  • Root access from the server or user with sudo access

Table of Content

  1. Ensure that the server packages are up to date
  2. Installing Mariadb 10 in Ubuntu 20.04
  3. Creating mysql user for NextCloud
  4. Installing PHP in Ubuntu 20.04
  5. Installing Nginx in Ubuntu 20.04
  6. Download and configure Nextcloud
  7. Configure Nginx to serve NextCloud from a virtual host
  8. Update PHP Configuration
  9. Accessing Nextcloud from the web url

1. Ensure that the server packages are up to date

Let us make sure that our server packages are up to date with this command:

sudo apt update
sudo apt -y upgrade

While at it, let us also install some dependencies that we will require

sudo apt install -y unzip vim

2. Installing Mariadb in Ubuntu 22.04

Mariadb is a popular Opensource relational management system. It is available in the default repositories as mariadb-server.

Install it with this command:

sudo apt install -y mariadb-server

Mariadb will be installed and started by default in Ubuntu 20.04. Check the status with this

$ sudo systemctl status mariadb
● mariadb.service - MariaDB 10.6.7 database server
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-10-02 11:37:36 UTC; 30s ago
       Docs: man:mariadbd(8)
    Process: 34957 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
    Process: 34958 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
    Process: 34960 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION>
    Process: 35000 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
    Process: 35002 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS)
   Main PID: 34989 (mariadbd)
     Status: "Taking your SQL requests now..."
      Tasks: 12 (limit: 4392)
     Memory: 57.2M
        CPU: 376ms
     CGroup: /system.slice/mariadb.service
             └─34989 /usr/sbin/mariadbd

Oct 02 11:37:36 unstable-ubuntusrv mariadbd[34989]: Version: '10.6.7-MariaDB-2ubuntu1.1'  socket: '/run/mysqld/mysqld.sock'  port: 3306  Ubuntu 22.04
Oct 02 11:37:36 unstable-ubuntusrv systemd[1]: Started MariaDB 10.6.7 database server.

To ensure that mariadb starts on boot, enable it with this systemd command:

sudo systemctl enable mariadb

Once the mysql service is running, you need to secure it. Mysql provides a commandline utility that will do that:

sudo mysql_secure_installation

The above command will take you throuh prompts to secure and set a root password for the mysql instance.

Check more info on Installing and setting up Mariadb in this guide here.

3. Creating mysql user for NextCloud

It is always recommended to have a dedicated user for each app that connects to the DB. Check out this guide on managing mysql permissions here. We will set up a database, user and password to be used by nextcloud:

Connect to mysql server:

mysql -u root -p

After Supplying your password, enter the following to the mysql prompt:

create database nextcloud;
create user 'nextcloud_user'@'%' identified by 'S0mStrongPa$$word';
grant all privileges on nextcloud.* to 'nextcloud_user'@'%';

Now that we have configured our mysql connection, let’s go to the next section where we install and configure PHP and Nginx.

4. Installing PHP 8.1 in Ubuntu 22.04

NextCloud works fine with PHP 8.1. This version is available in the default Ubuntu repos.

Then install php and dependancies

sudo apt install -y \
  php \
  php-gd \
  php-curl \
  php-zip \
  php-dom \
  php-xml \
  php-simplexml \
  php-mbstring \
  php-intl \
  php-json \
  php-fpm \

Confirm the installed php version:

$ php -v
PHP 8.1.2 (cli) (built: Aug  8 2022 07:28:23) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies

For more info on setting up PHP and Nginx, check out this guide on How to Install and set up PHP and Nginx (LEMP) on Ubuntu 22.04.

5. Installing Nginx in Ubuntu 22.04

Next, let us install Nginx in our system. Use this command to install nginx

sudo apt install -y nginx

Nginx will be started by default. Check the status using this command:

$ sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-10-02 12:04:57 UTC; 7s ago
       Docs: man:nginx(8)
    Process: 49919 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 49920 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 49921 (nginx)
      Tasks: 2 (limit: 4392)
     Memory: 2.5M
        CPU: 26ms
     CGroup: /system.slice/nginx.service
             ├─49921 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             └─49922 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

Oct 02 12:04:57 unstable-ubuntusrv systemd[1]: Starting A high performance web server and a reverse proxy server...
Oct 02 12:04:57 unstable-ubuntusrv systemd[1]: Started A high performance web server and a reverse proxy server.

Active: active (running) indicate that the service is now up and running.

To enable the service on boot, use this command:

sudo systemctl enable nginx

6. Download and configure Nextcloud

Now that we have successfully configured the LEMP server in our system, let us download and set up NextCloud installer. Nextcloud provides a web installer that can be found in its site for web installer here.

First let us create our directory structure. We will create a directory /var/www/nextcloud and download the installer there. Then we will make sure that the web user owns that directory:

sudo mkdir /var/www/nextcloud
cd /var/www/nextcloud
curl -LO
chown www-data:www-data -R /var/www/nextcloud

7. Configure Nginx to serve NextCloud from a virtual host

We managed to download the NextCloud content to /var/www/nextcloud. The next bit it to set up Nginx to serve it.

Let’s create virtual site in the directory that nginx serves content here /etc/nginx/conf.d:

sudo vim /etc/nginx/conf.d/nextcloud.conf

Add the following content:

server {
    listen 80;

    root /var/www/nextcloud;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;

    location = /favicon.ico {
        log_not_found off;
        access_log off;

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/run/php/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Once the above changes have been made, we need to restart the nginx server and the php-fom server. Use these commands in the terminal to achieve that.

sudo systemctl restart php8.1-fpm nginx

Accessing Nextcloud installer from the web url

Then head to your set domain with the path for the set up , for me to initiate nextcloud set up.

You will get a set up wizard that will take you through installing dependencies and setting up admin user and database connection credentials.

This is the admin user set up:

Create a Nextcloud account

Database setup:

NextCloud Enter Database Details

After that Click Finish. You will be redirected to the login page where you will use the details for the created user to login. On Successful login you will get the Dashboard.


In this guide, we managed to set up LEMP on Ubuntu 22.04 to serve Next cloud.

I am a Devops Engineer, but I would describe myself as a Tech Enthusiast who is a fan of Open Source, Linux, Automations, Cloud and Virtualization. I love learning and exploring new things so I blog in my free time about Devops related stuff, Linux, Automations and Open Source software. I can also code in Python and Golang.

Write A Comment