[Hackathon] Moodle-Modular Object-Oriented Dynamic Learning Environment Açık kaynak bir öğrenme yönetim sistemi (LMS) Üniversiteler, okullar, kurslar tarafından uzaktan eğitim, ders içerikleri paylaşımı, sınavlar, ödevler, forumlar gibi işlevler için kullanılıyor.

Savas Salvador salvadorsavas78 at gmail.com
Sat Oct 4 02:12:27 +03 2025


Rocky Linux release 9.6 (Blue Onyx)

4GB RAM / 512GB HDD

Moodle, Rocky Linux 9 üzerine Öğrenim Yönetim Sistemi'dir (LMS). Kurulum
adımları:
Adım 1: Sistemi Güncelleme

Öncelikle sisteminizin güncel olduğundan emin olun.

sudo dnf update -y

sudo dnf install epel-release -y

sudo dnf install http://rpms.remirepo.net/enterprise/remi-release-9.rpm -y

sudo dnf module reset php -y

sudo dnf module enable php:remi-8.2 -y

sudo dnf install wget curl nano unzip yum-utils -y

sudo dnf install git
Adım 2: Gerekli Yazılımların Kurulumu (LAMP Stack)

Moodle'un çalışması için bir web sunucusu (Apache), veritabanı (MariaDB) ve
PHP'ye ihtiyacımız var.

*1.    **Apache (httpd) Kurulumu:*

sudo dnf install httpd -y

sudo dnf install mod_ssl -y



sudo systemctl start httpd

sudo systemctl enable httpd

*2.    **MariaDB (Veritabanı) Kurulumu:*

sudo dnf install mariadb-server mariadb -y

sudo systemctl start mariadb

sudo systemctl enable mariadb

3.    *MariaDB Güvenlik Ayarları:* Aşağıdaki komutu çalıştırın ve ekrandaki
adımları izleyerek root şifresini belirleyin ve güvenlik ayarlarını yapın.



sudo nano /etc/yum.repos.d/MariaDB.repo

bu komut ile mariadb deposunu ekle

[mariadb]

name = MariaDB

baseurl = http://yum.mariadb.org/10.11/rhel9-amd64

module_hotfixes=1

gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

gpgcheck=1



sudo mysql_secure_installation bu komut işlemezse eğer aşağıdaki mariadb
ile devam et,

sudo dnf install mariadb-server -y

sudo mariadb-secure-installation

Set root password?: Y (A’daki gibi güçlü parola)
1q2w3eR4236951*-           OK

Remove anonymous users?: Y

Disallow root login remotely?: Y

Remove test database?: Y

Reload privilege tables now?: Y

4.    *PHP ve Gerekli Eklentilerin Kurulumu:* Moodle'un sorunsuz çalışması
için gerekli olan PHP modüllerini kurun.

sudo dnf install php php-mysqlnd php-gd php-intl php-xmlrpc php-soap
php-opcache php-sodium php-mbstring php-json -y

sudo dnf install php php-mysqlnd ... php-curl php-fpm -y

sudo dnf install php php-mysqlnd php-gd php-intl php-soap php-opcache
php-mbstring php-json php-curl php-fpm -y                          OK

sudo dnf install php php-mysqlnd php-gd php-intl php-soap php-opcache
php-sodium php-mbstring php-json php-zip php-curl php-fpm -y

sudo dnf install php php-mysqlnd php-gd php-intl php-xmlrpc php-soap
php-opcache php-sodium php-mbstring php-json php-zip php-curl php-fpm -y

sudo sed -i 's/max_input_vars = 1000/max_input_vars = 5000/' /etc/php.ini
Adım 3: Moodle için Veritabanı Oluşturma

1.    MariaDB'ye root olarak bağlanın (bir önceki adımda belirlediğiniz
şifre sorulacaktır):

mysql -u root -p

mariadb root ile giriş yap ve veritabanı ve kullanıcı şifrelerini oluştur.

2.    Aşağıdaki komutları sırasıyla çalıştırarak Moodle için bir
veritabanı, bir kullanıcı oluşturun ve yetkileri verin. GucluBirSifre!
kısmını kendi güvenli şifrenizle değiştirmeyi unutmayın.

SQL

CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE
utf8mb4_unicode_ci;

CREATE USER 'moodleuser'@'localhost' IDENTIFIED BY 'GucluBirSifre!R41q2w3e';

GRANT ALL PRIVILEGES ON moodle.* TO 'moodleuser'@'localhost';

FLUSH PRIVILEGES;

EXIT;



CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE
utf8mb4_unicode_ci;

CREATE USER 'salvador'@'localhost' IDENTIFIED BY 'GucluBirSifre!R41q2w3e';

GRANT ALL PRIVILEGES ON moodle.* TO 'salvador'@'localhost';

FLUSH PRIVILEGES;

EXIT;


Adım 4: Moodle'ı İndirme ve Kurma

1.    En güncel Moodle sürümünü indirin. (Güncel sürüm numarasını Moodle'un
indirme sayfasından <https://download.moodle.org/releases/latest/> kontrol
edebilirsiniz.)

cd /tmp

wget https://download.moodle.org/stable404/moodle-latest-404.tgz

cd /tmp

wget https://download.moodle.org/stable404/moodle-latest-404.tgz

wget
https://download.moodle.org/download.php/stable500/moodle-latest-500.tgz

burada wget ile indirim yapmadı kb bir dosya indirdi o yüzden sftp ile
ubuntu desktop bir makinada indirip oradan sunucunun /tmp dizinine attım.

sftp programı ile indirilen dosyayı sunucuya at.

2.    İndirilen arşivi açın ve web sunucusunun dizinine taşıyın:

tar -xvf moodle-latest-404.tgz



tar -xvf moodle-latest-500.tgz



sudo mv moodle /var/www/html/



sudo mv moodle /var/www/html/

3.    Moodle'un veri dosyalarını saklayacağı moodledata dizinini oluşturun:

sudo mkdir /var/www/moodledata

sudo mkdir /var/www/html/moodledata                       OK

4.    Dosya ve dizin izinlerini Apache'nin erişebileceği şekilde ayarlayın:

sudo chown -R apache:apache /var/www/html/moodle

sudo chown -R apache:apache /var/www/moodledata

sudo chmod -R 755 /var/www/html/moodle

sudo chmod -R 755 /var/www/moodledata
Adım 5: Güvenlik Duvarı ve SELinux Yapılandırması

1.    Web trafiğine (HTTP ve HTTPS) izin verin:

sudo firewall-cmd --permanent --add-service=http

sudo firewall-cmd --permanent --add-service=https

sudo firewall-cmd --reload

2.    SELinux'un Moodle dizinlerine erişimini sağlamak için bağlamları
güncelleyin (Bu adım, izin hatalarını önlemek için önemlidir):

sudo restorecon -Rv /var/www/html/moodle

sudo restorecon -Rv /var/www/html/moodledata/     OK
Adım 6: Web Arayüzü Üzerinden Kurulumu Tamamlama

Artık kurulumun son aşamasına hazırsınız.

1.    Web tarayıcınızı açın ve sunucunuzun IP adresini veya alan adını
yazarak Moodle kurulum sihirbazını başlatın: http://
<sunucu_ip_adresiniz>/moodle

2.    Karşınıza gelen ekranda sırasıyla:

•    *Dil seçimi:* Türkçe'yi seçip devam edin.

•    *Yol onayı:* Moodle ve moodledata yollarının doğru olduğunu teyit edin.

•    *Veritabanı sürücüsü:* "MariaDB"yi seçin.

•    *Veritabanı bilgileri:* 3. Adım'da oluşturduğunuz veritabanı adı (
moodle), kullanıcı adı (moodleuser) ve şifreyi (GucluBirSifre!) girin.

•    *Sunucu kontrolü:* Moodle, sunucunuzun gereksinimleri karşılayıp
karşılamadığını kontrol edecektir. Eksik bir eklenti varsa, Adım 2'deki PHP
kurulum komutuna ekleyerek kurmanız gerekebilir.

•    *Kurulum:* Sistem modülleri kurulacaktır.

•    *Yönetici hesabı:* Kendiniz için bir yönetici (admin) hesabı oluşturun.

Tüm bu adımları tamamladıktan sonra Moodle sisteminiz kullanıma hazır
olacaktır. Başarılar!



# online.zismdns.local yerine kendi alan adınızı yazın

sudo certbot --apache -d online.zismdns.local


Adım 1: Moodle Dosyalarını Taşıma ve İzinleri Ayarlama

Önceki kurulumda dosyaları /var/www/html/moodle dizinine koymuştuk. Şimdi
bunları alan adınıza özel bir dizine taşıyalım.

*1.    **Yeni Dizin Oluşturun:*

sudo mkdir -p /var/www/online.zismdns.local

*2.    **Moodle Dosyalarını Taşıyın:*

Bash

