loader image
Nextcloud

How To Install Nextcloud In Rocky Linux 9

Step 1: Create a bash script for LAMP stack with the below code.

- The below script automatically installs the PHP version 8.3 (latest while writing this documentation) with all the necessary PHP modules needed for Nextcloud

- The script also installs MariaDB and generates random credentials of Root DB user and also creates database needed for Nextcloud Installation

LAMP Script with Copy Button

LAMP Stack Installation Script

Script copied
#!/bin/bash

# LAMP stack installation script for Rocky Linux 9
# Automates LAMP setup, including MySQL secure installation with random root password.

# Update system packages
echo "Updating system packages..."
sudo dnf update -y

# Install necessary dependencies for PHP repositories
echo "Installing required dependencies..."
sudo dnf install -y dnf-utils

# Enable Remi's repository for PHP 8.3
echo "Enabling Remi repository for PHP 8.3..."
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm
sudo dnf module reset php -y
sudo dnf module enable php:remi-8.3 -y

# Install PHP 8.3 and required extensions
echo "Installing PHP 8.3 and required extensions..."
sudo dnf install -y php php-cli php-common php-fpm php-json php-opcache php-mbstring php-xml php-gd php-mysqli php-pdo php-zip php-bcmath php-curl php-intl php-memcached php-imagick php-redis php-apcu

# Install MariaDB server
echo "Installing MariaDB server..."
sudo dnf install -y mariadb-server

# Enable and start MariaDB service
echo "Enabling and starting MariaDB..."
sudo systemctl enable mariadb --now

# Generate a strong random password for the MySQL root user
MYSQL_ROOT_PASSWORD=$(openssl rand -base64 16 | tr -d '/+=')

# Configure MariaDB root user password and secure installation non-interactively
echo "Configuring MariaDB..."
sudo mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}';"
sudo mysql -e "DELETE FROM mysql.user WHERE User='';"
sudo mysql -e "DROP DATABASE IF EXISTS test;"
sudo mysql -e "FLUSH PRIVILEGES;"

# Install Apache HTTP Server (httpd)
echo "Installing Apache..."
sudo dnf install -y httpd

# Enable and start Apache service
echo "Enabling and starting Apache..."
sudo systemctl enable httpd --now

# Set Apache and PHP-FPM to run on boot
echo "Enabling Apache and PHP-FPM to start on boot..."
sudo systemctl enable php-fpm

# Restart Apache to apply PHP settings
echo "Restarting Apache..."
sudo systemctl restart httpd

# Generate random credentials for a new database and user
DB_NAME=$(openssl rand -hex 6)
DB_USER=$(openssl rand -hex 6)
DB_PASS=$(openssl rand -base64 12 | tr -d '/+=')  # Removes problematic characters

# Create a new database and user
echo "Creating database and user..."
sudo mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" -e "CREATE DATABASE ${DB_NAME};"
sudo mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" -e "CREATE USER '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';"
sudo mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" -e "GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_USER}'@'localhost';"
sudo mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" -e "FLUSH PRIVILEGES;"

# Store credentials in a secure location
echo "Storing credentials securely..."
CREDENTIALS_FILE="/root/db_credentials.txt"
echo "DB_NAME=${DB_NAME}" > ${CREDENTIALS_FILE}
echo "DB_USER=${DB_USER}" >> ${CREDENTIALS_FILE}
echo "DB_PASS=${DB_PASS}" >> ${CREDENTIALS_FILE}
echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" >> ${CREDENTIALS_FILE}
chmod 600 ${CREDENTIALS_FILE}

# Display PHP and MariaDB versions
echo "Checking PHP version..."
php -v

echo "Checking MariaDB version..."
mariadb --version

# Display generated credentials
echo "=================================================="
echo "LAMP stack installation completed successfully!"
echo "Root Password: ${MYSQL_ROOT_PASSWORD}"
echo "Database Name: ${DB_NAME}"
echo "Username: ${DB_USER}"
echo "Password: ${DB_PASS}"
echo "Credentials saved in: ${CREDENTIALS_FILE}"
echo "=================================================="

    

