# মেডপ্রস্তুতি — cPanel-এ চালু করার নির্দেশনা

এটি PHP + MySQL/MariaDB অ্যাপ। Node.js, npm, Composer বা VPS লাগে না। ZIP-এর কোড আপনার নিজের ডোমেইনে ব্যবহার ও পরিবর্তন করতে পারবেন।

**এই প্যাকেজে ১৯৯০–সর্বশেষ বছরের সম্পূর্ণ যাচাইকৃত প্রশ্নসংগ্রহ নেই।** প্রশ্নব্যাংক খালি অবস্থায় শুরু হয়। কোনো নমুনা বা AI-তৈরি প্রশ্নকে আসল ভর্তি পরীক্ষার প্রশ্ন হিসেবে দেওয়া হয়নি। প্রশ্ন আমদানি ও মানব-যাচাইয়ের ব্যবস্থা তৈরি করা আছে।

## ১. হোস্টিংয়ের প্রস্তুতি

cPanel → Select PHP Version / MultiPHP Manager থেকে বর্তমানে সমর্থিত PHP 8.2 বা পরের সংস্করণ নির্বাচন করুন। এই অ্যাপের জন্য `pdo_mysql`, `mbstring`, `curl`, `openssl`, `fileinfo`, `json`, `session` দরকার।

MySQL 8 অথবা MariaDB 10.4+ উপযোগী SQL ব্যবহার করা হয়েছে। স্থানীয় পরীক্ষায় PHP 8.0.30 + MariaDB 10.4.32 এবং SQLite ব্যবহার করা হয়েছে; পুরোনো পরীক্ষার runtime-কে production-এর সুপারিশ হিসেবে ধরবেন না।

cPanel-এর PHP options-এ:

```ini
upload_max_filesize = 26M
post_max_size = 30M
memory_limit = 256M
max_execution_time = 120
display_errors = Off
log_errors = On
```

AI অনুরোধের জন্য hosting থেকে `https://generativelanguage.googleapis.com`-এ outbound HTTPS/cURL চালু থাকতে হবে। অনেক shared hosting ৬০–১২০ সেকেন্ডের নিজস্ব সীমা রাখে; প্রয়োজন হলে প্রতি ব্যাচে ১–৩ প্রশ্ন নিন। TLS certificate verification বন্ধ করবেন না; certificate error হলে hosting provider-কে CA bundle ঠিক করতে বলুন।

## ২. ফাইলগুলো সঠিক জায়গায় রাখুন

ডোমেইনের document root যদি `/home/CPANEL_USER/public_html` হয়:

```text
/home/CPANEL_USER/
├── medprep-private/       ← ZIP-এর private ফোল্ডার এখানে, নাম বদলে
│   ├── core.php
│   ├── routes.php
│   ├── config.example.php
│   ├── config.php         ← পরের ধাপে তৈরি করবেন
│   ├── .htaccess
│   ├── sessions/          ← অ্যাপ নিজে তৈরি করবে
│   └── uploads/           ← অ্যাপ নিজে তৈরি করবে
└── public_html/           ← ZIP-এর public ফোল্ডারের ভেতরের সব ফাইল
    ├── index.html
    ├── api.php
    ├── app.js
    ├── pdf.js
    ├── style.css
    ├── favicon.svg
    ├── .htaccess
    └── vendor/
```

**পুরো ZIP public_html-এ রেখে দেবেন না।** `private`, `tests`, `docs`, config বা ডেটাবেস জনসাধারণের document root-এর বাইরে থাকবে। cPanel File Manager-এর Settings-এ “Show Hidden Files” চালু করে `.htaccess`-ও কপি করুন।

আগে থেকে ওয়েবসাইট থাকলে সেটির ফাইলের ওপর সরাসরি লিখবেন না। নতুন subdomain/document root ব্যবহার করুন অথবা বিদ্যমান সাইটের backup নিয়ে আলাদা ফোল্ডার ঠিক করুন।

Subdomain-এর document root আলাদা হলে `api.php`-এর `$private` নির্ধারণের লাইনটি আপনার প্রকৃত private folder-এর absolute path-এ দিন, যেমন:

```php
$private = '/home/CPANEL_USER/medprep-private';
```

PHP-কে `medprep-private/sessions` ও `medprep-private/uploads`-এ লিখতে দিতে হবে। সাধারণভাবে folder 700/750 এবং config.php 600/640 যথেষ্ট, hosting-এর PHP user অনুযায়ী। 777 permission দেবেন না।