sudo mv /var/www/html/moodle/* /var/www/online.zismdns.local/

*3.    **Dosya Sahipliğini ve İzinlerini Tekrar Ayarlayın:*

Bash

sudo chown -R apache:apache /var/www/online.zismdns.local

sudo chmod -R 755 /var/www/online.zismdns.local

*Not: **moodledata** dizini aynı yerinde kalabilir (**/var/www/moodledata**),
onu taşımanıza gerek yok.*
Adım 2: Apache Virtual Host Yapılandırma Dosyası Oluşturma

Şimdi Apache'ye online.zismdns.local isteği geldiğinde hangi dosyaları
sunacağını söyleyeceğiz.

1.    *Yeni Bir Yapılandırma Dosyası Oluşturun:* nano veya tercih ettiğiniz
bir metin editörü ile yeni bir dosya açın.

sudo nano /etc/httpd/conf.d/online.zismdns.local.conf

2.    *Aşağıdaki İçeriği Dosyaya Yapıştırın:* Bu yapılandırma, gelen
istekleri doğru klasöre yönlendirecektir.

Apache

<VirtualHost *:80>

    ServerName online.zismdns.local

    DocumentRoot /var/www/online.zismdns.local



    <Directory /var/www/online.zismdns.local>

        Options Indexes FollowSymLinks

        AllowOverride All

        Require all granted

    </Directory>



    ErrorLog /var/log/httpd/online.zismdns.local-error.log

    CustomLog /var/log/httpd/online.zismdns.local-access.log combined

</VirtualHost>

Dosyayı kaydedip kapatın (Ctrl+X, sonra E ve Enter).
Adım 3: Moodle Yapılandırma Dosyasını (config.php) Güncelleme

Moodle'a yeni adresini bildirmemiz gerekiyor.

1.    *config.php** dosyasını açın:*

Bash

sudo nano /var/www/online.zismdns.local/config.php

2.    *wwwroot** Değişkenini Güncelleyin:* Dosyanın içinde aşağıdaki gibi
bir satır bulacaksınız: $CFG->wwwroot = 'http://
<sunucu_ip_adresiniz>/moodle';

Bu satırı yeni alan adınızla değiştirin: $CFG->wwwroot = '
http://online.zismdns.local';

Dosyayı kaydedip kapatın.
Adım 4: Apache'yi Yeniden Başlatma

Yaptığımız değişikliklerin aktif olması için Apache web sunucusunu yeniden
başlatın.

sudo systemctl restart httpd
Adım 1: Apache'yi Yeniden Başlatma ve Durum Kontrolü

Değişikliklerin uygulanması için Apache'nin yeniden başlatılması gerekir.
Bazen bu adım atlanabilir veya bir hata nedeniyle servis tam olarak yeniden
başlamayabilir.

1.    Servisi yeniden başlatın:

sudo systemctl restart httpd

2.    Servisin durumunu kontrol edin ve herhangi bir hata olup olmadığına
bakın:

sudo systemctl status httpd

Ekranda active (running) yazıyorsa ve kırmızı renkte hata mesajları yoksa
bir sonraki adıma geçin. Eğer bir hata varsa, hata mesajı bize sorunun ne
olduğu hakkında ipucu verecektir.
Adım 2: Apache Yapılandırma Dosyasını Kontrol Etme

En olası sebep, oluşturduğumuz .conf dosyasında bir yazım hatası olması
veya Apache'nin bu dosyayı hiç görmemesidir.

1.    *Yapılandırma Testi:* Apache'nin kendi yapılandırma test komutunu
çalıştırarak tüm .conf dosyalarında bir yazım hatası (syntax error) olup
olmadığını kontrol edelim. Bu, en önemli adımdır.

sudo apachectl configtest

Eğer çıktı olarak *Syntax OK* alıyorsanız, yapılandırma dosyanızda bir
yazım hatası yok demektir. Eğer bir hata veriyorsa, hangi dosyada ve hangi
satırda hata olduğunu size söyleyecektir.

2.    *Dosyanın İçeriğini Doğrulama:* Oluşturduğumuz dosyanın içeriğini
tekrar kontrol edelim. Belki bir harf hatası yapmış olabiliriz. Aşağıdaki
komutla dosyanın içeriğini görüntüleyin:

cat /etc/httpd/conf.d/online.zismdns.local.conf

Çıktının şununla tam olarak eşleştiğinden emin olun:

Apache

<VirtualHost *:80>

    ServerName online.zismdns.local

    DocumentRoot /var/www/online.zismdns.local



    <Directory /var/www/online.zismdns.local>

        Options Indexes FollowSymLinks

        AllowOverride All

        Require all granted

    </Directory>



    ErrorLog /var/log/httpd/online.zismdns.local-error.log

    CustomLog /var/log/httpd/online.zismdns.local-access.log combined

</VirtualHost>

Özellikle DocumentRoot yolunun doğru yazıldığından (
/var/www/online.zismdns.local) emin olun.
Adım 3: SELinux İzinleri

Bazen SELinux, Apache'nin belirli dizinlere erişimini engelleyebilir. Bu
genellikle "Forbidden" hatasına neden olur ama yine de kontrol etmekte
fayda var.

1.    Apache'nin ağ bağlantıları yapmasına izin verin (genellikle
varsayılan olarak açıktır ama emin olmak için):

sudo setsebool -P httpd_can_network_connect 1



*Özetle, lütfen sırasıyla şunları yapın:*

1.    sudo apachectl configtest komutunu çalıştırın.

2.    Eğer Syntax OK diyorsa, sudo systemctl restart httpd komutunu
çalıştırıp tarayıcıdan sayfayı yenileyin (gerekirse tarayıcı önbelleğini
temizleyin: Ctrl+F5).

3.    Eğer hala test sayfası geliyorsa, cat
/etc/httpd/conf.d/online.zismdns.local.conf komutunun çıktısını buraya
yapıştırın, birlikte kontrol edelim.



Adım 1: EPEL Deposunu Ekleme

Öncelikle EPEL (Extra Packages for Enterprise Linux) deposunu kuralım. Remi
deposu, EPEL'e ihtiyaç duyar.

Bash

sudo dnf install epel-release -y
Adım 2: Remi Deposunu Ekleme

Şimdi de PHP paketleri için zengin bir kaynak olan Remi deposunu
sistemimize ekleyelim.

Bash

sudo dnf install http://rpms.remirepo.net/enterprise/remi-release-9.rpm -y
Adım 3: php-sodium Paketini Tekrar Kurma

Artık sistemimiz yeni paket kaynaklarını tanıdığına göre, daha önce
çalışmayan komut *şimdi çalışacaktır*.

sudo dnf install php-sodium -y

Bu komutu çalıştırdığınızda, dnf paket yöneticisi php-sodium paketini Remi
deposunda bulacak ve başarıyla kuracaktır.


Son Adım: Servisleri Yeniden Başlatma

Unutmayın, yeni bir PHP eklentisi kurduktan sonra değişikliklerin geçerli
olması için Apache'yi yeniden başlatmanız gerekir. Önceki adımdaki php.ini
değişikliklerinizin de geçerli olması için bu gereklidir.

Bash

sudo systemctl restart httpd

Bu adımlardan sonra Moodle kurulum sayfasını yenilediğinizde php-sodium
hatası da ortadan kalkacaktır.



root at egitim //]# sudo dnf install php-sodium -y

Remi's Modular repository for Enterprise Linux 9 - x86 757 kB/s | 876 kB
 00:01

Safe Remi's RPM repository for Enterprise Linux 9 - x8 1.8 MB/s | 1.4 MB
 00:00

Last metadata expiration check: 0:00:01 ago on Tue 30 Sep 2025 08:05:56 AM
+03.

Error:

 Problem: package php-sodium-8.0.30-2.el9.x86_64 from epel requires
php(api) = 20200930-64, but none of the providers can be installed

  - package php-sodium-8.0.30-2.el9.x86_64 from epel requires php(zend-abi)
= 20200930-64, but none of the providers can be installed

  - conflicting requests

  - package php-common-8.0.30-13.el9.remi.x86_64 from remi-modular is
filtered out by modular filtering

  - package php-common-8.0.30-14.el9.remi.x86_64 from remi-modular is
filtered out by modular filtering

  - package php-common-8.0.30-3.el9_6.x86_64 from appstream is filtered out
by modular filtering

(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to
use not only best candidate packages)

Düşünme sürecini göster

