Deploy Nextcloud on a VM

This guide describe the steps to deploy and configure a Nextcloud instance on a Ubuntu 20.04.

Create VM with Ubuntu 20.04

To create a VM on OpenStack, you can follow this guide: https://cloud.garr.it/compute/quick-vm/

Note

When you are in the “Select Boot Source” step, choice Ubuntu 20.04 image.

Create Security Group to open SSH, HTTP and HTTPS ports.

Attach a Nextcloud data volume to VM

Now we want to create and attach a secondary volume to VM for Nextcloud data. To create and attach a new volume you can follow this steps:

  • login to the OpenStack dashboard: https://dashboard.cloud.garr.it
  • create a secondary volume: from the left menù “Volumes -> Volumes -> Create Volume”

Note

When you create a volume you must select the “Capacity” type.

  • attach the new volume to VM: from volume menù, click on “Manage Attachments” and select the VM

Now, mount volume on VM:

  • SSH access to the VM:

    $ ssh -i .ssh/<ssh-key> ubuntu@<ip-vm>
    
  • root user:

    $ sudo su -
    
  • check the /dev/vdb exist:

    $ fdisk -l
    
  • create partition, after command follow this step -> “gpt - new (enter) - write (yes) - quit”:

    $ cfdisk /dev/vdb
    
  • check partition:

    $ fdisk -l
    
  • format partition:

    $ mkfs.ext4 /dev/vdb1
    
  • create Nextcloud diectory:

    $ mkdir /media/nextcloud
    
  • mount partition on Nextcloud directory:

    $ mount /dev/vdb1 /media/nextcloud
    
  • check mount:

    $ df -h
    
  • save the informations needed to mount partiotion -> add this row “/dev/vdb1 /media/nextcloud ext4 defaults 0 0”:

    $ vi /etc/fstab
    
  • reboot VM:

    $ reboot
    

Nextcloud installation

  • SSH access to the VM:

    $ ssh -i .ssh/<ssh-key> ubuntu@<ip-vm>
    
  • root user:

    $ sudo su -
    
  • installation:

    $ snap install nextcloud
    
  • check installation:

    $ snap get nextcloud php
    $ snap services nextcloud
    $ snap connect nextcloud:removable-media
    

Note

It is possible to maintain the ‘php.memory-limit’ value to 512M.

  • additional useful commands to Nextcloud installation info:

    $ snap changes nextcloud
    $ snap info nextcloud
    $ snap connections nextcloud
    

Create admin user

You can create the administrator user from the Nextcloud web interface. By entering the public IP of the VM, the web interface is accessed and the admin credentials can be configured. In this case you are not using a secure connection, it is better to configure the admin user via CLI as follows:

  • configure admin user:

    $ nextcloud.manual-install admin <password>
    
  • check trusted domain:

    $ nextcloud.occ config:system:get trusted_domains
    
  • add trusted domain:

    $ nextcloud.occ config:system:set trusted_domains 1 --value=<domain>
    

Change Nextcloud data directory

  • Stop Nextcloud service:

    $ snap stop nextcloud
    
  • edit Nextcloud config and change the ‘datadirectory’ value with ‘/media/nextcloud/data’:

    $ vim /var/snap/nextcloud/current/nextcloud/config/config.php
    
  • copy data in the new directory:

    $ mv /var/snap/nextcloud/common/nextcloud/data /media/nextcloud
    
  • start Nextcloud service:

    $ snap start nextcloud
    

Create DNS record

Now it is necessary to create a DNS record ‘A’ to reach the service using a DNS name and to configure the certificate. The DNS name must be the same as previously added in the trusted domain.

Create certificate with Let’s Encrypt

  • Create certificate by Nextcloud:

    $ ufw allow 80,443/tcp
    
    $ nextcloud.enable-https lets-encrypt
    

Now you can access to Nextcloud from your browser.

Install and configure server mail

  • Change VM hostname with your domain:

    $ vi /etc/hostname
    
  • in “/etc/hosts” add a row with VM private IP and hostname (<private-ip> <hostname>):

    $ vi /etc/hosts
    
  • update:

    $ apt update
    
  • install mailutils, when requerid select ‘internet-site’ and configure complite domain:

    $ apt install mailutils
    
  • edit postfix configuration, edit ‘inet_interfaces’ from ‘all’ to ‘loopback-only’ and ‘myhostname’ with your domain:

    $ vi /etc/postfix/main.cf
    
  • restart postfix:

    $ service postfix restart
    

Now you can run a test to verify the correct functioning of the mail server:

$ echo "This email confirms that Postfix is working" | mail -s "Testing Posfix" <your-email>

Configure mail server in Nextcloud

Access to Nextcloud from web interface and from the upper right menù go to “Personal settings -> Basic settings”. Configures the server settings as follows:

Send mode: SMTP
Encryption: None
From address: noreply @ <domain>
Authentication method: None
Server address: localhost
Port: 25

To test the email send function, go to ‘Personal info’ (left menù) and add your email. Now return to the email settings and click on “Send email”.