[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