Bu karmaşık hata, Rocky Linux'un *modülerlik* özelliğinden kaynaklanıyor.
Özetle, sisteminizde birden fazla PHP kaynağı (hem Rocky'nin kendi
varsayılan PHP 8.0'ı hem de yeni eklediğimiz Remi deposunun PHP sürümleri)
olduğu için dnf paket yöneticisinin kafası karışmış durumda ve hangi paketi
seçeceğini bilemiyor. Buna "modular filtering" deniyor.

Doğru çözüm, sisteme tek ve tutarlı bir PHP sürümü kullanmasını
söylemektir. Bunu yapmak için PHP modülünü sıfırlayıp, Remi'nin kararlı ve
güncel bir sürümünü seçeceğiz.


Çözüm: PHP Modülünü Sıfırlayıp Remi Sürümünü Etkinleştirme Adım 1: Mevcut
PHP Modülünü Sıfırlama

Bu komut, dnf'in hangi PHP sürümüne kilitlendiğini unutmasını sağlar ve
temiz bir başlangıç yapmamıza olanak tanır.

sudo dnf module reset php -y
Adım 2: Remi'nin PHP 8.2 Modülünü Etkinleştirme

Bu komutla, sisteme bundan sonra tüm PHP paketlerini Remi deposundaki
modern ve stabil olan *PHP 8.2* sürümünden almasını söylüyoruz. Bu, tüm
paketlerin birbiriyle uyumlu olmasını garantiler.

sudo dnf module enable php:remi-8.2 -y
Adım 3: PHP Paketlerini Yeni Sürüme Yükseltme

Yeni PHP modülünü etkinleştirdiğimize göre, mevcut tüm PHP paketlerinizi
yeni ve tutarlı sürüme yükseltmek için sistemi güncelleyelim.

Bash

sudo dnf update -y

Bu işlem sırasında mevcut PHP 8.0 paketlerinizin kaldırılıp yerine PHP 8.2
paketlerinin kurulduğunu göreceksiniz.
Adım 4: php-sodium Paketini Kurma

Artık sistemimiz temiz ve tek bir PHP kaynağına odaklandığı için, php-sodium
paketini sorunsuzca kurabiliriz.

sudo dnf install php-sodium -y
Son Adım: Servisi Yeniden Başlatma

Tüm bu işlemlerden sonra, Apache'nin yeni PHP sürümünü ve eklentileri
yüklemesi için servisi yeniden başlatın.

sudo systemctl restart httpd

Bu adımlardan sonra hem php-sodium kurulmuş olacak hem de sisteminiz Moodle
için daha güncel ve stabil bir PHP sürümüne sahip olacaktır. Kurulum
ekranını yenilediğinizde tüm hataların çözüldüğünü görebilirsiniz.

Yeni pencerede açılır
<https://lens.google.com/uploadbyurl?url=https://lh3.googleusercontent.com/gg/AAHar4eOhCySvnXNavhDc9aailBX9T-COTGWvaGS5YmNnZ03ubgdW6dCahCWwQWpLWMQLUpqXi8TdAvvg2hN7tZaQT86fpWf98fJmnbTncGFQvHx0gcKaYjO89HxAqGJlLttINx6m8pMuOnonbMTDPhwJb-IaBGuNlePY6OooyKdzkX1zvyuXyi5tS8iZHXaJJAzGEHIQaStHSbSNxDkgRkVIzLa8o61MfsUnvU2wq9gCBtFbXp-PrWke8hOoaO6cCrtu-ljwcY_-uoUY5buEsM8Q3jvSXm91b1c7cg=d&ep=bia>

Düşünme sürecini göster

Harika, neredeyse bitti! Gördüğünüz gibi bir önceki adımdaki karmaşık
hataların hepsi çözüldü. Sadece iki küçük ayar kaldı.

Bu kalan iki sorun da PHP yapılandırmasıyla ilgili ve tek seferde
çözülebilir.


Kalan Son İki Sorunu Çözme 1. max_input_vars Ayarı

Bu ayarı daha önce yapmıştık ancak PHP sürümünü yükselttiğimizde php.ini
dosyası sıfırlanmış olabilir. Ayarı tekrar yapalım.

1.    Terminalde php.ini dosyasını açın:

sudo nano /etc/php.ini

2.    Dosya içinde max_input_vars satırını bulun (Ctrl+W ile
aratabilirsiniz).

3.    Satırın tam olarak aşağıdaki gibi olduğundan emin olun (başında *noktalı
virgül (;) olmamalı*): max_input_vars = 5000

4.    Dosyayı kaydedip kapatın (Ctrl+X, E, Enter).
2. sodium Eklentisinin Yüklenmesi

sodium eklentisini kurduk ancak PHP servisinin bu yeni eklentiyi tanıması
için yeniden başlatılması gerekiyor. Apache'yi yeniden başlatmak bazen
yeterli olmaz, PHP'nin kendi servisini de yeniden başlatmak gerekir.
Değişiklikleri Uygulama (En Önemli Adım)

Yukarıdaki php.ini değişikliğini yaptıktan sonra, hem Apache'yi hem de
PHP-FPM servisini yeniden başlatarak tüm değişiklikleri uygulayalım.

*1.    **Apache'yi yeniden başlatın:*

sudo systemctl restart httpd

2.    *PHP 8.2-FPM servisini yeniden başlatın:* (Bu komut, sodium
eklentisini ve php.ini değişikliklerini yükleyecektir)

sudo systemctl restart php82-php-fpm

Bu iki yeniden başlatma komutundan sonra tarayıcınızdaki Moodle sayfasını
yenileyin. Kalan son iki kırmızı uyarının da yeşile döndüğünü göreceksiniz.
✅ Artık kuruluma devam edebilirsiniz!

Yeni pencerede açılır
<https://lens.google.com/uploadbyurl?url=https://lh3.googleusercontent.com/gg/AAHar4d2prnOiXhMeL2v4_afkWtBTjX-3G-SRSvT4FK8XwB1rXId7YaGBrFX9nRwdURSXo50KT9yTcGF8rX3DVrT5C3bPg7qw_dsWojEzvZXi7eU1LhLLJu4XIOimFRyvjVMiSXNPHBV4a8QfYOLv5TO-kc2l4_CasdiA6Edzl5zX_eqk1kOi8u-1Ns3vZsE_u1RuIVC6pO0tvdKONN40qn5Yfb4MlCLdrOFYi6ZjGYH02TxXYlSo6YHXzGs1YypsQTeroqvnSTUK5tLso5iIf-6Yyw8CCAtB23nKA=d&ep=bia>

mariadb 10.11.0 gerekli diyor

Düşünme sürecini göster

Evet, doğru gördünüz. Moodle'un en son sürümü (5.x), Rocky Linux 9'un
standart olarak sunduğu MariaDB 10.5'ten daha yeni bir sürüm olan *MariaDB
10.11 veya üstünü* gerektiriyor.

Neyse ki, tıpkı PHP'de yaptığımız gibi, MariaDB'nin kendi resmi deposunu
(repository) ekleyerek veritabanı sürümümüzü kolayca yükseltebiliriz.


!! ADIM 0: VERİTABANINI YEDEKLEME (ÇOK ÖNEMLİ) !!

Herhangi bir veritabanı yükseltme işleminden önce yedek almak *kritik bir
alışkanlıktır*. Henüz kurulumunuz yeni olsa da bu adımı mutlaka uygulayın.

1.    Aşağıdaki komutu çalıştırarak tüm veritabanlarınızın yedeğini /tmp
dizinine alın. Komutu çalıştırdığınızda sizden MariaDB root şifrenizi
isteyecektir.

sudo mysqldump -u root -p --all-databases > /tmp/tum_veritabani_yedegi.sql
Adım 1: MariaDB'nin Resmi Deposunu Ekleme

Sistemimize MariaDB 10.11 sürümünü içeren repo dosyasını ekleyeceğiz.

1.    nano ile yeni bir repo dosyası oluşturun:

sudo nano /etc/yum.repos.d/MariaDB.repo

2.    Aşağıdaki içeriği kopyalayıp bu dosyanın içine yapıştırın:

Ini, TOML

[mariadb]

name = MariaDB

baseurl = http://yum.mariadb.org/10.11/rhel9-amd64

module_hotfixes=1

gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

gpgcheck=1

3.    Dosyayı kaydedip kapatın (Ctrl+X, E, Enter).


Adım 2: Varsayılan MariaDB Modülünü Devre Dışı Bırakma

Paket çakışmasını önlemek için Rocky'nin kendi MariaDB 10.5 modülünü devre
dışı bırakmamız gerekiyor.

sudo dnf module disable mariadb -y
Adım 3: MariaDB Paketlerini Yükseltme

Artık sistemi güncelleyebiliriz. dnf paket yöneticisi, yeni eklediğimiz
MariaDB deposundan 10.11 sürümünü bulacak ve mevcut 10.5 sürümünü onunla
yükseltecektir.

sudo dnf update -y
Adım 4: Veritabanı Servisini Başlatma ve Yükseltme

Yükseltme sonrası veritabanı dosyalarının yeni sürüme uyumlu hale
getirilmesi için son bir komut çalıştırmalıyız.

1.    Önce MariaDB servisini yeniden başlatalım:

sudo systemctl restart mariadb













[root at egitim tmp]# cat /etc/redhat-release

Rocky Linux release 9.6 (Blue Onyx)

Moodle 5.0

Mariadb 10.11

PHP 8.2

Online Eğitim Sistemi Moodle Kurulum Adımları:

rocky9 da moodle 5.0 kurulumu yapalım mariadb 10.11 php 8.2 olsun https
olsun
ChatGPT said:

Tamam, Rocky Linux 9 üzerinde Moodle 5.0’ı MariaDB 10.11 ve PHP 8.2 ile,
HTTPS dâhil olacak şekilde kurulum adımlarını net ve “kopyala-yapıştır”
tarzında anlatıyorum. Apache + PHP-FPM + SELinux uyumlu bir kurulum tercih
ettim (R9’da mod_php yerine php-fpm sağlıklıdır). İstersen Nginx varyantını
da ayrıca veririm.


0) Sunucu hazırlığı