** Create a script file ending with .sh and make it executable. Then Run it as shown below

** Once the installation completes, it will display random credentials

Step 2: Download Nextcloud and configure the server

** Click here to choose the compatible version of nextcloud or choose and download accordingly.

Note: In this guide, we have used the latest.zip version of the nextcloud. 

LAMP Script with Copy Button
Script copied
[root@testing ~]# wget https://download.nextcloud.com/server/releases/latest.zip
Script copied
[root@testing ~]# unzip latest.zip -d /var/www/html/
Script copied
[root@testing ~]# mkdir -p /var/www/html/nextcloud/data
Script copied
[root@testing ~]# chown -R apache:apache /var/www/html/nextcloud/
Script copied
[root@testing ~]# chcon -t httpd_sys_rw_content_t /var/www/html/nextcloud/ -R

** Change the Apache configuration i.e., httpd.conf file

LAMP Script with Copy Button
Script copied
[root@testing ~]# cd /etc/httpd/conf    
Script copied
[root@testing ~]# sudo nano httpd.conf 

** Make the default root of the server recognize /var/www/html/nextcloud as the root directory.

  • Old Value: DocumentRoot “/var/www/html”
  • New Value: DocumentRoot “/var/www/html/nextcloud”

** Change the Require granted to allow all inside /var/www/html/nextcloud directory

  • Old Value:
    # Further relax access to the default document root:
    <Directory “/var/www/html”>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
    </Directory>
  • New Value:
    # Further relax access to the default document root:
    <Directory “/var/www/html/nextcloud”>
    Options Indexes FollowSymLinks
    AllowOverride all
    Require all granted
    </Directory>

** Add index.php so the Apache server recognizes it as the default root file of any folder.

  • Old Value:
    <IfModule dir_module>
        DirectoryIndex index.html
    </IfModule>
  • New Value:
    <IfModule dir_module>
        DirectoryIndex index.html index.php
    </IfModule>
LAMP Script with Copy Button

** Restart the Apache Server

Script copied
[root@testing ~]# systemctl restart httpd   
Copy .conf File Example

** Create a nextcloud.conf file inside Apache configuration directory

Script copied
[root@testing ~]# sudo nano /etc/httpd/conf.d/nextcloud.conf   
Script copied
<VirtualHost *:80>
    DocumentRoot "/var/www/html/nextcloud"
    ServerName cloud.domain.com
    Redirect / https://cloud.domain.com/

    <Directory "/var/www/html/nextcloud/">
        Options MultiViews FollowSymlinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

    <IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set X-Content-Type-Options "nosniff"
    </IfModule>

    TransferLog /var/log/httpd/nextcloud_access.log
    ErrorLog /var/log/httpd/nextcloud_error.log
</VirtualHost>

<VirtualHost *:443>
    ServerName cloud.domain.com
    DocumentRoot "/var/www/html/nextcloud"

    <IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set X-Content-Type-Options "nosniff"
    </IfModule>

    SSLEngine on
    SSLCertificateFile "/etc/ssl/nextcloud/main.crt"
    SSLCertificateKeyFile "/etc/ssl/nextcloud/private.key"
    SSLCertificateChainFile "/etc/ssl/nextcloud/ca.crt"

    Protocols h2 http/1.1
</VirtualHost>
    

** Once the system is restarted open the browser with the IP of the server i.e., http://server_ip

** Enter the details displayed from the Bash Script for the database. Once Done, the Nextcloud is Successfully Installed.

Want to Configure more in Nextcloud ?? Read here below:

Nextcloud-More-to-do
More To Do With Nextcloud
1. Run OCC Command Globally. Code Box Example Whenever we have to recall the Nextcloud OCC Command, we...

Leave a Reply

Your email address will not be published. Required fields are marked *

You cannot copy content of this page