## ৩. MySQL তৈরি করুন

cPanel → MySQL Database Wizard:

1. একটি নতুন database তৈরি করুন।
2. একটি database user ও শক্তিশালী password তৈরি করুন।
3. সেই user-কে শুধু এই database-এর প্রয়োজনীয় privileges দিন; প্রথমবার table তৈরির জন্য CREATE-ও লাগবে।
4. cPanel prefix-সহ database ও user-এর সম্পূর্ণ নাম লিখে রাখুন।

`medprep-private/config.example.php` কপি করে `config.php` করুন। মানগুলো বদলান:

```php
'dsn' => 'mysql:host=localhost;dbname=CPANEL_USER_medprep;charset=utf8mb4',
'db_user' => 'CPANEL_USER_meduser',
'db_password' => 'আপনার ডেটাবেসের পাসওয়ার্ড',
'setup_token' => 'নিজের-তৈরি-কমপক্ষে-৩২-অক্ষরের-গোপন-র‍্যান্ডম-টোকেন',
```

সঠিকভাবে সেট করার পর অ্যাপ প্রয়োজনীয় table নিজে তৈরি করবে। SQL import করতে হবে না। `setup_token`-এর উদাহরণ কপি করবেন না; password manager দিয়ে নতুন random secret তৈরি করুন।

## ৪. AI সংযোগ দিন

Gemini ডিফল্ট করা হয়েছে। private/config.php-এ নিজের Google AI Studio key বসান:

```php
'ai_provider' => 'gemini',
'gemini_api_key' => 'নিজের-key-এখানে',
'gemini_model' => 'gemini-2.5-flash',
```

অথবা hosting-এ GEMINI_API_KEY environment variable দিন। Key public_html বা JavaScript-এ রাখবেন না। Model আপনার project-এ উপলব্ধ হতে হবে। API quota/billing Google AI Studio-তে পরীক্ষা করুন। উৎস সংগ্রহের নিয়ম [COLLECTOR-BN.md](docs/COLLECTOR-BN.md)-এ। আগের OpenAI সংযোগ ঐচ্ছিকভাবে রাখা আছে।

## ৫. ডোমেইন ও HTTPS

cPanel → Domains-এ ডোমেইন যুক্ত করে সঠিক document root দিন। DNS-এ hosting provider-এর দেওয়া nameserver বা A/AAAA record ব্যবহার করুন। তারপর SSL/TLS Status → AutoSSL চালু করুন এবং Domains → Force HTTPS Redirect চালু করুন।

ডোমেইনটি HTTPS-এ খুলুন। প্রথমবার “প্রথমবারের সেটআপ” দেখাবে। অ্যাডমিনের নাম, ইমেইল, পাসওয়ার্ড ও config-এর setup token দিয়ে অ্যাকাউন্ট তৈরি করুন। এরপর setup endpoint স্বয়ংক্রিয়ভাবে লক হবে।

`.mjs` ফাইলের JavaScript MIME type `.htaccess`-এ দেওয়া আছে। PDF reader এবং বাংলা font প্যাকেজের ভেতরেই আছে; CDN লাগে না।

## ৬. বই ও প্রশ্ন যোগ করুন

- **আমার বই:** PDF, বইয়ের নাম, পত্র, লেখক, সংস্করণ ও শিক্ষাবর্ষ দিন। অজানা তথ্য খালি রাখুন।
- ছাপা পৃষ্ঠা মিলাতে ঐচ্ছিক পৃষ্ঠা-ম্যাপিং ব্যবহার করুন। এটি আপনার দেওয়া তথ্য; স্বয়ংক্রিয়ভাবে যাচাই করা বইয়ের পরিচয় নয়।
- টেক্সটহীন বা ভাঙা লেখার পৃষ্ঠায় OCR বেছে নিতে পারেন। এই পৃষ্ঠার ছবি AI সেবায় যাবে।
- সব পৃষ্ঠা প্রক্রিয়াকরণের পর “উদ্ধার করা লেখা” খুলে বাংলা, সূত্র ও কলামের ক্রম যাচাই করুন।
- প্রতি অনুরোধে ১–৫টি প্রশ্ন তৈরি করুন। কম ব্যবহৃত পৃষ্ঠা আগে নেওয়া হয়, তার মধ্যে অংশ নির্বাচন র্যান্ডম। একই বা খুব কাছাকাছি প্রশ্ন বাদ যায়।
- **প্রশ্ন যাচাই:** পুরোনো প্রশ্নের JSON আমদানি করুন। `docs/IMPORT-BN.md` দেখুন।
- অ্যাডমিন মূল প্রশ্নপত্র, সাল, শিক্ষাবর্ষ, উত্তর ও ব্যাখ্যা মিলিয়ে যাচাইকৃত করলে তবেই PYQ পরীক্ষা ও বছরের তালিকায় আসে।