sudo dnf -y update

sudo dnf -y install epel-release

sudo dnf -y install policycoreutils-python-utils setools-console firewalld
tar unzip

sudo systemctl enable --now firewalld

Not: SELinux Enforcing kalacak; gerekli context/boole’leri aşağıda
veriyorum.


1) PHP 8.2 (Remi ile)

Rocky 9’un varsayılan PHP’si 8.0’dır; 8.2 için Remi modülünü
etkinleştiriyoruz.

# Remi deposu

sudo dnf -y install https://rpms.remirepo.net/enterprise/remi-release-9.rpm



# Varsayılan PHP modülünü sıfırla ve 8.2’yi etkinleştir

sudo dnf -y module reset php

sudo dnf -y module enable php:remi-8.2



# Moodle için gerekli PHP paketleri

sudo dnf -y install php php-fpm php-opcache php-gd php-intl php-mbstring
php-zip php-xml \

                    php-curl php-ldap php-soap php-xmlrpc php-json php-pdo
php-mysqlnd \

                    php-pecl-igbinary php-pecl-redis

PHP-FPM’yi başlat/enable:

sudo systemctl enable --now php-fpm

sudo systemctl status php-fpm --no-pager

OPcache ayarı (performans için önerilir):

sudo tee /etc/php.d/10-opcache.ini >/dev/null <<'EOF'

opcache.enable=1

opcache.enable_cli=1

opcache.memory_consumption=256

opcache.interned_strings_buffer=16

opcache.max_accelerated_files=100000

opcache.validate_timestamps=1

opcache.revalidate_freq=30

EOF

sudo systemctl restart php-fpm


2) MariaDB 10.11 (resmi repo)

Rocky 9’un deposundaki MariaDB 10.5 yerine 10.11 istiyoruz.

sudo tee /etc/yum.repos.d/MariaDB.repo >/dev/null <<'EOF'

# MariaDB 10.11 for RHEL9/Rocky9

[mariadb]

name = MariaDB

baseurl = https://mirrors.xtom.com/mariadb/yum/10.11/rhel/9/x86_64/

gpgkey=https://mariadb.org/mariadb_release_signing_key.pgp

gpgcheck=1

enabled=1

EOF



sudo dnf -y install MariaDB-server MariaDB-client

sudo systemctl enable --now mariadb

sudo systemctl status mariadb --no-pager

İlk güvenlik ve root şifreleme:

MariaDB 10.11’de komut adı genellikle mariadb-secure-installation’dır.
mysql_secure_installation bulunamazsa şaşırma, aşağıdakini kullan.

sudo mariadb-secure-installation

Önerilen karakter seti/innodb ayarı (utf8mb4 için):

sudo tee -a /etc/my.cnf.d/server.cnf >/dev/null <<'EOF'



[mysqld]

character-set-server = utf8mb4

collation-server     = utf8mb4_unicode_ci

innodb_file_per_table = 1

EOF



sudo systemctl restart mariadb









Set root password?: Y (A’daki gibi güçlü parola)
1q2w3eR4236951*-           OK

Remove anonymous users?: Y

Disallow root login remotely?: Y

Remove test database?: Y

Reload privilege tables now?: Y

Moodle DB ve kullanıcı oluşturma:

# MariaDB shell

sudo mariadb -u root -p



CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE
utf8mb4_unicode_ci;

CREATE USER 'salvador'@'localhost' IDENTIFIED BY 'GucluBirSifre!R41q2w3e';

GRANT ALL PRIVILEGES ON moodle.* TO 'salvador'@'localhost';

FLUSH PRIVILEGES;

EXIT;
3) Apache (httpd) + PHP-FPM entegrasyonu

sudo dnf -y install httpd mod_ssl

sudo systemctl enable --now httpd

Apache’yi php-fpm socket ile konuştur:

sudo tee /etc/httpd/conf.d/php-fpm.conf >/dev/null <<'EOF'

# PHP-FPM ile FPM socket üzerinden entegrasyon

<FilesMatch \.php$>

    SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost/"

</FilesMatch>



# Büyük dosya yüklemeleri için (Moodle paket/ yedek)

LimitRequestBody 0

EOF



sudo systemctl reload httpd
4) Moodle dosyaları ve moodledata

Varsayılan web kökü: /var/www/html. Moodle çekirdeğini buraya indirelim.
moodledata web kökü dışında olmalı (ör.: /var/moodledata).

cd /tmp

# Moodle 5.0 stable (git kullanmak temizdir)

sudo dnf -y install git

sudo git clone -b MOODLE_500_STABLE https://github.com/moodle/moodle.git



# Uygulama dosyaları

sudo rsync -a moodle/ /var/www/html/moodle/



# moodledata

sudo mkdir -p /var/moodledata



# Sahiplik/izinler (Apache = apache:apache)

sudo chown -R apache:apache /var/www/html/moodle /var/moodledata

sudo find /var/www/html/moodle -type f -exec chmod 0644 {} \;

sudo find /var/www/html/moodle -type d -exec chmod 0755 {} \;

sudo chmod -R 0770 /var/moodledata

SELinux context:

# Web sunucusunun yazacağı yerler

sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/moodledata(/.*)?"

sudo semanage fcontext -a -t httpd_sys_rw_content_t
"/var/www/html/moodle(/.*)?"

sudo restorecon -Rv /var/moodledata /var/www/html/moodle



# Apache’nin network’e çıkabilmesi (gerekirse)

sudo setsebool -P httpd_can_network_connect on

Apache sanal host (HTTP → HTTPS yönlendirmeli):
Alan adın: moodle.example.gov.tr (kendi FQDN’inle değiştir).

sudo tee /etc/httpd/conf.d/moodle.conf >/dev/null <<'EOF'

<VirtualHost *:80>

    ServerName moodle.example.gov.tr

    ServerAlias www.moodle.example.gov.tr

    DocumentRoot /var/www/html/moodle

    # Tüm HTTP isteklerini HTTPS'e yönlendir

    RewriteEngine On

    RewriteCond %{HTTPS} !=on

    RewriteRule ^/?(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

</VirtualHost>



<VirtualHost *:443>

    ServerName moodle.example.gov.tr

    ServerAlias www.moodle.example.gov.tr

    DocumentRoot /var/www/html/moodle



    SSLEngine on

    SSLCertificateFile /etc/ssl/moodle.crt

    SSLCertificateKeyFile /etc/ssl/moodle.key

    # Eğer Let’s Encrypt kullanırsan cert dosya yolları farklı olacak
(aşağıda)



    <Directory /var/www/html/moodle>

        AllowOverride All

        Require all granted

    </Directory>



    # PHP-FPM entegrasyonu

    <FilesMatch \.php$>

        SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost/"

    </FilesMatch>



    ErrorLog  /var/log/httpd/moodle_error.log

    CustomLog /var/log/httpd/moodle_access.log combined

</VirtualHost>

EOF



sudo systemctl reload httpd

Firewall:

sudo firewall-cmd --permanent --add-service=http

sudo firewall-cmd --permanent --add-service=https

sudo firewall-cmd --reload
5) HTTPS seçenekleri A) Yayın adresi dışarı açık ve geçerli DNS var ise
(Let’s Encrypt önerilir)

sudo dnf -y install certbot python3-certbot-apache

sudo certbot --apache -d moodle.example.gov.tr -d www.moodle.example.gov.tr
--agree-tos -m admin at example.gov.tr --redirect -n

# Sertifikalar /etc/letsencrypt/live/moodle.example.gov.tr/ altında olur.

# Apache conf’ta SSLCertificate yollarını düzenlemeye gerek yok; certbot
kendisi ekler.

sudo systemctl reload httpd
B) İç ağ (intranet) ve public doğrulama yoksa (self-signed)

sudo openssl req -x509 -nodes -newkey rsa:4096 -sha256 -days 825 \

  -keyout /etc/ssl/moodle.key -out /etc/ssl/moodle.crt \

  -subj "/C=TR/ST=Zonguldak/L=Zonguldak/O=Hospital/OU=IT/CN=moodle.local"

sudo chmod 600 /etc/ssl/moodle.key

sudo systemctl reload httpd
6) PHP upload/post limitleri (Moodle yedek/SCORM için önemli)

sudo cp /etc/php.ini /etc/php.ini.bak.$(date +%F)

sudo sed -i 's/^upload_max_filesize = .*/upload_max_filesize = 128M/'
/etc/php.ini

