VPS-এ Flarum ইনস্টল: PHP forum setup গাইড
PHP, Composer ও MariaDB দিয়ে VPS-এ Flarum ইনস্টল করুন। TLS-এ শুধু /public serve করার নিয়ম, mail সমস্যা এবং extension upgrade-এর ফাঁদ জেনে নিন।
PHP এবং MariaDB সহ VPS-এ Flarum ইনস্টল করুন
VPS-এ Flarum ইনস্টল করলে PHP এবং MariaDB-তে চলা একটি forum পাবেন। এতে Docker, Ruby বা আলাদা job runner-এর প্রয়োজন হয় না। Flarum বেছে নেওয়ার কারণ এটাই। VPS-এ Discourse ইনস্টল করা মানে Ruby, PostgreSQL, Redis এবং একটি background worker-সহ Docker stack চালানো। Backup বা mail service যোগ করার আগেই এর জন্য বাস্তবে কমপক্ষে 2 GB RAM দরকার। প্রতিদিন হাজার হাজার post থাকা ব্যস্ত community-তে Discourse-এর এই resource usage যুক্তিসঙ্গত। কিন্তু কয়েক শ’ মানুষের forum-এ এটি এমন অবকাঠামো, যার জন্য প্রতি মাসে খরচ করবেন কিন্তু অধিকাংশ সময় ব্যবহার করবেন না। Flarum এমন একটি PHP stack-এর মধ্যে চলতে পারে, যা আপনি হয়তো ইতিমধ্যে ব্যবহার করছেন। তাই nginx এবং MariaDB-সহ 1 GB VPS-এও অন্য service-এর পাশে এটি host করা যায়। সিদ্ধান্ত এখনও চূড়ান্ত না হলে, self-hosted forum software-এর বিস্তৃত তুলনা-তে অন্যান্য বিকল্পও দেখুন।
এই guide-এ Flarum 1.x ব্যবহার করা হয়েছে, যার বর্তমান সংস্করণ-শাখা 1.8 series। August 2026 অনুযায়ী Flarum 2.0 এখনও release candidate পর্যায়ে আছে। তাই অন্যরা নির্ভর করে এমন forum-এর জন্য 1.8 চালানোই উপযুক্ত। এখানে core version-এর চেয়ে extension-গুলো বেশি গুরুত্বপূর্ণ। অধিকাংশ extension author এখনও 2.0-এ স্থানান্তর করেননি।
সার্ভারে Flarum 1.8-এর প্রয়োজনীয়তা
Flarum-এর নথিভুক্ত প্রয়োজনীয়তা হলো PHP 7.3 বা পরবর্তী সংস্করণ, MySQL 5.6+ অথবা MariaDB 10.0.5+, এবং mod_rewrite-সহ nginx অথবা Apache। Ubuntu 24.04-এ PHP 8.3 এবং MariaDB 10.11 রয়েছে। তাই তৃতীয় পক্ষের repository ছাড়াই distribution package দিয়ে উভয় প্রয়োজনীয়তা পূরণ হয়। Flarum-এর প্রয়োজনীয় PHP extension-গুলো হলো curl, dom, fileinfo, gd, json, mbstring, openssl, pdo_mysql, tokenizer এবং zip। আপনার shell access-ও প্রয়োজন, কারণ এখানে Composer ঐচ্ছিক নয়: প্রতিটি Flarum extension একটি Composer package, এবং Composer চালানো ছাড়া কোনো extension যোগ করার উপায় নেই।
Flarum একটি সাধারণ PHP application। আপনি যদি ইতিমধ্যে Ubuntu 24.04-এ LAMP stack চালান, তাহলে পরের দুটি section-এর বেশির ভাগ package ইতিমধ্যে installed থাকবে। সেক্ষেত্রে database অংশে চলে যেতে পারেন।
Flarum-এর প্রয়োজনীয় PHP extension ইনস্টল করুন
sudo apt update
sudo apt install -y nginx mariadb-server composer
sudo apt install -y php8.3-fpm php8.3-cli php8.3-curl php8.3-gd php8.3-mbstring php8.3-mysql php8.3-xml php8.3-zip
php -m | grep -E 'curl|dom|gd|mbstring|pdo_mysql|zip'
composer --versionPackage-এর নাম Flarum-এর তালিকার সঙ্গে একে একে মেলে না। dom extension-টি php8.3-xml-এর মধ্যে থাকে। fileinfo, json, openssl এবং tokenizer Ubuntu-র PHP 8.3-এ compiled অবস্থায় থাকে, তাই এগুলোর জন্য আলাদা package ইনস্টল করতে হয় না। grep-এর ছয়টি line দেখানো উচিত এবং composer --version-এ 2.x release দেখানো উচিত। কোনো extension অনুপস্থিত থাকলে এখনই তা ঠিক করুন। কারণ এটি ছাড়া Composer Flarum ইনস্টল করতে অস্বীকার করে এবং error message-এ extension-এর নাম উল্লেখ করে:
Problem 1
- flarum/core[v1.8.0, ..., v1.8.17] require ext-gd * -> it is missing from your system.
Install or enable PHP's gd extension.Command line PHP এবং FastCGI process manager (PHP-FPM) একই version কি না যাচাই করুন। Composer command line binary-এর অধীনে চলে, আর আপনার forum FPM-এর অধীনে চলে। তাই php -v এবং sudo php-fpm8.3 -v-এর version একই হতে হবে। কোনো machine-এ third-party repository থেকে একাধিক PHP version ইনস্টল থাকলে version দুটির মধ্যে অমিল হতে পারে। তখন একটি version-এর জন্য ইনস্টল করা extension অন্য version-এ দেখা যায় না।
ডেটাবেস এবং নির্দিষ্ট ডেটাবেস user তৈরি করুন
sudo mariadb-secure-installation
sudo mariadbCREATE DATABASE flarum CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'flarum'@'localhost' IDENTIFIED BY 'use-a-long-random-password';
GRANT ALL PRIVILEGES ON flarum.* TO 'flarum'@'localhost';
FLUSH PRIVILEGES;
EXIT;root-এর পরিবর্তে Flarum-এর জন্য আলাদা ডেটাবেস user ব্যবহার করুন। এই grant শুধু flarum.*-এর অনুমতি দেয়, অন্য কোনো কিছুর নয়। তাই আপনার লেখা নয় এমন কোনো extension-এ SQL injection-এর ত্রুটি থাকলেও সেটি আপনার অন্য ডেটাবেস পড়তে পারবে না। Character set-ও গুরুত্বপূর্ণ: utf8mb4 emoji এবং non-Latin script সঠিকভাবে সংরক্ষণ করে। অন্যদিকে MySQL-এর পুরোনো utf8 হলো তিন-বাইট encoding, যা প্রথম চার-বাইট character-এ পৌঁছালে post-এর বাকি অংশ কেটে দেয়। পরবর্তী ধাপে যাওয়ার আগে user কাজ করছে কি না নিশ্চিত করুন।
mariadb -u flarum -p flarum -e 'SELECT DATABASE();'এতে flarum প্রদর্শিত হওয়া উচিত। ERROR 1045 (28000): Access denied for user 'flarum'@'localhost'-এর অর্থ হলো password মেলেনি, অথবা localhost-এর পরিবর্তে অন্য কোনো host-এর জন্য user তৈরি করা হয়েছে।
Composer ব্যবহার করে VPS-এ Flarum ইনস্টল করুন এবং 1.8-এ version pin করুন
প্রথমে code-এর মালিকানাধীন একটি system user তৈরি করুন। root হিসেবে Composer চালালে vendor/ এবং storage/-এ root-owned file তৈরি হয়। পরে PHP নিজের cache-এ লিখতে পারে না, এবং forum প্রতিটি অনুরোধের উত্তরে 500 error দেয়।
sudo useradd --system --home-dir /srv/flarum --shell /bin/bash flarum
sudo install -d -o flarum -g flarum -m 755 /srv/flarum
sudo -iu flarumশেষ command-টি আপনাকে flarum user হিসেবে /srv/flarum-এ একটি shell-এ নিয়ে যায়। এখান থেকে guide-এর শেষ পর্যন্ত প্রতিটি command এই user হিসেবে চলবে, যদি না command-টি sudo দিয়ে শুরু হয়।
composer create-project flarum/flarum:^1.8.0 .^1.8.0 constraint-টিই version pin। এটি 1.8.x patch release গ্রহণ করে এবং 2.0 প্রত্যাখ্যান করে। 2.0 এখনও release candidate হওয়ায় এটিই প্রয়োজনীয়। Composer skeleton download করে, flarum/core এবং তার dependency resolve করে, এবং আপনার জন্য public/, storage/, vendor/, composer.json ও একটি flarum command-line script রেখে যায়।
ছোট VPS-এ সাধারণত এই ধাপেই সমস্যা হয়, এবং দুটি পৃথক failure একই রকম দেখায়। PHP Fatal error: Allowed memory size of 134217728 bytes exhausted হলো PHP-এর নিজস্ব memory_limit। command-এর আগে COMPOSER_MEMORY_LIMIT=-1 বসালে একবারের জন্য ওই সীমা সরানো হয়। PHP error ছাড়া আলাদা লাইনে শুধু Killed দেখা গেলে সেটি kernel-এর out-of-memory killer। dmesg | tail ব্যবহার করে এটি নিশ্চিত করা যায়। এর অর্থ হলো মেশিনের RAM সত্যিই শেষ হয়ে গেছে। তাই swap যোগ করুন। PHP limit বাড়ালে সমস্যা আরও বাড়বে, কারণ kernel ব্যবস্থা নেওয়ার আগে PHP আরও বেশি memory চাবে।
শুধু /public কেন ওয়েবের জন্য উন্মুক্ত থাকা উচিত
প্রকল্পের root-এ আপনার database password plain text-এ থাকা config.php, সব dependency-সহ vendor/ এবং log ও cached session-সহ storage/ থাকে। এগুলোর কোনো কিছুই public Internet-এ থাকা উচিত নয়। Flarum সব web-accessible ফাইল একটি subdirectory-তে রাখে, public/-এ। এতে index.php, একটি assets/ folder এবং সামান্য কিছু অতিরিক্ত ফাইল থাকে। Web server root-কে /srv/flarum/public-এ নির্দেশ করুন। এতে মনে রাখার মতো কোনো অতিরিক্ত rule ছাড়াই, কাঠামোগতভাবেই HTTP-এর মাধ্যমে বাকি tree-তে পৌঁছানো যায় না।
এর পরিবর্তে root-কে /srv/flarum-এ নির্দেশ করলে ক্ষতি বাস্তব হয়। /config.php request করলে কার্যকর কোনো ফল পাওয়া যায় না, কারণ PHP ফাইলটি execute করে এবং এটি শুধু একটি array ফেরত দেয়। কিন্তু /storage/logs/flarum.log একজন অপরিচিত ব্যক্তির কাছে আপনার stack trace ও database error প্রকাশ করে। /composer.lock আপনি চালানো প্রতিটি package-এর সঠিক version জানিয়ে দেয়। এটি আক্রমণ করার জন্য পরিচিত vulnerability-গুলোর একটি তালিকা তৈরি করে।
PHP-FPM-এর জন্য আলাদা pool তৈরি করুন
Flarum-এর 3টি path-এ লেখার অনুমতি প্রয়োজন: project root-এ, যাতে installer config.php তৈরি করতে পারে; storage/-এ, logs ও cache-এর জন্য; এবং assets/-এ, uploaded avatars ও logos-এর জন্য। ফাইলগুলোর মালিক হলো flarum user। তাই সঠিক সমাধান হলো এমন একটি PHP-FPM pool ব্যবহার করা, যা flarum হিসেবে চলে। nginx www-data হিসেবে চলবে এবং শুধু পড়বে।
/etc/php/8.3/fpm/pool.d/flarum.conf লিখুন:
[flarum]
user = flarum
group = flarum
listen = /run/php/php8.3-fpm-flarum.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = ondemand
pm.max_children = 10
pm.process_idle_timeout = 30s
php_admin_value[memory_limit] = 256M
php_admin_value[upload_max_filesize] = 16M
php_admin_value[post_max_size] = 17Msudo systemctl restart php8.3-fpm
ls -l /run/php/php8.3-fpm-flarum.sockSocket-টি srw-rw---- 1 www-data www-data হিসেবে তালিকাভুক্ত হওয়া উচিত। master process root হিসেবে চলে এবং socket তৈরি করে। তাই এটি socket-এর মালিকানা www-data-এর কাছে দিতে পারে, যখন worker-গুলো flarum হিসেবে চলে। Socket না থাকলে sudo journalctl -u php8.3-fpm -n 30 FPM rejected line দেখায়। pm = ondemand request আসার পরেই worker process চালু করে। তাই visitor না থাকলে একটি নিরিবিলি forum-এর memory ব্যবহার প্রায় নেই বললেই চলে।
nginx server block
Flarum project root-এ .nginx.conf নামে একটি nginx snippet দেয়। এতে rewrite rule, cache header এবং compression setting থাকে। এটি কপি না করে include করুন। তাহলে Flarum upgrade-এর সঙ্গে snippet-এ পরিবর্তন হলে কোনো কিছু সম্পাদনা না করেই সেই পরিবর্তন আপনার server-এ প্রয়োগ হবে।
server {
listen 80;
listen [::]:80;
server_name forum.example.com;
root /srv/flarum/public;
index index.php;
client_max_body_size 16M;
include /srv/flarum/.nginx.conf;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm-flarum.sock;
}
}এটি /etc/nginx/sites-available/flarum নামে সংরক্ষণ করুন, তারপর এটি enable করুন।
sudo ln -s /etc/nginx/sites-available/flarum /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginxnginx -t-এর উত্তর syntax is ok এবং test is successful দেওয়া উচিত। include লাইনটি অনেকে বাদ দেন। এটি বাদ দিলে একটি নির্দিষ্ট সমস্যা দেখা যায়: front page ঠিকমতো load হয়, কিন্তু প্রতিটি discussion link nginx থেকে 404 ফেরত দেয়। Flarum /d/1-hello-world-এর মতো URL PHP-এর ভিতরে route করে। এই path disk-এ থাকা কোনো file নয়। তাই snippet-এর try_files $uri $uri/ /index.php?$query_string rule না থাকলে nginx d নামে একটি directory খোঁজে। এটি না পেয়ে PHP-কে অনুরোধ করার আগেই 404 ফেরত দেয়। Apache একই routing পায় public/-এ থাকা .htaccess file থেকে। তবে matching <Directory> block-এ AllowOverride All সেট করা থাকলেই এটি কার্যকর হয়।
ইনস্টলার চালানোর আগে TLS যোগ করুন
পরে নয়, এখনই certificate তৈরি করুন। Installation-এর সময় Flarum তার base URL config.php-এ লিখে রাখে। এই URL আপনার browser-এর address থেকে নেওয়া হয়। http:// ব্যবহার করে installation করলে Flarum পরে তৈরি করা প্রতিটি asset URL http:// দিয়ে শুরু হয়। তাই পরে TLS (transport layer security) যোগ করলে browser mixed content হিসেবে ওই request-গুলো block করে। ফলে forum কোনো style বা JavaScript ছাড়া শুধু সাধারণ text হিসেবে লোড হয়। প্রথমে nginx-এ Let's Encrypt-এর certbot setup সম্পন্ন করুন। https://forum.example.com একটি page serve করছে কি না নিশ্চিত করুন। তারপর এখানে ফিরে আসুন।
আপনি যদি ইতিমধ্যে plain HTTP ব্যবহার করে installation করে থাকেন, তাহলে একটি line পরিবর্তন করলেই মেরামত হবে। /srv/flarum/config.php edit করে url key-এর মান 'url' => 'https://forum.example.com', করুন। এরপর flarum user হিসেবে php flarum cache:clear চালান।
Installer চালান এবং config.php-এর নিরাপত্তা শক্ত করুন
ব্রাউজারে https://forum.example.com খুলুন। Flarum-এর web installer আপনাকে database-এর নাম, তৈরি করা database user ও password, forum-এর title এবং আপনার admin account চাইবে। এটি config.php লিখবে এবং table তৈরি করবে। কাজ শেষ হলে database password থাকা file-টির permission আরও কঠোর করুন।
sudo chmod 640 /srv/flarum/config.phpএই file-টি flarum-এর জন্য readable এবং writable থাকবে; FPM এই user হিসেবে চলে। সার্ভারের অন্য কোনো account file-টি পড়তে পারবে না। এরপর shell থেকে installation পরীক্ষা করুন।
php flarum infoএতে core version, PHP version, enabled extension, mail driver এবং ব্যবহৃত path দেখা যায়। কোনো কিছু সঠিকভাবে কাজ না করলে প্রথমে এই command-ই চালান। আপনাকে সহায়তা করা যে কেউও সাধারণত প্রথমে এই তথ্য চাইবে।
সাইনআপ ও password reset email নীরবে ব্যর্থ হওয়ার কারণ
এই অংশটি নির্ধারণ করে আপনার forum প্রথম সপ্তাহ পার করবে কি না। একটি নতুন forum থেকে পাঠানো প্রথম দুটি email হলো signup confirmation এবং password reset email। আপনার community সত্যিই সক্রিয় কি না, তা নিয়ে কোনো নতুন visitor সিদ্ধান্ত নেওয়ার ঠিক সেই সময়ে দুটিই পাঠানো হয়। দুটিই নীরবে ব্যর্থ হতে পারে। যিনি email পাননি, তিনি আপনাকে তা জানাতে পারেন না। আপনার admin dashboard-এও কোনো error indicator দেখা যায় না।
Flarum-এ চারটি mail driver আছে। এগুলো Administration, তারপর Email-এর অধীনে সেট করা হয়: smtp, mail, mailgun এবং log। smtp নির্বাচন করুন এবং এটি এমন একটি mail service-এর সঙ্গে সংযুক্ত করুন, যা সত্যিই email deliver করবে। mail driver message-টি একটি local sendmail binary-তে পাঠায়। নতুন Ubuntu VPS-এ এই binary থাকে না। ফলে message কোথাও যায় না এবং কোনো error-ও দেখানো হয় না। log driver message body storage/logs/-এ লেখে, কিন্তু কোনো email পাঠায় না। এটি development-এর জন্য রাখা হয়েছে।
Settings সংরক্ষণ করুন। এরপর একই page-এর Send Test Mail button চাপুন। এটিই আপনার একমাত্র feedback loop। তাই কাউকে invite করার আগে এটি ব্যবহার করুন। Message না এলে log পড়ুন।
tail -n 50 /srv/flarum/storage/logs/flarum.logRefused connection, rejected login এবং TLS negotiation failure—সবই চেষ্টা করা host ও port-সহ সেখানে লেখা হয়। Connection could not be established with host smtp.example.com লেখা কোনো line-এর অর্থ হলো port blocked অথবা ভুল। এর সাধারণ কারণ হলো provider defaultভাবে outbound port 25 block করে। Encryption field-এ tls সেট করে port 587 ব্যবহার করলে প্রায় সব mail service-এর সঙ্গে কাজ করে।
Mail নষ্ট থাকলে signup করা visitor Flarum-এর generic failure banner Oops! Something went wrong. Please reload the page and try again. দেখতে পান। Confirmation পাঠানোর সময় request ব্যর্থ হলে এই banner দেখা যায়। যেকোনো ক্ষেত্রেই ওই ব্যক্তি প্রবেশ করতে পারেন না এবং সমস্যাটি জানিয়ে আপনাকে লিখবেনও না।
Mail পাঠানো এবং mail গ্রহণযোগ্য হওয়া দুটি আলাদা সমস্যা। VPS address থেকে পাঠানো mail-এর ক্ষেত্রে আপনার domain-এর জন্য SPF বা DKIM record publish না থাকলে message spam folder-এ যেতে পারে। Bounce message ছাড়াই message drop-ও হতে পারে। তাই log-এ send সফল দেখা গেলেও reader কিছুই দেখতে পারেন না। Self-hosted app থেকে নির্ভরযোগ্যভাবে mail পাঠানো অংশে কোন DNS record publish করতে হবে এবং কোন relay service ব্যবহার করা যুক্তিযুক্ত, তা ব্যাখ্যা করা হয়েছে।
এক্সটেনশন হলো Composer package, তাই upgrade একটি command
Flarum-এ একটি extension হলো Composer package। কোনো upload button নেই এবং কোনো folder-এ রাখার জন্য zip file-ও নেই। এটি ইচ্ছাকৃত নকশা: version-গুলো পরস্পরের সঙ্গে সামঞ্জস্য রেখে resolve হয়, নির্দিষ্ট package set composer.lock-এ রেকর্ড থাকে, এবং কোনো extension-এর PHP library-এর ওপর dependency থাকলে সেই library সঠিকভাবে install হয়। এর বিনিময়ে, একটি extension যোগ করতে flarum user হিসেবে তিনটি command চালাতে হয়।
composer require 'fof/upload:*'
php flarum migrate
php flarum cache:clearএরপর Administration, তারপর Extensions-এ গিয়ে এটি enable করুন। প্রতিটি command-এর কাজ আলাদা। composer require disk-এ code রাখে। php flarum migrate extension-এর সঙ্গে থাকা database migration চালায়। এভাবেই extension নিজের table তৈরি করে। php flarum cache:clear browser যে compiled JavaScript ও CSS bundle load করে, সেগুলো পুনর্নির্মাণ করে। শেষ command-টি বাদ দিলে পরিচিত বিভ্রান্তি তৈরি হয়: extension তালিকায় দেখা যায়, toggle চালু থাকে, কিন্তু যতবারই reload করুন না কেন browser-এ কোনো পরিবর্তন দেখা যায় না।
কোনো extension remove করার প্রক্রিয়া বিপরীতভাবে চলে। প্রথমে admin panel-এ এটি disable করুন, তারপর package remove করুন। Flarum ইচ্ছাকৃতভাবে extension-এর table রেখে দেয়, যাতে পরে আবার enable করলে data হারিয়ে না যায়। table-গুলোও মুছে ফেলতে চাইলে code remove করার আগে এর migration rollback করুন।
php flarum migrate:reset --extension fof-upload
composer remove fof/upload
php flarum cache:clearওই command-এ extension id হলো package name, যেখানে slash-এর পরিবর্তে hyphen ব্যবহার করা হয়েছে। টাইপ করার বদলে click করতে চাইলে composer require 'flarum/extension-manager:*' একটি official admin page যোগ করে, যা Composer-এর wrapper হিসেবে কাজ করে। এটি web user-এর মতো একই operation চালায়, একই memory এবং একই write permission প্রয়োজন, এবং একইভাবে ব্যর্থ হয়। তাই কোনো সমস্যা হলে command line-ই নির্ভরযোগ্য পদ্ধতি।
Composer কেন Flarum আপগ্রেড করতে অস্বীকার করে
Flarum এবং এর প্রতিটি extension আপগ্রেড করতে একটি Composer command-এর পরে দুটি Flarum command চালাতে হয়। প্রথমে database-এর backup নিন।
composer update --prefer-dist --no-plugins --no-dev -a --with-all-dependencies
php flarum migrate
php flarum cache:clearকাজটি হয়েছে ধরে না নিয়ে output পড়ুন। কারণ গুরুত্বপূর্ণ পরিস্থিতি হলো Composer যখন কোনো পরিবর্তন করতে অস্বীকার করে:
Your requirements could not be resolved to an installable set of packages.এই message-এর অর্থ হলো, একটি installed extension এমন একটি flarum/core constraint নির্ধারণ করেছে, যা আপনি যে release-এ আপগ্রেড করছেন সেটিকে বাদ দেয়। Composer এই constraint অমান্য করবে না। তাই extension-এর author যে সমন্বয়টি কাজ করবে না বলে উল্লেখ করেছেন, সেটি তৈরি করার বদলে Composer সম্পূর্ণ install-কে পুরোনো version-এ রেখে দেয়। দায়ী package খুঁজে বের করুন।
composer why-not flarum/core 1.8.17Output-এ ওই version-কে বাধা দেওয়া প্রতিটি package এবং তাদের নির্ধারিত constraint তালিকাভুক্ত থাকে। এরপর দুটি পথ আছে: author-এর compatible release প্রকাশের জন্য অপেক্ষা করা, অথবা extension-টি সরিয়ে সেটি ছাড়া চালানো। এটিই Composer model-এর সীমাবদ্ধতা। অন্যদের নির্ভর করা forum-এ পনেরোটি extension install করার আগে বিষয়টি বোঝা জরুরি। সম্প্রতি release প্রকাশ করেছে এমন extension বেছে নিন এবং তালিকাটি এত ছোট রাখুন, যাতে আপনি তা পড়ে বুঝতে পারেন।
ব্যাকআপে কী রাখবেন
ডেটাবেস এবং project directory ব্যাকআপ করুন। অন্য সবকিছু পুনর্নির্মাণ করা যায়।
mariadb-dump -u flarum -p --single-transaction flarum > flarum-$(date +%F).sql
sudo tar czf flarum-files.tgz -C /srv flarumপুরোনো সিস্টেমে mariadb-dump-কে mysqldump বলা হয়; Ubuntu 24.04-এ দুটি নামই কাজ করে। ডেটাবেসে প্রতিটি post, প্রতিটি user এবং প্রতিটি setting থাকে। project directory-তে config.php, composer.json (এটিই আপনি কোন extension চালান তার প্রকৃত রেকর্ড) এবং আপলোড করা avatar ও logo-সহ assets/ থাকে। vendor/ বাদ দিতে পারেন, কারণ composer install এটি composer.lock থেকে পুনর্নির্মাণ করে, এবং storage/ নিজে থেকেই পুনরায় তৈরি হয়। দুটি file-ই server-এর বাইরে কপি করুন, কারণ যে backup সেটি যে machine-কে সুরক্ষিত রাখে সেই machine-এই থাকলে তা backup নয়। পুনরুদ্ধারের জন্য একই version-এর একটি নতুন Flarum, composer install, সংরক্ষিত file-গুলো আগের জায়গায় ফিরিয়ে রাখা এবং SQL file load করা প্রয়োজন।
FAQ
1 GB VPS-এ Flarum চালানো যাবে কি?
হ্যাঁ, ছোট community-এর জন্য চালানো যাবে। স্বাভাবিক অবস্থায় Flarum অনুরোধের উত্তর দেওয়ার জন্য PHP-FPM এবং MariaDB ব্যবহার করে। pm = ondemand থাকলে কেউ পড়ার সময়ই শুধু PHP worker চালু থাকে। সবচেয়ে বেশি memory লাগে install করার সময়। composer create-project সম্পূর্ণ dependency graph memory-তে resolve করে। তাই এই ধাপেই out-of-memory killer process বন্ধ করার সম্ভাবনা বেশি। install করার আগে একটি swap file যোগ করুন। অথবা বড় machine-এ একবার Composer চালিয়ে পুরো tree কপি করে আনুন।
Front page কাজ করলেও discussion link 404 দেয় কেন?
আপনার nginx server block-এ include /srv/flarum/.nginx.conf; নেই। Flarum PHP-এর ভিতরে /d/1-hello-world-এর মতো URL পরিচালনা করে। এই path disk-এর কোনো file নয়। snippet-এর try_files $uri $uri/ /index.php?$query_string rule না থাকলে nginx d নামে একটি directory খোঁজে। সেটি না পেয়ে nginx নিজেই 404 ফেরত দেয় এবং PHP-কে কোনো অনুরোধ পাঠায় না। Apache-এ একই routing public/.htaccess থেকে আসে। তবে <Directory> block-এ AllowOverride All সেট না করলে সেটি উপেক্ষিত হয়।
HTTPS চালু করার পর forum-এর সব styling হারিয়ে গেল কেন?
Flarum তার base URL config.php-এ সংরক্ষণ করে। installer চালানোর সময় আপনি যে address ব্যবহার করেছিলেন, সেটি থেকেই এই মান নেওয়া হয়। plain HTTP-তে install করলে Flarum http:// asset URL তৈরি করতে থাকে। HTTPS page-এ browser এগুলোকে mixed content হিসেবে block করে। ফলে শুধু unstyled text দেখা যায়। /srv/flarum/config.php-এর url key-টি https:// address-এ পরিবর্তন করুন। এরপর file-এর owner user হিসেবে php flarum cache:clear চালান।
কেউ signup confirmation email পায় না কেন?
প্রথমে mail driver পরীক্ষা করুন। mail driver-এর জন্য একটি local sendmail binary দরকার, যা নতুন Ubuntu VPS-এ থাকে না। log driver storage/logs/-এ লিখে, কিন্তু কোনো email পাঠায় না। smtp-এ পরিবর্তন করুন। Encryption হিসেবে tls সেট করে port 587 ব্যবহার করুন, কারণ অধিকাংশ provider outbound port 25 block করে। এরপর Send Test Mail চাপুন। log-এ successful send দেখা গেলেও email না পৌঁছালে সমস্যা configuration-এ নয়, deliverability-তে। তাই আপনার sending domain-এর জন্য SPF এবং DKIM record publish করুন।
Flarum 1.8 নাকি 2.0 install করা উচিত?
1.8 install করুন। August 2026 অনুযায়ী Flarum 2.0 একটি release candidate। আরও গুরুত্বপূর্ণ বিষয় হলো, অনেক extension এখনও flarum/core constraint ঘোষণা করে, যা 1.x-এ গিয়ে থামে। আজ 2.0 install করলে এমন forum চালাতে হবে যার extension-গুলো একসঙ্গে update করা যায় না। এটিই সেই failure, যা diagnose করার জন্য composer why-not রয়েছে। flarum/flarum:^1.8.0 দিয়ে version pin করুন। আপনার প্রয়োজনীয় extension-গুলো 2.0 release প্রকাশ করার পর আবার বিবেচনা করুন।