Sunday, 26 April 2026

Buat 2 moodle dalam 1 mesin instance

 **buat folder
mkdir -p /var/www/shared/local

**pindah kode
mv /var/www/html/moodle/local/jurnalmengajar /var/www/shared/local/

**buat symlink kepada 2 moodle:
ln -s /var/www/shared/local/jurnalmengajar \
/var/www/situs_a/moodle/local/jurnalmengajar

ln -s /var/www/shared/local/jurnalmengajar \
/var/www/situs_b/moodle/local/jurnalmengajar

**atur permission
chown -R www-data:www-data /var/www/shared/local/jurnalmengajar
chmod -R 755 /var/www/shared/local/jurnalmengajar

**upgrade masing-masing
php /var/www/situs_a/moodle/admin/cli/upgrade.php
php /var/www/situs_b/moodle/admin/cli/upgrade.php

⚠️ HAL PENTING (JANGAN SAMPAI TERLEWAT)
1. Database tetap beda
a → database a
b → database b
👉 supaya tidak merusak data asli

2. moodledata beda
Contoh:
/var/moodledata_a
/var/moodledata_b

3. config.php beda

Cek:
situs_a ; /var/www/situs_a/moodle/config.php
$CFG->dirroot = '/var/www/situs_a/moodle';

situs_b ; /var/www/situs_b/moodle/config.php
$CFG->dirroot = '/var/www/situs_b/moodle';

** SET PERMISSION
chown -R www-data:www-data /var/moodledata_a
chown -R www-data:www-data /var/moodledata_b

chmod -R 755 /var/moodledata_a
chmod -R 755 /var/moodledata_b

** CONFIG situs_a**
# cat /var/www/situs_a/moodle/config.php
<?php  // config.php

unset($CFG);
global $CFG;
$CFG = new stdClass();

// ----------------------
// Konfigurasi database
// ----------------------
$CFG->dbtype    = 'mariadb';
$CFG->dblibrary = 'native';
$CFG->dbhost    = 'localhost';
$CFG->dbname    = 'moodle_a';
$CFG->dbuser    = 'user_a';
$CFG->dbpass    = 'password_a';
$CFG->prefix    = 'mdl_';
$CFG->dboptions = array(
    'dbpersist' => 0,
    'dbport' => '',
    'dbsocket' => '',
    'dbcollation' => 'utf8mb4_unicode_ci',
);

// Jika Anda ingin paksa wwwroot tertentu, uncomment baris di bawah ini dan sesuaikan:
$CFG->wwwroot   = 'https://situs_a';
$CFG->sslproxy  = true;
//$CFG->reverseproxy = true;

// ----------------------
// Path Moodle
// ----------------------
//$CFG->dataroot  = '/var/moodledata';
$CFG->dataroot = '/var/moodledata_a';
$CFG->admin     = 'admin';

// Umum
$CFG->directorypermissions = 0777;

// Debugging (aktifkan sementara saat troubleshooting)
//@error_reporting(E_ALL | E_STRICT);
//@ini_set('display_errors', '1');
//$CFG->debug = (E_ALL | E_STRICT);
//$CFG->debugdisplay = 1;

require_once(__DIR__ . '/lib/setup.php');

==============================================================
** CONFIG situs-B **
==============================================================

# cat /var/www/situs_b/moodle/config.php
<?php  // config.php

unset($CFG);
global $CFG;
$CFG = new stdClass();

// ----------------------
// Konfigurasi database
// ----------------------
$CFG->dbtype    = 'mariadb';
$CFG->dblibrary = 'native';
$CFG->dbhost    = 'localhost';
$CFG->dbname    = 'moodle_b';
$CFG->dbuser    = 'moodluser_b';
$CFG->dbpass    = 'password_b';
$CFG->prefix    = 'mdl_';
$CFG->dboptions = array(
    'dbpersist' => 0,
    'dbport' => '',
    'dbsocket' => '',
    'dbcollation' => 'utf8mb4_unicode_ci',
);

// Jika Anda ingin paksa wwwroot tertentu, uncomment baris di bawah ini dan sesuaikan:
$CFG->wwwroot   = 'https://situs_b';
$CFG->sslproxy  = true;
//$CFG->reverseproxy = true;
// 🔥 TAMBAHKAN INI
$CFG->sessioncookie = 'MoodleSessionDEV';

// ----------------------
// Path Moodle
// ----------------------
//$CFG->dataroot  = '/var/moodledata';
$CFG->dataroot = '/var/moodledata_b';
$CFG->admin     = 'admin';

// Umum
$CFG->directorypermissions = 0777;

// Debugging (aktifkan sementara saat troubleshooting)
//@error_reporting(E_ALL | E_STRICT);
//@ini_set('display_errors', '1');
//$CFG->debug = (E_ALL | E_STRICT);
//$CFG->debugdisplay = 1;

require_once(__DIR__ . '/lib/setup.php');


=======================================
nginx site availabel
=======================================
# cat /etc/nginx/sites-available/situs_a
server {
    listen 80;
    listen [::]:80;
    server_name situs_a;

    root /var/www/situs_a/moodle;
    index index.php;

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

    location ~ \.php(/|$) {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;

        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    }
}


=============================
# cat /etc/nginx/sites-available/situs_b
server {
    listen 8080;
    server_name situs_b;

    root /var/www/situs_b/moodle;
    index index.php index.html;

    # 🔥 WAJIB untuk Moodle
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # 🔥 FIX utama (support slasharguments)
    location ~ [^/]\.php(/|$) {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;

        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    }

    # 🔥 Optional (biar static file lebih cepat)
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg)$ {
        expires max;
        log_not_found off;
    }
}

==================================================================
ln -s /etc/nginx/sites-available/situs_a /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/situs_b /etc/nginx/sites-enabled/

======================
nginx -t
systemctl reload nginx

Share:

0 comments:

Post a Comment