sudo sed -i 's/^post_max_size = .*/post_max_size = 128M/' /etc/php.ini

sudo sed -i 's/^;date.timezone =.*/date.timezone = Europe\/Istanbul/'
/etc/php.ini

sudo systemctl restart php-fpm

sudo systemctl reload httpd
7) Moodle web kurulum sihirbazı

Tarayıcıdan:

https://moodle.example.gov.tr

•    Data directory: /var/moodledata

•    Database type: MariaDB (mysqli)

•    DB host: localhost

•    DB name: moodle

•    DB user/pass: moodleuser / (yukarıda verdiğin parola)

•    Şema/charset: utf8mb4 (varsayılan uygundur).

Kurulum bitince config.php otomatik oluşur. (Gerekirse
/var/www/html/moodle/config.php izinleri kontrol et.)
8) Cron (Moodle zorunlu)

sudo tee /etc/cron.d/moodle >/dev/null <<'EOF'

*/1 * * * * apache /usr/bin/php -f /var/www/html/moodle/admin/cli/cron.php
>/dev/null 2>&1

EOF
9) Önemli SELinux/izin hataları için hızlı kontrol

•    moodledata httpd_sys_rw_content_t context’inde mi?

•              ls -Zd /var/moodledata

•    Apache error log:

•              tail -f /var/log/httpd/moodle_error.log

•    MariaDB servis durumun bozulursa:

•              sudo journalctl -xeu mariadb

mysql_secure_installation: command not found hatası alırsan
mariadb-secure-installation kullan.
10) Performans ve ölçek ipuçları (opsiyonel ama önerilir)

•    Redis session/store:

•              sudo dnf -y install redis

sudo systemctl enable --now redis

# Moodle’da Site yönetimi > Sunucu > Önbellekleme’den Redis’i etkinleştir.

•    OPcache zaten aktif. PHP-FPM pm ayarını kullanıcı sayına göre ayarla:

•              sudo editor /etc/php-fpm.d/www.conf

# pm = dynamic

# pm.max_children = 20   # CPU/RAM’e göre artır

# pm.start_servers = 4

# pm.min_spare_servers = 4

# pm.max_spare_servers = 10

sudo systemctl restart php-fpm


Saha tecrübesi notları (20 yılın özeti 😉)

•    R9 + Remi + MariaDB resmi repo kombinasyonu en az sorun çıkaran set.

•    SELinux kapatmayın; doğru context/boole ile stabil ve güvenli çalışır.

•    moodledata kesinlikle webroot dışında ve yazılabilir olmalı.

•    Kurum içi ortamda HTTPS için self-signed yeter; istemci sertifikasını
dağıtmayı unutmayın.

•    Yedekleme: DB dump + moodledata rsync + kod dizini (git) üçlüsüyle soğuk
yedek planlayın.


1) En hızlı çözüm (mod_ssl’in varsayılan “localhost” sertifikasını kullan)

Test/lab veya intranet için yeterli.

# Mevcut conf'taki yanlış yolları varsayılanlarla değiştir

sudo sed -i 's|^ *SSLCertificateFile .*|SSLCertificateFile
/etc/pki/tls/certs/localhost.crt|' /etc/httpd/conf.d/moodle.conf

sudo sed -i 's|^ *SSLCertificateKeyFile .*|SSLCertificateKeyFile
/etc/pki/tls/private/localhost.key|' /etc/httpd/conf.d/moodle.conf



# Yapılandırma testi

sudo apachectl -t



# Başlat

sudo systemctl enable --now httpd

sudo systemctl status httpd --no-pager


2) Kendi self-signed sertifikanı üret (intranet FQDN’inle)

Tarayıcılarda “güvenilir değil” uyarısı çıkar; CA dağıtımı yaparsan
çözersin.

sudo openssl req -x509 -nodes -newkey rsa:4096 -sha256 -days 825 \

  -keyout /etc/ssl/moodle.key -out /etc/ssl/moodle.crt \

  -subj
"/C=TR/ST=Zonguldak/L=Zonguldak/O=Hospital/OU=IT/CN=moodle.egitim.local"



sudo chmod 600 /etc/ssl/moodle.key



# conf içindeki yollar self-signed dosyalarına işaret etmeli

sudo sed -i 's|^ *SSLCertificateFile .*|SSLCertificateFile
/etc/ssl/moodle.crt|' /etc/httpd/conf.d/moodle.conf

sudo sed -i 's|^ *SSLCertificateKeyFile .*|SSLCertificateKeyFile
/etc/ssl/moodle.key|' /etc/httpd/conf.d/moodle.conf



sudo apachectl -t

sudo systemctl restart httpd


3) Let’s Encrypt (gerçek DNS ve dış erişim varsa)

# Domain: moodle.example.gov.tr ise kendine göre değiştir

sudo dnf -y install certbot python3-certbot-apache

sudo certbot --apache -d moodle.example.gov.tr -d www.moodle.example.gov.tr
--agree-tos -m admin at example.gov.tr --redirect -n



sudo systemctl restart httpd

certbot konfigi otomatik günceller; SSLCertificateFile satırlarını ellemene
gerek kalmaz.


Servis kalkmıyorsa teşhis

sudo apachectl -t            # Syntax check

sudo httpd -S                # VHost ve isim çözünürlüğü

sudo journalctl -xeu httpd   # Systemd günlükleri

sudo tail -n 200 /var/log/httpd/error_log

Not: Buradaki hata SELinux değil; dosya yokluğu. SELinux’u kapatma—gerekli
context’leri zaten ayarlamıştık.


Ek kontrol listesi

•    mod_ssl yüklü mü? → sudo dnf -y install mod_ssl

•    443/tcp açık mı? → sudo firewall-cmd --permanent --add-service=https
&& sudo firewall-cmd --reload

•    moodle.conf içinde hem :80 hem :443 blokları var; 80 → 443
yönlendirmesi RewriteEngine ile yapılıyor. RHEL’de mod_rewrite varsayılan
yüklenir.
Seçenek A — Hemen ayağa kaldır (Rocky’nin varsayılan “localhost”
sertifikasıyla)

Bunu yaparsan site HTTPS’te çalışır; tarayıcıda uyarı görebilirsin (lab
için yeter).

sudo sed -i 's|^ *SSLCertificateFile .*|SSLCertificateFile
/etc/pki/tls/certs/localhost.crt|' /etc/httpd/conf.d/moodle.conf

sudo sed -i 's|^ *SSLCertificateKeyFile .*|SSLCertificateKeyFile
/etc/pki/tls/private/localhost.key|' /etc/httpd/conf.d/moodle.conf



sudo apachectl -t

sudo systemctl restart httpd

sudo systemctl status httpd --no-pager


Seçenek B — Kendi self-signed sertifikan (intranet FQDN’inle)

sudo openssl req -x509 -nodes -newkey rsa:4096 -sha256 -days 825 \

  -keyout /etc/ssl/moodle.key -out /etc/ssl/moodle.crt \

  -subj
"/C=TR/ST=Zonguldak/L=Zonguldak/O=Hospital/OU=IT/CN=online.zismdns.local"



sudo chmod 600 /etc/ssl/moodle.key



# (İsteğe bağlı) SELinux context:

sudo semanage fcontext -a -t httpd_config_t "/etc/ssl/moodle\.crt"

sudo semanage fcontext -a -t httpd_config_t "/etc/ssl/moodle\.key"

sudo restorecon -v /etc/ssl/moodle.crt /etc/ssl/moodle.key



sudo apachectl -t

sudo systemctl restart httpd


Ufak temizlik ve öneriler

•    ServerAlias online.zismdns.local satırı gereksiz (ServerName ile
aynı). İstersen www ya da alternatif ad ekleyebilirsin.

•    :80 blokta redirect için mod_rewrite yerine daha sade bir yöntem de
kullanabilirsin:

•              <VirtualHost *:80>

  ServerName online.zismdns.local

  DocumentRoot /var/www/html/moodle

  Redirect permanent / https://online.zismdns.local/

</VirtualHost>

(Bu, mod_alias ile gelir; konfig daha yalın olur.)

•    HTTP/2 istersen (opsiyonel, mod_http2 kuruluysa):

•              Protocols h2 http/1.1

satırını 443 vhost içine ekleyebilirsin.


Hızlı kontrol komutları

sudo apachectl -t                 # Syntax testi

sudo journalctl -xeu httpd        # Servis logu

sudo tail -n 200 /var/log/httpd/moodle_error.log

Eğer hâlâ kalkmazsa, komutların çıktısını aynen paylaş; satır/satır teşhis
edelim. Ayrıca PHP-FPM soket yolu /run/php-fpm/www.sock mevcutsa sorun yok;
değilse ls -l /run/php-fpm/ ile kontrol edelim.

[root at egitim tmp]# cat /etc/httpd/conf.d/moodle.conf

