শুরু করা

যা যা লাগবে

এই অধ্যায়টি এখনও অনুবাদ হয়নি, তাই ইংরেজিতে দেখানো হচ্ছে।

এই পাতায়

What the server needs before the first upload. Any ordinary cPanel hosting plan is enough; a VPS with nginx works too. Everything is done in the browser: no Composer, no command line.

The server

  • PHP 7.4 or newer. PHP 8.1 or newer is recommended.
  • MySQL 5.7+ or MariaDB 10.3+, with one empty database and a user that has all privileges on it.
  • Apache or LiteSpeed with mod_rewrite (every cPanel host has it). The .htaccess file in the package does the rest. For nginx, see below.
  • A Quran CMS licence key that starts with QCMS-. See Your licence key.

PHP extensions

ExtensionNeeded forRequired
pdo_mysqlthe databaseyes
curlthe licence check, and fetching translations, tafsir, hadith and the weatheryes
mbstringArabic and Bengali textyes
zlibunpacking the Quran data that comes in the packageyes
jsonsettings, the reader, the APIyes
gdshare images of the ayahs and resizing uploaded picturesrecommended
zip (ZipArchive)installing plugins and themes from a ziprecommended
opensslthe translation voices the server makes (when no Azure key is set)recommended
fileinfochecking what an uploaded file really isrecommended
intlthe Hijri date from the Umm al-Qura calendar (a built-in table is used without it)if your host offers it

The installer checks the important ones on its first screen. A red mark stops the installation and tells you what to switch on; an orange mark is only a warning. On cPanel, extensions are switched on under Select PHP Version → Extensions.

Folders that must be writable

  • The site folder itself, while the installer writes config.php.
  • uploads/ — pictures, recitations and other files you upload.
  • cache/ — the voices the server makes, the weather, and other things kept for speed.

Permissions 755 for folders and 644 for files are right on almost every host. The folder database/data/ must be uploaded complete: it holds the whole Quran and the bundled translations, and the installer will not start without it.

Apache and LiteSpeed

The package carries a .htaccess file. It sends every address that is not a real file to index.php (that is how /2/255 or /prayer-times work), and it refuses to serve private folders and files such as includes/, database/, cache/, config.php and installed.lock. It is a hidden file, so check that it was uploaded and extracted too.

nginx

Use these rules in the server block of the site:

location / { try_files $uri $uri/ /index.php?$query_string; }
location ~ ^/(includes|database|cache)/ { deny all; }
location ~ ^/(config\.php|installed\.lock)$ { deny all; }
location ~ ^/(themes|plugins)/.+\.php$ { deny all; }
location ^~ /uploads/ { location ~ \.php$ { deny all; } }

Disk space

The files of the script take about 10 MB. What grows over time:

  • uploads/ — your pictures, the background library of the image and video maker, and recitations you upload (whole surahs can be large files).
  • cache/ — each translation voice is made once and kept in cache/tts/; recitations fetched for videos are kept in cache/audio/.
  • The database — every translation you add, every tafsir you download and every hadith book you import.

Outbound internet

The site itself must be able to open HTTPS addresses on the internet. These are the places it talks to, and when:

WhatWhereWhen
Licencelicense.faruk.bdat installation, then every 12 hours by default
More translationsapi.alquran.cloud, api.quran.comwhen you press Add on the Translations page
Tafsirapi.quran.comthe first time the tafsir of an ayah is opened, or Download all
Hadith bookscdn.jsdelivr.net, raw.githubusercontent.comwhen you import a book
Weather on the mosque screenapi.open-meteo.comat most once every half hour for a place
Translation voicesMicrosoft's speech service (the free Edge voice service, or Azure with your own key)the first time an ayah is spoken; the file is kept afterwards
Recitations in videoseveryayah.com, mp3quran.netwhen a video is made with a reciter's voice

The Quran itself and the bundled translations need no download: they are loaded from files in the package. Visitors' browsers play the recitations straight from the reciters' audio addresses.

If your host blocks outgoing connections, the licence cannot be activated. Ask the host to allow at least license.faruk.bd.

A cron job

One line, run every minute:

/usr/local/bin/php /home/USER/public_html/cron/run.php > /dev/null 2>&1

It runs the licence check, scheduled blog posts, the sitemap and the plugins' own jobs. Without it the site still works: page views run the jobs instead. Admin → Scheduled jobs shows the exact line for your server. See Scheduled jobs.

HTTPS

A certificate (a free one is enough) is recommended. When a page arrives over HTTPS, the site tells the browser to keep using HTTPS for a year. Browsers also only share a visitor's exact location (for prayer times) with a site on HTTPS.

Chat with Faruk
Faruk's Assistant Online — AI Powered