Table of Contents

Information

Prerequisites

Dependencies

su -
pkg install git-lite php84-mysqli php84-composer node23 npm-node23 php84-simplexml php84-dom php84-iconv php84-sodium

Download Source

su -
git clone --branch '6.0-dev' --depth '1' --recurse-submodules 'https://github.com/joomla/joomla-cms.git' '/usr/local/www/main' && chown -R 'www':'www' '/usr/local/www/main' && sync

Environment

Composer

su -
cd '/usr/local/www/main' && su -m 'www' -c "'/usr/local/bin/composer' install --ignore-platform-req='ext-ldap' --no-dev"

Node.js

su -
cd '/usr/local/www/main' && su -m 'www' -c "'/usr/local/bin/npm' ci --verbose --cache '/tmp/main' --ignore-scripts"

Databases

mariadb -u 'root' -p
CREATE DATABASE joomla_db;
CREATE USER 'joomla'@'localhost' IDENTIFIED BY 'x';
GRANT ALL PRIVILEGES ON joomla_db.* to 'joomla'@'localhost';
FLUSH PRIVILEGES;
EXIT

nginx + PHP-FPM Configuration

PHP-FPM Socket

su -
ee '/usr/local/etc/php-fpm.d/main.conf' && service 'php_fpm' restart
[main]

; User/Group
user = www
group = www

; Socket
listen = 127.0.0.1:9001
listen.allowed_clients = 127.0.0.1

; Process Management
pm = ondemand
pm.max_children = 4
pm.process_idle_timeout = 30

; General
php_value[date.timezone] = "America/New_York"

; End

FastCGI

su -
ee '/usr/local/etc/nginx/default.d/main.conf'
# PHP-FPM
location ~ \.(php|phar)(/.*)?$ {
    fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;
    fastcgi_intercept_errors on;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param HTTPS on;
    fastcgi_pass 127.0.0.1:9001;
}

# End

Server Block

su -
ee '/usr/local/etc/nginx/vhosts.d/main.conf' && service 'nginx' reload && sync
server {
    listen 443 ssl;
#    http2 on;
    server_name 'realmofespionage.xyz';
    root '/usr/local/www/main';
    index 'index.php';

    include '/usr/local/etc/nginx/default.d/main.conf';
    include '/usr/local/etc/nginx/default.d/headers.conf';

    client_max_body_size '30M';

#    add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'" always;

#    access_log  /var/log/nginx/main-access.log;
#    error_log  /var/log/nginx/main-error.log;

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

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

    location ~* /(images|cache|media|logs|tmp)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
        return 403;
        error_page 403 /403_error.html;
    }

    location ~* \.(ico|pdf|flv)$ {
        expires 1y;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|swf|xml|txt)$ {
        expires 14d;
    }
 
}

Initial Setup