<VirtualHost *:80>

    ServerName online.zismdns.local

    ServerAlias online.zismdns.local

    DocumentRoot /var/www/html/moodle

    # Tüm HTTP isteklerini HTTPS'e yönlendir

    RewriteEngine On

    RewriteCond %{HTTPS} !=on

    RewriteRule ^/?(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

    Redirect permanent / https://online.zismdns.local/

</VirtualHost>



<VirtualHost *:443>

    ServerName online.zismdns.local

    ServerAlias online.zismdns.local

    DocumentRoot /var/www/html/moodle

    SSLEngine on

SSLCertificateFile /etc/pki/tls/certs/localhost.crt

SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

Protocols h2 http/1.1

    # Eğer Let’s Encrypt kullanırsan cert dosya yolları farklı olacak
(aşağıda)



    <Directory /var/www/html/moodle>

        AllowOverride All

        Require all granted

    </Directory>



    # PHP-FPM entegrasyonu

    <FilesMatch \.php$>

        SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost/"

    </FilesMatch>



    ErrorLog  /var/log/httpd/moodle_error.log

    CustomLog /var/log/httpd/moodle_access.log combined

</VirtualHost>

Şu an konfigürasyon dosyan teknik olarak doğru görünüyor, ama Apache
kalkmıyorsa sebep %99 SSL sertifika yolları.

Senin moodle.conf’taki:

SSLCertificateFile /etc/ssl/moodle.crt

SSLCertificateKeyFile /etc/ssl/moodle.key

Ama bu dosyalar yoksa Apache hiç başlamaz (senin ilk hatanda gördüğümüz
gibi).



✅ Çözüm adımların:
1. Dosyaların var mı kontrol et

ls -l /etc/ssl/moodle.*

Eğer No such file diyorsa, sertifika üretmen veya var olanı kullanman lazım.
2. Test için self-signed sertifika üret

sudo openssl req -x509 -nodes -newkey rsa:2048 -days 365 \

 -keyout /etc/ssl/moodle.key -out /etc/ssl/moodle.crt \

 -subj
"/C=TR/ST=Zonguldak/L=Zonguldak/O=Hospital/OU=IT/CN=online.zismdns.local"



sudo chmod 600 /etc/ssl/moodle.key
3. Apache syntax test

sudo apachectl -t

Syntax OK görmen lazım.
4. Servisi yeniden başlat

sudo systemctl restart httpd

sudo systemctl status httpd --no-pager
5. (Alternatif – hızlı çözüm) Rocky’nin hazır default sertifikalarını kullan

Eğer uğraşma dersen, moodle.conf’ta yolları değiştir:

SSLCertificateFile /etc/pki/tls/certs/localhost.crt

SSLCertificateKeyFile /etc/pki/tls/private/localhost.key



🔍 Soru: Bu sistemi intranet (sadece içeriden) mi kullanacaksın yoksa dış
dünyaya da açacak mısın?

•    İntranet ise self-signed yeter.

•    Dışarıya açacaksan Let’s Encrypt kullanmanı öneririm, otomatik yeniler.

İstersen ben sana Let’s Encrypt komutlarını da hazır vereyim. İhtiyacın
olan senaryo hangisi?
You said: ChatGPT said:

Görüntüde Moodle kurulum ekranındasın 👍 ve hata şu:

Ana klasör (/var/www/html) yazılabilir değil.

Veri Klasörü (/var/www/html/moodledata) kurulum tarafından oluşturulamıyor.

🔴 Problem:

•    Sen moodledata dizinini /var/www/html altında göstermişsin.

•    Moodle’ın data directory’si web kökünün dışında olmalı (güvenlik için).

•    Ayrıca Apache (apache kullanıcısı) yazabilmeli.



✅ Çözüm:
1. Moodle data dizinini webroot dışına taşı

sudo mkdir -p /var/moodledata

sudo chown -R apache:apache /var/moodledata

sudo chmod -R 770 /var/moodledata
2. SELinux context ayarla

sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/moodledata(/.*)?"

sudo restorecon -Rv /var/moodledata
3. Kurulum ekranında yolu düzelt

Formda Veritabanı dizini satırına şunu yaz:

/var/moodledata



💡 Notlar:

•    /var/www/html/moodle → sadece Moodle’ın PHP kodları.

•    /var/moodledata → Moodle’ın dosya, cache, session, upload ettiği her
şey.

•    Bu dizin webden erişilebilir olmamalı, aksi halde güvenlik açığı olur.



👉 Şimdi Sonraki dediğinde hata kalkmalı.

İstersen ben sana config.php içine data directory’yi nasıl sabitleriz onu
da gösterebilirim. İstiyor musun?

Harika, Moodle kurulumunda Veritabanı bağlantı hatası aşamasına gelmişsin.

Ekrandaki hata:

Warning: mysqli::__construct(): (HY000/2002): Permission denied

Bu çok tipik bir durum:

•    localhost yazınca PHP, MariaDB’ye Unix socket üzerinden bağlanmaya
çalışıyor.

•    Ama php-fpm Apache altında apache kullanıcısı ile çalışıyor → bu
kullanıcı MariaDB socket dosyasına erişemiyor.



✅ Çözüm yolları:
1. localhost yerine 127.0.0.1 kullan

Formda “Veritabanı sunucusu” alanını şu şekilde değiştir:

127.0.0.1

Bu durumda bağlantı TCP üzerinden olur, socket izin problemi yaşamazsın.


2. Eğer socket üzerinden bağlanmak istersen

Socket’in yolunu bul:

mariadb -u root -p -e "SHOW VARIABLES LIKE 'socket';"

Genelde /var/lib/mysql/mysql.sock olur.

Sonra Moodle kurulum ekranında “Unix soketi” alanına bu yolu yazabilirsin.


3. MariaDB kullanıcı izinlerini kontrol et

MariaDB’ye root ile bağlan:

sudo mariadb -u root -p

Kullanıcıyı yeniden oluştur ve yetkiyi ver:

DROP USER IF EXISTS 'salvador'@'localhost';

CREATE USER 'salvador'@'%' IDENTIFIED BY 'GucluBirSifre1q2w3eR4';

GRANT ALL PRIVILEGES ON moodle.* TO 'salvador'@'%';

FLUSH PRIVILEGES;

EXIT;

% ifadesi, kullanıcıya TCP/IP üzerinden (127.0.0.1 dahil) bağlanma izni
verir.
4. SELinux ihtimali

Eğer hala hata alırsan, httpd’nin DB bağlantısına izin ver:

sudo setsebool -P httpd_can_network_connect_db 1

💡 Önerim:

•    Moodle kurulum ekranında Veritabanı sunucusu = 127.0.0.1 yaz.

•    Kullanıcıyı % ile yetkilendir.

•    SELinux ayarını yap.

👉 Bu durumda bağlantı hatasız çalışması gerekir.

İstersen sana doğrudan SQL ve Moodle form alanlarını dolduracağın kesin
ayarları tek satırda özet geçeyim mi?
You said: ChatGPT said:

🎉 Harika, Moodle kurulumunda artık son aşamaya gelmişsin. Ekranda iki
küçük uyarı var:

1.    opcache.enable → bu sadece “öneri”, çalışmaya engel değil.

2.    max_input_vars → *kırmızı* görünüyor, bunu düzeltmen şart. Moodle en
az 5000 istiyor.



✅ Çözüm: PHP ayarlarını güncelleyelim.
1. php.ini dosyasına ayar ekle

sudo nano /etc/php.ini

Şu satırı bul ve değiştir (yoksa en alta ekle):

max_input_vars = 5000

Ayrıca şu ayarları da kontrol et (Moodle için iyi olur):

memory_limit = 256M

post_max_size = 128M

upload_max_filesize = 128M

max_execution_time = 300


2. PHP-FPM ve Apache’yi yeniden başlat

sudo systemctl restart php-fpm

sudo systemctl restart httpd


3. Tekrar dene

Tarayıcıdan kurulum ekranını yenile (Tekrar yükle).

•    max_input_vars yeşil olmalı.

•    opcache.enable uyarısını görmezden gelebilirsin (sadece “PHP ayarını
değiştirebilirsin” diyor).



👉 Bundan sonra “Sonraki” dediğinde Moodle kurulum adımları (lisans,
yönetici kullanıcı, site ayarları) başlayacak.

İstersen ben sana Moodle için önerilen tüm PHP ayarlarını hazır bir blok
halinde vereyim mi, tek seferde kopyalayıp yapıştırabil diye?
You said: ChatGPT said:

Süper 👍 Artık tek kalan uyarı:

php_setting: opcache.enable

PHP opcode önbellekleme performansı artırır...

Bu kritik hata değil, sadece performans tavsiyesi. Moodle kurulumu bu
şekilde devam edebilir.

Ama production ortam için OPcache’i açmanı tavsiye ederim.



✅ Çözüm:

1.    OPcache ayar dosyasını aç:

sudo nano /etc/php.d/10-opcache.ini

2.    Şunları ekle (veya varsa değerlerini değiştir):

opcache.enable=1

opcache.enable_cli=1

opcache.memory_consumption=256

opcache.interned_strings_buffer=16

opcache.max_accelerated_files=100000

opcache.validate_timestamps=1

opcache.revalidate_freq=30

3.    Servisleri yeniden başlat:

sudo systemctl restart php-fpm

sudo systemctl restart httpd



👉 Bundan sonra “Kontrol et” dediğinde uyarı kaybolacak.

⚡ Kısacası:

•    max_input_vars sorununu çözdün.

•    OPcache açarsan daha hızlı çalışır.

•    Şu an Moodle kuruluma başlamaya hazır 🚀

İstersen sana Moodle sonrası yapılması gereken güvenlik ve bakım
ayarlarının (cron, yedekleme, SELinux, log rotasyonu) bir kontrol listesi
çıkarayım mı?

Güzel, artık tek uyarı OPcache ile ilgili 👍

Bu bir hata değil, sadece Moodle sana “performans için OPcache aç” diyor.

✅ Yapman gerekenler:

1.    OPcache ayar dosyasını aç:

sudo nano /etc/php.d/10-opcache.ini

2.    Aşağıdakileri ekle (veya varsa değerlerini değiştir):

opcache.enable=1

opcache.enable_cli=1

opcache.memory_consumption=256

opcache.interned_strings_buffer=16

opcache.max_accelerated_files=100000

opcache.validate_timestamps=1

opcache.revalidate_freq=30

3.    Servisleri yeniden başlat:

sudo systemctl restart php-fpm

sudo systemctl restart httpd



👉 Bundan sonra “Kontrol et” dediğinde bu uyarı da yeşile döner.
Kuruluma devam edebilirsin; Moodle artık problemsiz çalışır.

İstersen ben sana Moodle sonrası güvenlik ve bakım kontrol listesi (cron,
SELinux, yedekleme, log rotasyonu) de hazırlayayım mı?
You said: ChatGPT said:

👏 Süper, artık Moodle yönetici hesabı oluşturma ekranındasın.
Burada Moodle senden ilk admin hesabını istiyor.

🔴 Kırmızı işaretler, doldurulması zorunlu alanları gösteriyor:

•    Kullanıcı adı → admin bırakabilirsin (ya da farklı bir ad
seçebilirsin).

•    Yeni şifre → Moodle şifre politikası çok sıkıdır:

•    En az 8 karakter

•    En az 1 büyük harf (A-Z)

•    En az 1 küçük harf (a-z)

•    En az 1 rakam (0-9)

•    En az 1 özel karakter (! @ # $ % ^ & * - _ + = vb.)
✔ Örn: S at glik2026*-

•    Ad → Yönetici yazabilirsin

•    Soyad → Kullanıcı

•    E-posta adresi → geçerli bir e-posta yazmalısın (Moodle bildirimleri
için kullanır).

•    Ülke → Türkiye seç.

•    Zaman dilimi → Europe/Istanbul bırak.

Sonra “Profil güncelle” dediğinde Moodle kurulumu bitecek ve seni site
anasayfasına yönlendirecek 🚀



✅ Tavsiyem:

•    Admin hesabına “admin” yerine farklı bir kullanıcı adı ver (güvenlik
için).

•    E-posta adresi kurum içi/gerçek çalışan bir adres olsun (parola
sıfırlama için lazım).

👉 Kurulum tamamlandığında sana “Moodle kurulum sonrası yapılacak ilk
bakım/güvenlik adımları”nı (cron job, yedekleme, HTTPS, SELinux, eklenti
yönetimi) vereyim mi?
You said: ChatGPT said:

🚀 Harika, Moodle kurulumunun son ekranına geldin!
Burada sitede temel ayarları yapıyorsun:


🔧 Önerilen ayarlar:

Yeni ayarlar - Anasayfa ayarları

•    Sitenin tam adı: Zonguldak Eğitim Moodle (örnek)

•    Sitenin kısa adı: ZEDU veya Moodle

•    Ana sayfa özet: “Zonguldak İl Sağlık Müdürlüğü Eğitim Platformu” gibi
kısa açıklama.



Yeni ayarlar - Bölge ayarları

•    Varsayılan yerel zaman: Europe/Istanbul (doğru seçilmiş)



Yeni ayarlar - Kimlik denetimini yönet

•    Kendi kendine kayıt → Devre dışı bırak (güvenlik için, isteyenler
kafasına göre hesap açamasın).

Eğer ileride öğrenciler kendi kayıt olabilsin istersen, sonra açabilirsin.



Yeni ayarlar - Destek personeli

•    Destek e-posta: Kurum içinden bir adres yaz (destek at hastane.gov.tr
gibi).

Moodle hata ya da şifre sıfırlama e-postalarını buradan gönderecek. SMTP
ayarlarını ayrıca yapman gerekir.


✅ Adım

Tüm bilgileri doldur → “Değişiklikleri kaydet”.
Bundan sonra Moodle hazır olacak 🎉



💡 Sonraki aşamada yapılması gerekenler (özet check-list):

1.    cron job aktif mi kontrol et (biz eklemiştik).

2.    SMTP posta sunucusunu ayarla (yoksa şifre sıfırlama çalışmaz).

3.    Site güvenliği için config.php izinlerini kısıtla:

3.                   sudo chmod 640 /var/www/html/moodle/config.php

sudo chown root:apache /var/www/html/moodle/config.php

4.    Gereksiz kayıt yöntemlerini kapat (e-posta tabanlı self-signup vs).

5.    Düzenli yedekleme planı yap (DB dump + moodledata).



👉 İstersen sana Moodle için tam bir “ilk kurulum sonrası güvenlik ve bakım
rehberi” hazırlayayım mı?

furkan.salyador at zismdns.local



•    Kullanıcı adı → admin bırakabilirsin (ya da farklı bir ad
seçebilirsin).

•    Yeni şifre → Moodle şifre politikası çok sıkıdır:

•    En az 8 karakter

•    En az 1 büyük harf (A-Z)

•    En az 1 küçük harf (a-z)

•    En az 1 rakam (0-9)

•    En az 1 özel karakter (! @ # $ % ^ & * - _ + = vb.)
✔ Örn: S at glik2026*-

•    Ad → Yönetici yazabilirsin

•    Soyad → Kullanıcı

•    E-posta adresi → geçerli bir e-posta yazmalısın (Moodle bildirimleri
için kullanır).

•    Ülke → Türkiye seç.

•    Zaman dilimi → Europe/Istanbul bırak.

[root at egitim tmp]# history

    1  dnf update -y

    2  nano /etc/ssh/sshd_config

    3  exit

    4  sudo dnf -y update

    5  sudo dnf -y install epel-release

    6  sudo dnf -y install policycoreutils-python-utils setools-console
firewalld tar unzip

    7  sudo systemctl enable --now firewalld

    8  # Remi deposu

    9  sudo dnf -y install
https://rpms.remirepo.net/enterprise/remi-release-9.rpm

   10  # Varsayılan PHP modülünü sıfırla ve 8.2’yi etkinleştir

   11  sudo dnf -y module reset php

   12  sudo dnf -y module enable php:remi-8.2

   13  # Moodle için gerekli PHP paketleri

   14  sudo dnf -y install php php-fpm php-opcache php-gd php-intl
php-mbstring php-zip php-xml                     php-curl php-ldap php-soap
php-xmlrpc php-json php-pdo php-mysqlnd
php-pecl-igbinary php-pecl-redis

   15  sudo systemctl enable --now php-fpm

   16  sudo systemctl status php-fpm --no-pager

   17  sudo tee /etc/php.d/10-opcache.ini >/dev/null <<'EOF'

opcache.enable=1

opcache.enable_cli=1

opcache.memory_consumption=256

opcache.interned_strings_buffer=16

opcache.max_accelerated_files=100000

opcache.validate_timestamps=1

opcache.revalidate_freq=30

EOF



   18  sudo systemctl restart php-fpm

   19  sudo tee /etc/yum.repos.d/MariaDB.repo >/dev/null <<'EOF'

# MariaDB 10.11 for RHEL9/Rocky9

[mariadb]

name = MariaDB

baseurl = https://mirrors.xtom.com/mariadb/yum/10.11/rhel/9/x86_64/

gpgkey=https://mariadb.org/mariadb_release_signing_key.pgp

gpgcheck=1

enabled=1

EOF



   20  sudo dnf -y install MariaDB-server MariaDB-client

   21  sudo systemctl enable --now mariadb

   22  sudo systemctl status mariadb --no-pager

   23  sudo mariadb-secure-installation

   24  sudo tee -a /etc/my.cnf.d/server.cnf >/dev/null <<'EOF'



[mysqld]

character-set-server = utf8mb4

collation-server     = utf8mb4_unicode_ci

innodb_file_per_table = 1

EOF



   25  sudo systemctl restart mariadb

   26  mysql -u root -p

   27  sudo dnf -y install httpd mod_ssl

   28  sudo systemctl enable --now httpd

   29  sudo tee /etc/httpd/conf.d/php-fpm.conf >/dev/null <<'EOF'

# PHP-FPM ile FPM socket üzerinden entegrasyon

<FilesMatch \.php$>

    SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost/"

</FilesMatch>



# Büyük dosya yüklemeleri için (Moodle paket/ yedek)

LimitRequestBody 0

EOF



   30  sudo systemctl reload httpd

   31  cd /tmp

   32  # Moodle 5.0 stable (git kullanmak temizdir)

   33  sudo dnf -y install git

   34  sudo git clone -b MOODLE_500_STABLE
https://github.com/moodle/moodle.git

   35  # Uygulama dosyaları

   36  sudo rsync -a moodle/ /var/www/html/moodle/

   37  # moodledata

   38  sudo mkdir -p /var/moodledata

   39  # Sahiplik/izinler (Apache = apache:apache)

   40  sudo chown -R apache:apache /var/www/html/moodle /var/moodledata

   41  sudo find /var/www/html/moodle -type f -exec chmod 0644 {} \;

   42  sudo find /var/www/html/moodle -type d -exec chmod 0755 {} \;

   43  sudo chmod -R 0770 /var/moodledata

   44  # Web sunucusunun yazacağı yerler

   45  sudo semanage fcontext -a -t httpd_sys_rw_content_t
"/var/moodledata(/.*)?"

   46  sudo semanage fcontext -a -t httpd_sys_rw_content_t
"/var/www/html/moodle(/.*)?"

   47  sudo restorecon -Rv /var/moodledata /var/www/html/moodle

   48  # Apache’nin network’e çıkabilmesi (gerekirse)

   49  sudo setsebool -P httpd_can_network_connect on

   50  sudo tee /etc/httpd/conf.d/moodle.conf >/dev/null <<'EOF'

<VirtualHost *:80>

    ServerName moodle.example.gov.tr

    ServerAlias www.moodle.example.gov.tr

    DocumentRoot /var/www/html/moodle

    # Tüm HTTP isteklerini HTTPS'e yönlendir

    RewriteEngine On

    RewriteCond %{HTTPS} !=on

    RewriteRule ^/?(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

</VirtualHost>



<VirtualHost *:443>

    ServerName moodle.example.gov.tr

    ServerAlias www.moodle.example.gov.tr

    DocumentRoot /var/www/html/moodle



    SSLEngine on

    SSLCertificateFile /etc/ssl/moodle.crt

    SSLCertificateKeyFile /etc/ssl/moodle.key

    # Eğer Let’s Encrypt kullanırsan cert dosya yolları farklı olacak
(aşağıda)



    <Directory /var/www/html/moodle>

        AllowOverride All

        Require all granted

    </Directory>



    # PHP-FPM entegrasyonu

    <FilesMatch \.php$>

        SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost/"

    </FilesMatch>



    ErrorLog  /var/log/httpd/moodle_error.log

    CustomLog /var/log/httpd/moodle_access.log combined

</VirtualHost>

EOF



   51  sudo systemctl reload httpd

   52  nano /etc/httpd/conf.d/moodle.conf

   53  sudo systemctl reload httpd

   54  sudo systemctl start httpd

   55  sudo systemctl reload httpd

   56  sudo systemctl restart httpd

   57  systemctl status httpd.service

   58  # Mevcut conf'taki yanlış yolları varsayılanlarla değiştir

   59  sudo sed -i 's|^ *SSLCertificateFile .*|SSLCertificateFile
/etc/pki/tls/certs/localhost.crt|' /etc/httpd/conf.d/moodle.conf

   60  sudo sed -i 's|^ *SSLCertificateKeyFile .*|SSLCertificateKeyFile
/etc/pki/tls/private/localhost.key|' /etc/httpd/conf.d/moodle.conf

   61  # Yapılandırma testi

   62  sudo apachectl -t

   63  # Başlat

   64  sudo systemctl enable --now httpd

   65  sudo systemctl status httpd --no-pager

   66  sudo sed -i 's|^ *SSLCertificateFile .*|SSLCertificateFile
/etc/pki/tls/certs/localhost.crt|' /etc/httpd/conf.d/moodle.conf

   67  sudo sed -i 's|^ *SSLCertificateKeyFile .*|SSLCertificateKeyFile
/etc/pki/tls/private/localhost.key|' /etc/httpd/conf.d/moodle.conf

   68  sudo apachectl -t

   69  sudo systemctl restart httpd

   70  sudo systemctl status httpd --no-pager

   71  sudo openssl req -x509 -nodes -newkey rsa:4096 -sha256 -days 825
-keyout /etc/ssl/moodle.key -out /etc/ssl/moodle.crt   -subj
"/C=TR/ST=Zonguldak/L=Zonguldak/O=Hospital/OU=IT/CN=online.zismdns.local"

   72  sudo chmod 600 /etc/ssl/moodle.key

   73  # (İsteğe bağlı) SELinux context:

   74  sudo semanage fcontext -a -t httpd_config_t "/etc/ssl/moodle\.crt"

   75  sudo semanage fcontext -a -t httpd_config_t "/etc/ssl/moodle\.key"

   76  sudo restorecon -v /etc/ssl/moodle.crt /etc/ssl/moodle.key

   77  sudo apachectl -t

   78  sudo systemctl restart httpd

   79  nano /etc/httpd/conf.d/moodle.conf

   80  sudo systemctl restart httpd

   81  nano /etc/httpd/conf.d/moodle.conf

   82  sudo systemctl restart httpd

   83  sudo apachectl -t                 # Syntax testi

   84  sudo journalctl -xeu httpd        # Servis logu

   85  sudo tail -n 200 /var/log/httpd/moodle_error.log

   86  ls -l /etc/ssl/moodle.*

   87  sudo openssl req -x509 -nodes -newkey rsa:2048 -days 365  -keyout
/etc/ssl/moodle.key -out /etc/ssl/moodle.crt  -subj
"/C=TR/ST=Zonguldak/L=Zonguldak/O=Hospital/OU=IT/CN=online.zismdns.local"

   88  sudo chmod 600 /etc/ssl/moodle.key

   89  sudo apachectl -t

   90  sudo systemctl restart httpd

   91  sudo systemctl status httpd --no-pager

   92  sudo cp /etc/php.ini /etc/php.ini.bak.$(date +%F)

   93  sudo sed -i 's/^upload_max_filesize = .*/upload_max_filesize =
128M/' /etc/php.ini

   94  sudo sed -i 's/^post_max_size = .*/post_max_size = 128M/'
/etc/php.ini

   95  sudo sed -i 's/^;date.timezone =.*/date.timezone =
Europe\/Istanbul/' /etc/php.ini

   96  sudo systemctl restart php-fpm

   97  sudo systemctl reload httpd

   98  sudo firewall-cmd --permanent --add-service=http

   99  sudo firewall-cmd --permanent --add-service=https

  100  sudo firewall-cmd --reload

  101  sudo mkdir -p /var/moodledata

  102  sudo chown -R apache:apache /var/moodledata

  103  sudo chmod -R 770 /var/moodledata

  104  sudo semanage fcontext -a -t httpd_sys_rw_content_t
"/var/moodledata(/.*)?"

  105  sudo restorecon -Rv /var/moodledata

  106  /var/moodledata

  107  sudo nano /etc/php.ini

  108  sudo systemctl restart php-fpm

  109  sudo systemctl restart httpd

  110  sudo nano /etc/php.d/10-opcache.ini

  111  sudo systemctl restart php-fpm

  112  sudo systemctl restart httpd

  113  sudo nano /etc/php.d/10-opcache.ini

  114  cat /etc/redhat-release









localhost yazan yere 127.0.0.1 yap sonraki   OK





sudo nano /var/www/html/moodle/config.php



<?php  // Moodle configuration file



unset($CFG);

global $CFG;

$CFG = new stdClass();



$CFG->dbtype    = 'mariadb';

$CFG->dblibrary = 'native';

$CFG->dbhost    = '127.0.0.1';

$CFG->dbname    = 'moodle';

$CFG->dbuser    = 'salvador';

$CFG->dbpass    = 'GucluBirSifre!R41q2w3e';

$CFG->extramemorylimit = '512M';

$CFG->prefix    = 'mdl_';

$CFG->dboptions = array (

  'dbpersist' => 0,

  'dbport' => '',

  'dbsocket' => '',

  'dbcollation' => 'utf8mb4_unicode_ci',

);



$CFG->wwwroot   = 'https://online.zismdns.local';

$CFG->dataroot  = '/var/moodledata';

$CFG->admin     = 'admin';



$CFG->directorypermissions = 0777;



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



// There is no php closing tag in this file,

// it is intentional because it prevents trailing whitespace problems!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://procyberian.xyz/pipermail/hackathon_procyberian.xyz/attachments/20251004/c57c7de0/attachment-0001.htm>


More information about the Hackathon mailing list