## ৭. চালুর পর একবার মিলিয়ে নিন

1. নতুন student অ্যাকাউন্ট খুলুন।
2. ২–৩ পৃষ্ঠার পরিচিত PDF দিয়ে লেখা, উৎস ও প্রশ্ন মিলিয়ে দেখুন।
3. AI দিয়ে এক ব্যাচ প্রশ্ন তৈরি এবং একটি প্রশ্নে follow-up chat পরীক্ষা করুন।
4. ছোট পরীক্ষা দিয়ে উত্তর save, refresh/resume, submit ও history দেখুন।
5. `https://YOUR_DOMAIN/private/config.php` বা ভুলবশত কপি করা কোনো secret file জনসমক্ষে আছে কি না পরীক্ষা করুন; নির্দেশিত বিন্যাসে private folder-এর URL থাকার কথা নয়।

## ৮. Backup ও রক্ষণাবেক্ষণ

- cPanel দিয়ে MySQL database এবং `medprep-private/uploads`-এর নিয়মিত backup নিন। config আলাদা সুরক্ষিত স্থানে রাখুন।
- “প্রশ্নব্যাংক রপ্তানি” শুধু PYQ-এর JSON দেয়; এটি অ্যাকাউন্ট, পরীক্ষার উত্তর, chat ও PDF-এর পূর্ণ backup নয়।
- প্রশ্ন রপ্তানি করে আবার আমদানি করলে আবার draft হয়। নতুন ইনস্টলে পুনরায় যাচাই করুন।
- অ্যাকাউন্টের password reset দরকার হলে নিচের CLI helper নিজের server terminal থেকে ব্যবহার করুন; public web URL নয়:

```sh
MEDPREP_CONFIG=/home/CPANEL_USER/medprep-private/config.php php /path/to/medprep/tools/reset-password.php user@example.com
```

- domain বদলালে অ্যাপের ভেতরে domain hardcode বদলাতে হয় না। subfolder-এ private path ঠিক করা লাগতে পারে।

## সীমাবদ্ধতা স্পষ্ট করে

AI-উত্তরের বিষয়গত সঠিকতা, সব পুরোনো প্রশ্নের প্রামাণিকতা, অথবা OCR-এর প্রতিটি অক্ষর কেবল সফটওয়্যার দিয়ে নিশ্চয়তা দেওয়া যায় না। এই অ্যাপ উদ্ধৃতির সঙ্গে লেখা মিলিয়ে দেখে, যাচাই-বাকি পরিচয় দেখায় এবং অ্যাডমিন review/report-এর ব্যবস্থা দেয়।

দুই কলামের জটিল PDF, ভাঙা Bengali font encoding, সূত্র/চিত্র এবং অস্পষ্ট scan-এ OCR বা উদ্ধার করা লাইন ভুল হতে পারে। ছাপা লাইনের দাবি করা হয় না। ভুল উদ্ধৃতি বা নেই এমন পৃষ্ঠা দিয়ে AI প্রশ্ন এলে তা সংরক্ষিত হয় না।

একটি বইয়ের বর্তমান edition/শিক্ষাবর্ষ স্বয়ংক্রিয়ভাবে ইন্টারনেট থেকে নির্ধারণ করা হয় না। metadata বই দেখে দিতে হবে। ১৯৯০–সর্বশেষ সময়ের পূর্ণ প্রশ্নব্যাংকের জন্য আসল/অনুমতিপ্রাপ্ত প্রশ্নপত্র এবং উত্তর-উৎস এখনও প্রয়োজন।

## সংস্করণ ৪
নতুন সুবিধা, Telegram-এর ঐচ্ছিক ভূমিকা, key-এর অবস্থা এবং চূড়ান্ত সেটআপের জন্য docs/FINAL-V4-BN.md পড়ুন।
