راهنمای نصب چاپار از صفر تا صد نسخه چاپار با گروه‌های پیشرفته و تم روشن/تاریک؛ مناسب cPanel + CloudLinux + LiteSpeed + PHP 8.2 ================================================================= مهم: این راهنما برای بسته فعلی چاپار نوشته شده است. نصب موفق روی یک هاست واقعی به اطلاعات مسیرها، مجوزها و تنظیمات همان هاست وابسته است. قبل از استفاده برای اطلاعات حساس، تست کامل انجام بده. هیچ نرم‌افزاری را نمی‌توان بدون آزمون روی هاست واقعی «بدون باگ» تضمین کرد. فهرست مطالب ----------- ۱) چیزهایی که لازم داری ۲) انتخاب ساختار امن پوشه‌ها ۳) آپلود و استخراج ZIP ۴) ساخت دیتابیس و کاربر دیتابیس ۵) واردکردن ساختار دیتابیس ۶) تنظیم config.php ۷) تنظیم PHP 8.2 و مجوز پوشه‌ها ۸) فعال‌کردن HTTPS ۹) ساخت Cron Job برای پاک‌سازی پیام‌ها (با لینک رسمی) ۱۰) ساخت اولین مدیر ۱۱) تأیید کاربران و تست عضویت ۱۲) تنظیم لوگو و رنگ چاپار ۱۳) نصب چاپار مثل اپ روی موبایل/دسکتاپ (PWA) ۱۴) فعال و غیرفعال کردن تماس‌ها ۱۵) تست حذف پیام ۲۴ ساعته ۱۶) رفع خطاهای رایج ۱۷) نکات امنیتی مهم ۱۸) شناسه عمومی، جستجوی کاربران و پروفایل ۱۹) تم روشن و تاریک ۲۰) ساخت و مدیریت کامل گروه‌ها ۲۱) ارتقا از نسخه قبلی ۲۲) چک‌لیست نهایی انتشار ۱) چیزهایی که لازم داری ---------------------- - دامنه یا زیردامنه‌ای که به هاست اشاره کند. - cPanel و دسترسی File Manager، MySQL Databases، phpMyAdmin و Cron Jobs. - PHP نسخه 8.2 یا جدیدتر؛ برای این راهنما PHP 8.2 انتخاب شود. - MySQL یا MariaDB. - افزونه‌های PHP: pdo_mysql، mbstring، fileinfo و openssl. - گواهی HTTPS معتبر. - بسته chapar-messenger-package.zip و این راهنما. ۲) انتخاب ساختار امن پوشه‌ها (پیشنهاد اول) ----------------------------------------- روش امن‌تر این است که کل پروژه در خارج از پوشه عمومی سایت باشد و فقط پوشه public در دسترس وب قرار بگیرد. نمونه مسیرها (نام کاربری cPanel را با نام واقعی خودت عوض کن): /home/CPANELUSER/chapar/app/ /home/CPANELUSER/chapar/cron/ /home/CPANELUSER/chapar/database/ /home/CPANELUSER/chapar/public/ /home/CPANELUSER/chapar/storage/ در cPanel به Domains برو و اگر هاست اجازه می‌دهد Document Root دامنه را روی این مسیر بگذار: /home/CPANELUSER/chapar/public به این ترتیب پوشه app و storage مستقیماً از وب قابل دسترسی نیستند. روش جایگزین، فقط اگر تغییر Document Root ممکن نیست: - محتویات پوشه public را داخل public_html کپی کن. - پوشه‌های app، storage، cron و database را در /home/CPANELUSER/chapar نگه دار؛ آن‌ها را داخل public_html قرار نده. - در این حالت کد، مسیر رایج /home/CPANELUSER/chapar/app را پیدا می‌کند. اگر ساختار پوشه‌هایت متفاوت است، نصب نیاز به تنظیم مسیر دارد. - فایل‌های داخل public باید در ریشه public_html باشند؛ یعنی index.php در public_html/index.php قرار بگیرد. ۳) آپلود و استخراج ZIP ---------------------- ۱. وارد cPanel شو. ۲. File Manager را باز کن. ۳. به Home برو؛ ترجیحاً بیرون public_html پوشه‌ای با نام chapar بساز. ۴. ZIP را در آن پوشه آپلود کن. ۵. روی ZIP کلیک راست کن و Extract را بزن. ۶. بعد از استخراج، ساختار باید شبیه این باشد: chapar/README.md chapar/app/ chapar/cron/ chapar/database/ chapar/public/ chapar/storage/ ۷. اگر استخراج یک پوشه اضافی ساخت، دقت کن مسیر نهایی به صورت chapar/chapar/app نباشد؛ باید chapar/app باشد. ۸. اگر از روش جایگزین استفاده می‌کنی، فقط محتویات public را به public_html کپی کن؛ باقی پوشه‌ها بیرون بمانند. ۴) ساخت دیتابیس و کاربر دیتابیس ------------------------------- ۱. در cPanel بخش MySQL Databases یا Database Wizard را باز کن. ۲. یک دیتابیس بساز؛ مثلاً نامی مانند chapar_db. ۳. یک کاربر دیتابیس بساز و برای آن رمز قوی و یکتا تعیین کن. ۴. کاربر را به دیتابیس وصل کن. ۵. گزینه ALL PRIVILEGES را برای این کاربر روی همین دیتابیس فعال کن. ۶. نام کامل دیتابیس و کاربر را یادداشت کن. در cPanel معمولاً پیشوند حساب به نام اضافه می‌شود؛ مثلاً cpuser_chapar_db. همان نام کامل را در config.php وارد کن. ۷. رمز دیتابیس را در فایل عمومی، پیام‌رسان یا چت عمومی منتشر نکن. ۵) واردکردن ساختار دیتابیس -------------------------- ۱. phpMyAdmin را از cPanel باز کن. ۲. دیتابیسی را که همین الان ساختی از ستون سمت چپ انتخاب کن. ۳. تب Import را بزن. ۴. فایل database/schema.sql را از کامپیوتر انتخاب کن. اگر فایل داخل File Manager است، ابتدا آن را دانلود کن؛ یا از روش Import فایل محلی استفاده کن. ۵. فرمت SQL را انتخاب کن و Go/Import را بزن. ۶. باید جدول‌هایی مانند users، settings، conversations، conversation_members و messages ساخته شوند. جدول users در schema.sql جدید ستون‌های public_id و bio را هم دارد. ۷. اگر دیتابیس از قبل داده واقعی دارد، بدون نسخه پشتیبان schema.sql را دوباره وارد نکن. ۸. اگر داری از نسخه قبلی چاپار ارتقا می‌دهی (دیتابیس قبلاً ساخته شده و ستون public_id ندارد)، اول از دیتابیس Backup بگیر، سپس در phpMyAdmin دیتابیس را انتخاب کن و فقط یک بار فایل database/migrations/upgrade_public_profiles.sql را از تب Import اجرا کن. این فایل برای دیتابیس قدیمی است؛ روی دیتابیس تازه‌ای که با schema.sql جدید ساخته شده اجرا نکن. ۹. بعد از ارتقا، در تب Structure جدول users بررسی کن public_id و bio وجود داشته باشند. شناسه کاربران قدیمی به شکل CP-XXXXXXXX ساخته می‌شود؛ کاربران جدید هنگام ثبت‌نام شناسه تصادفی جدید می‌گیرند. ۶) تنظیم config.php ------------------- ۱. در File Manager وارد chapar/app شو. ۲. از config.example.php یک کپی بساز. ۳. نام کپی را دقیقاً config.php بگذار. ۴. config.php را Edit کن و این موارد را عوض کن: 'app_name' => 'چاپار', 'app_url' => 'https://YOUR-DOMAIN.example', 'timezone' => 'UTC', 'db' => [ 'host' => 'localhost', 'name' => 'CPANEL_PREFIX_DATABASE', 'user' => 'CPANEL_PREFIX_DBUSER', 'pass' => 'DATABASE_PASSWORD', 'charset' => 'utf8mb4', ], 'session_secure' => true, - YOUR-DOMAIN.example را با دامنه واقعی عوض کن و https:// را نگه دار. - name و user را با نام کامل دیتابیس و کاربر دیتابیس عوض کن. - pass را با رمز دیتابیس جایگزین کن. - اگر هاست برای MySQL نام میزبان دیگری داده، همان را از پشتیبانی هاست بگیر؛ در بسیاری از هاست‌ها localhost است. - session_secure باید روی true بماند وقتی HTTPS فعال است. - فایل نهایی باید app/config.php باشد؛ فقط config.example.php کافی نیست. - دسترسی config.php را در صورت امکان 640 تنظیم کن. ۷) تنظیم PHP 8.2 و مجوز پوشه‌ها -------------------------------- ۱. در cPanel وارد MultiPHP Manager یا Select PHP Version شو. ۲. دامنه چاپار را انتخاب کن و PHP 8.2 را فعال کن. ۳. در بخش Extensions مطمئن شو pdo_mysql، mbstring، fileinfo و openssl فعال‌اند. نام و محل این گزینه‌ها بسته به نسخه cPanel فرق می‌کند. ۴. پوشه storage باید قابل نوشتن توسط PHP باشد. اگر وجود ندارند، این دو پوشه را بساز: storage/uploads storage/branding storage/avatars ۵. مجوزهای معمول مناسب برای پوشه‌ها 750 یا 770 است؛ فایل‌ها معمولاً 640 یا 660. اگر با این مجوزها نوشتن انجام نشد، از پشتیبانی هاست راهنمایی بگیر. ۶. از مجوز 777 استفاده نکن. ۷. اگر امکان تغییر مالکیت/مجوز را نداری، پشتیبانی هاست باید دسترسی درست را تنظیم کند. ۸) فعال‌کردن HTTPS ------------------ ۱. در cPanel بخش SSL/TLS Status یا ابزار SSL هاست را باز کن. ۲. گواهی معتبر دامنه را فعال کن؛ در بسیاری از هاست‌ها AutoSSL در دسترس است. ۳. سایت را با https://YOUR-DOMAIN باز کن و بررسی کن مرورگر خطای گواهی ندهد. ۴. اگر HTTPS هنوز فعال نیست، تماس میکروفون/دوربین و نصب PWA ممکن است کار نکند؛ پیش از تست تماس حتماً HTTPS را درست کن. ۹) ساخت Cron Job برای پاک‌سازی پیام‌ها (بسیار مهم) -------------------------------------------------- Cron Job باعث می‌شود فایل‌های پیام‌های منقضی‌شده و رکوردهای پیام قدیمی از دیتابیس پاک شوند. پیام در برنامه پس از رسیدن زمان انقضا دیگر نمایش داده نمی‌شود؛ پاک‌سازی فیزیکی دیتابیس و فایل در اجرای Cron انجام می‌شود. با اجرای هر ۵ دقیقه، پاک‌سازی معمولاً حداکثر حدود ۵ دقیقه بعد از زمان انقضا انجام می‌شود، نه دقیقاً در همان ثانیه. لینک رسمی راهنمای cPanel برای Cron Jobs: https://docs.cpanel.net/cpanel/advanced/cron-jobs/ روش ساخت: ۱. وارد cPanel شو. ۲. در نوار جستجو Cron Jobs را جستجو کن یا از مسیر Home → Advanced → Cron Jobs برو. ۳. اگر بخش Cron Email دارد، می‌توانی ایمیلی وارد کنی تا خروجی‌های خطا برایت ارسال شود. در زمان عیب‌یابی بهتر است خروجی را در فایل log ذخیره کنی. ۴. در قسمت Add New Cron Job زمان‌بندی را این‌طور بگذار: Minute: */5 Hour: * Day: * Month: * Weekday: * ۵. در Command فرمان زیر را وارد کن؛ حتماً CPANELUSER را عوض کن: /opt/cpanel/ea-php82/root/usr/bin/php -q /home/CPANELUSER/chapar/cron/cleanup.php >> /home/CPANELUSER/chapar/storage/cleanup.log 2>&1 این مسیر PHP در بسیاری از هاست‌های cPanel/CloudLinux با PHP 8.2 رایج است، اما تضمینی نیست که روی همه هاست‌ها یکسان باشد. اگر اجرا نشد: - از پشتیبانی هاست مسیر دقیق PHP CLI نسخه 8.2 را بپرس. - اگر Terminal در cPanel فعال است، فرمان `which php` را اجرا کن؛ ولی دقت کن خروجی آن ممکن است نسخه پیش‌فرض باشد، نه PHP 8.2. - مسیرهای رایج دیگر ممکن است /usr/local/bin/php یا /usr/bin/php باشند. از نسخه‌ای استفاده کن که واقعاً PHP 8.2 باشد. - مسیر /home/CPANELUSER/chapar باید مسیر واقعی نصب باشد. اگر پروژه را در مسیر دیگری گذاشتی، مسیر Cron را نیز اصلاح کن. ۶. Add New Cron Job را بزن. ۷. در جدول Current Cron Jobs بررسی کن وظیفه ذخیره شده باشد. ۸. بعد از ۵ تا ۱۰ دقیقه File Manager را بررسی کن که storage/cleanup.log ایجاد شده باشد. اگر فایل log ساخته نشده، این به‌تنهایی ثابت نمی‌کند Cron خراب است؛ مسیر، مجوزها و تنظیم ایمیل Cron را هم بررسی کن. ۹. اگر در log خطای «bootstrap not found» دیدی، مسیر فایل cron یا جای app را اشتباه وارد کرده‌ای. ۱۰. اگر خطای اتصال دیتابیس دیدی، app/config.php را بررسی کن. نکته: اجرای Cron هر ۵ دقیقه سبک است، اما اگر حجم پیام‌ها بسیار زیاد شد باید محدودیت‌های اسکریپت پاک‌سازی و زمان‌بندی دوباره ارزیابی شود. ۱۰) ساخت اولین مدیر ------------------- ۱. پس از تنظیم دیتابیس و config.php، سایت را باز کن: https://YOUR-DOMAIN.example/?action=register ۲. یک حساب با ایمیل و رمز قوی بساز. رمز حداقل ۱۰ نویسه باشد. ۳. چون هنوز مدیری وجود ندارد، حساب تازه به حالت pending می‌رود و نمی‌تواند وارد فضای پیام‌رسان شود. برای اولین مدیر باید نقش را یک بار در دیتابیس تنظیم کنی. ۴. phpMyAdmin را باز کن و دیتابیس چاپار را انتخاب کن. ۵. تب SQL را باز کن و این دستور را اجرا کن. ایمیل نمونه را با همان ایمیلی عوض کن که در ثبت‌نام وارد کردی: UPDATE users SET role='admin', status='approved', approved_at=UTC_TIMESTAMP() WHERE email='YOUR-ADMIN-EMAIL@example.com'; ۶. پیام موفقیت را بررسی کن و مطمئن شو یک ردیف تغییر کرده است. ۷. به سایت برگرد و وارد شو. اگر قبلاً صفحه را باز گذاشته بودی، خارج شو و دوباره وارد شو. ۸. گزینه «پنل مدیریت» باید در نوار بالا ظاهر شود و آدرس آن معمولاً این است: https://YOUR-DOMAIN.example/?action=admin ۹. اگر ایمیل را اشتباه وارد کرده باشی، هیچ ردیفی تغییر نمی‌کند. ایمیل را در جدول users پیدا کن و دستور را با مقدار دقیق اجرا کن. ۱۰. بعد از ساخت مدیر، رمز دیتابیس و فایل config.php را در اختیار کاربران عادی قرار نده. ۱۱) تأیید کاربران و تست عضویت ----------------------------- ۱. از مرورگر خصوصی/ناشناس یا یک دستگاه دیگر، یک حساب آزمایشی بساز. ۲. آن حساب باید پیام بدهد که درخواست عضویت ثبت شده و منتظر تأیید مدیر است. ۳. با حساب مدیر وارد پنل مدیریت شو. ۴. در بخش درخواست‌های عضویت، کاربر آزمایشی را تأیید کن. ۵. حالا کاربر باید بتواند خارج شود و دوباره وارد شود. ۶. در پنل مدیریت امکان رد درخواست یا مسدودسازی/فعال‌سازی کاربران موجود است. نکته مهم درباره حریم خصوصی عضویت: فرم ثبت‌نام فعلی قابل دسترسی از صفحه ورود است؛ کاربران جدید می‌توانند درخواست بفرستند، اما تا تأیید مدیر وارد فضای گفتگو نمی‌شوند. سیستم دعوت‌نامه اختصاصی با کد دعوت در این بسته پیاده‌سازی نشده است. ۱۲) تنظیم لوگو و رنگ چاپار -------------------------- ۱. وارد حساب مدیر شو و به پنل مدیریت برو. ۲. بخش تنظیمات/شخصی‌سازی برند را پیدا کن. ۳. نام نمایشی و رنگ اصلی را در صورت نیاز تغییر بده. ۴. برای لوگو، فایل chapar-logo.png را انتخاب کن. این فایل PNG است و برای آپلود در پنل مناسب‌تر از SVG است. ۵. پنل فعلی PNG، JPG و WebP تا حداکثر ۲ مگابایت را می‌پذیرد؛ فایل chapar-logo.svg را در قسمت آپلود انتخاب نکن، چون SVG در لیست فرمت‌های مجاز پنل نیست. ۶. ذخیره تنظیمات را بزن و صفحه را تازه‌سازی کن. ۷. اگر لوگو تغییر نکرد، مرورگر را با Ctrl+F5 تازه‌سازی کن یا صفحه را در پنجره خصوصی باز کن. ۸. فایل public/assets/logo.svg در بسته به عنوان لوگوی پیش‌فرض/جایگزین وجود دارد. فایل‌های logo.png و logo.svg را در صورت نیاز می‌توانی برای استفاده در طراحی‌های دیگر نیز برداری. ۱۳) نصب چاپار مثل اپ روی موبایل/دسکتاپ (PWA) -------------------------------------------- پیش‌نیاز: سایت باید با HTTPS معتبر باز شود. اندروید (Chrome/Edge): ۱. سایت چاپار را باز کن. ۲. منوی مرورگر را باز کن. ۳. گزینه Install app یا Add to Home screen را انتخاب کن. ۴. تأیید کن و آیکون چاپار را از صفحه اصلی باز کن. ۵. اگر گزینه نصب ظاهر نشد، HTTPS، فایل manifest.webmanifest و service worker را بررسی کن و یک بار مرورگر را ببند/باز کن. iPhone/iPad (Safari): ۱. سایت را در Safari باز کن. ۲. دکمه Share را بزن. ۳. Add to Home Screen را انتخاب کن. ۴. Add را بزن. Windows/macOS: - در مرورگرهای سازگار، از منوی آدرس/مرورگر گزینه Install app یا Install this site as an app را انتخاب کن. PWA یعنی وب‌اپ قابل نصب است؛ این به‌خودی‌خود به معنی اپ بومی فروشگاهی یا Push Notification کامل نیست. اعلان Push واقعی در این بسته کامل نشده است. ۱۴) فعال و غیرفعال کردن تماس‌ها ------------------------------- ۱. از حساب مدیر به پنل مدیریت برو. ۲. بخش تنظیمات تماس را پیدا کن. ۳. گزینه‌های تماس صوتی دونفره، تصویری دونفره، صوتی گروهی و تصویری گروهی را جداگانه روشن/خاموش کن. ۴. تعداد شرکت‌کنندگان تماس گروهی را از گزینه مربوطه حداکثر تا ۵ نفر انتخاب کن. ۵. در شروع کار، تماس تصویری گروهی را خاموش نگه دار و ابتدا با دو کاربر در دو مرورگر آزمایش کن. ۶. برای تماس، مرورگر باید اجازه استفاده از میکروفون/دوربین داشته باشد. ۷. اگر تماس در بعضی شبکه‌ها وصل نشد، ممکن است سرور TURN لازم باشد. STUN به تنهایی تمام شبکه‌ها را پوشش نمی‌دهد. توضیح بار هاست: تماس WebRTC در این بسته به روش mesh پیاده شده؛ معمولاً صدای/تصویر زنده مستقیماً بین مرورگر شرکت‌کنندگان منتقل می‌شود، نه از پردازنده هاست. اما سیگنال‌دهی و وضعیت تماس از PHP/MySQL عبور می‌کند. در تماس گروهی ۵ نفره هر دستگاه ممکن است تا چهار جریان خروجی داشته باشد؛ فشار مهم‌تر می‌تواند روی اینترنت و CPU دستگاه‌های کاربران باشد. اگر TURN اضافه شود، پهنای باند سرور TURN مهم می‌شود. کیفیت تماس روی همه شبکه‌ها تضمین نشده است. ۱۵) تست حذف پیام ۲۴ ساعته ------------------------ ۱. با دو کاربر تأییدشده وارد شو و یک گفتگوی خصوصی بساز. ۲. یک پیام متنی و یک فایل آزمایشی ارسال کن. ۳. بررسی کن پیام در گفتگو نمایش داده شود. ۴. زمان انقضای پیام از زمان ساخت آن ۲۴ ساعت است. API پیام‌های منقضی‌شده را نمایش نمی‌دهد. ۵. Cron هر ۵ دقیقه اسکریپت cleanup.php را اجرا می‌کند تا پیام‌های منقضی‌شده و فایل‌های پیوستشان را از محل ذخیره‌سازی حذف کند. ۶. برای آزمایش سریع، پیام‌ها را به صورت دستی از دیتابیس حذف نکن مگر در محیط آزمایشی و با آگاهی کامل. ۷. نسخه‌های قدیمی موجود در بکاپ‌های هاست ممکن است تا زمان انقضای بکاپ باقی بمانند. سیاست بکاپ و حذف آن‌ها جداگانه باید تنظیم شود. ۸. حذف از سرور نمی‌تواند نسخه‌ای را که کاربر دانلود کرده، اسکرین‌شات یا کپی بیرونی را از دستگاه او حذف کند. ۱۶) رفع خطاهای رایج ------------------- خطای 500 یا صفحه سفید: - app/config.php وجود دارد؟ - نام دیتابیس، کاربر و رمز درست‌اند؟ - مسیر پوشه‌ها طبق یکی از دو روش نصب است؟ - لاگ خطاهای PHP در cPanel → Errors یا بخش Logs را بررسی کن؛ خطاهای نمایش داده‌شده به بازدیدکنندگان را در سایت عمومی روشن نگذار. پیام «تنظیمات چاپار موجود نیست»: - config.example.php را کپی کن و اسم کپی را config.php بگذار. - config.php باید داخل پوشه app باشد. خطای اتصال دیتابیس: - پیشوند نام دیتابیس و کاربر را بررسی کن. - مطمئن شو کاربر به دیتابیس متصل شده و ALL PRIVILEGES دارد. - اگر DB host برابر localhost نیست، از پشتیبانی هاست مقدار درست را بپرس. ثبت‌نام انجام می‌شود اما ورود ممکن نیست: - کاربر باید توسط مدیر تأیید شود. - اگر این اولین مدیر است، دستور بخش ۱۰ را اجرا کن. فایل آپلود نمی‌شود: - فضای هاست را بررسی کن. - storage/uploads قابل نوشتن باشد. - سقف آپلود PHP و سقف ۱۰ مگابایتی برنامه را بررسی کن. پنل لوگو سقف ۲ مگابایت دارد. Cron کار نمی‌کند: - مسیر PHP CLI نسخه 8.2 را از هاست بگیر. - مسیر کامل cleanup.php را اصلاح کن. - مسیر storage/cleanup.log و مجوز نوشتن را بررسی کن. - فایل cron را با مرورگر باز نکن؛ آن باید توسط PHP CLI اجرا شود. لوگو دیده نمی‌شود: - برای پنل مدیریت فایل PNG را استفاده کن. - فرمت و حجم فایل را بررسی کن. - صفحه را با Ctrl+F5 تازه‌سازی کن. - بررسی کن public/assets/logo.svg و public/assets/logo.png در محل درست هستند. میکروفون یا دوربین فعال نیست: - سایت باید HTTPS باشد. - از تنظیمات مرورگر مجوز Microphone و Camera را بده. - دستگاه ورودی صحیح را انتخاب کن و برنامه‌های دیگرِ در حال استفاده از میکروفون را ببند. تماس وصل نمی‌شود: - تماس را ابتدا بین دو مرورگر روی شبکه‌های مختلف آزمایش کن. - تنظیمات تماس در پنل مدیر را بررسی کن. - احتمال نیاز به TURN را با پشتیبانی فنی بررسی کن. ۱۷) نکات امنیتی مهم ------------------- - app و storage را داخل public_html نگذار، مگر این‌که ساختار وب‌سرور به‌درستی محافظت شده باشد. - رمز دیتابیس و رمز مدیر باید قوی و متفاوت باشند. - config.php را به کسی نده و در Git عمومی قرار نده. - مجوز 777 استفاده نکن. - HTTPS را همیشه فعال نگه دار. - قبل از به‌روزرسانی، از دیتابیس و فایل‌ها نسخه پشتیبان بگیر. - اگر از نسخه پشتیبان استفاده می‌کنی، زمان نگهداری بکاپ‌ها را با سیاست حذف پیام ۲۴ ساعته هماهنگ کن. - این بسته رمزنگاری سرتاسری (E2EE) ندارد؛ بنابراین آن را به‌عنوان پیام‌رسانی با رمزنگاری سرتاسری تضمین‌شده معرفی نکن. - قبل از انتشار عمومی، بازبینی امنیتی و تست نفوذ مستقل انجام بده. ۱۸) شناسه عمومی، جستجوی کاربران و پروفایل ------------------------------------------- این نسخه چاپار قابلیت جستجوی کاربر و پروفایل را دارد. شناسه عمومی چیست؟ - هر کاربر یک شناسه عمومی مستقل با قالب CP-XXXXXXXX دارد؛ برای نمونه CP-1A2B3C4D. شناسه عمومی با کلید داخلی دیتابیس فرق دارد و می‌توان آن را به دیگر اعضای تأییدشده داد. - نام کاربری یکتا است و با @username پیدا می‌شود. حروف انگلیسی، عدد، نقطه، خط تیره و زیرخط در نام کاربری مجاز است. - کاربران تأییدنشده، ردشده یا مسدودشده در جستجو نمایش داده نمی‌شوند. ایمیل و شماره تماس در پروفایل عمومی نمایش داده نمی‌شود. پیدا کردن و پیام دادن به کاربر: ۱. پس از ورود به چاپار، «گفتگوی جدید» را انتخاب کن. ۲. در کادر جستجو @نام‌کاربری، شناسه‌ای مانند CP-1A2B3C4D یا بخشی از شناسه/نام را وارد کن. ۳. از نتایج، «پروفایل» را بزن تا نام، نام کاربری، شناسه و بیوگرافی عمومی را ببینی؛ یا «گفتگو» را بزن تا گفتگوی خصوصی ساخته/باز شود. ۴. فقط حساب‌های تأییدشده نمایش داده می‌شوند. جستجو حداقل دو نویسه می‌خواهد و حداکثر ۲۵ نتیجه برمی‌گرداند. ویرایش پروفایل خودت: ۱. دکمه «پروفایل من» در نوار بالای صفحه را بزن. ۲. نام نمایشی و بیوگرافی را ویرایش کن. بیوگرافی حداکثر ۲۸۰ نویسه است. ۳. در صورت نیاز تصویر PNG، JPG یا WebP تا ۲ مگابایت انتخاب کن. ۴. «ذخیره پروفایل» را بزن. فایل تصویر در storage/avatars و خارج از مسیر عمومی سایت نگهداری می‌شود. ۵. شناسه عمومی و نام کاربری از این فرم قابل تغییر نیستند؛ این کار از تکراری شدن یا گم‌شدن شناسه جلوگیری می‌کند. ارتقا از نسخه قدیمی: - اگر قبلاً چاپار را نصب کرده‌ای، پیش از جایگزینی کد از دیتابیس و فایل‌ها Backup بگیر. - فایل database/migrations/upgrade_public_profiles.sql را فقط روی دیتابیس قدیمی اجرا کن؛ اگر schema.sql جدید را روی دیتابیس تازه وارد کرده‌ای، migration را اجرا نکن. - پس از اجرای migration، نسخه جدید فایل‌های برنامه را آپلود کن و پوشه storage/avatars را قابل نوشتن برای PHP قرار بده. - اگر خطای Unknown column public_id یا bio دیدی، migration برای دیتابیس قدیمی اجرا نشده یا روی دیتابیس اشتباه اجرا شده است. سایر امکانات/محدودیت‌ها: - گفتگوی خصوصی و گروه (بدون کانال)، مدیریت اعضا و مدیران گروه، تم روشن/تاریک، ارسال فایل، پاسخ/ویرایش/حذف پیام، واکنش، جستجوی پیام، فوروارد متن، تنظیمات تماس و PWA پایه در بسته وجود دارند. - سیستم دعوت‌نامه با کد اختصاصی، تأیید ایمیل، بازیابی رمز عبور ایمیلی، اعلان Push واقعی و رمزنگاری سرتاسری (E2EE) در این بسته پیاده‌سازی نشده‌اند. - فوروارد فایل به صورت مستقیم فعال نیست؛ در این نسخه فوروارد متن پایه است. - کد تماس باید روی هاست و شبکه واقعی آزمایش شود؛ تضمین بدون باگ بودن روی همه شبکه‌ها ممکن نیست. ۱۹) چک‌لیست نهایی انتشار ------------------------ [ ] دامنه به هاست متصل است. [ ] HTTPS بدون خطا کار می‌کند. [ ] PHP 8.2 و افزونه‌های لازم فعال‌اند. [ ] دیتابیس و کاربر ساخته شده‌اند. [ ] schema.sql وارد شده است (یا در ارتقای نسخه قدیمی، migration مربوط به public_id و bio اجرا شده است). [ ] app/config.php با مقادیر واقعی تنظیم شده است. [ ] storage/uploads، storage/branding و storage/avatars قابل نوشتن‌اند. [ ] اولین مدیر از طریق SQL ساخته شده است. [ ] یک کاربر آزمایشی تأیید شده است. [ ] جستجوی کاربر با @username و CP-شناسه آزمایش شده است. [ ] پروفایل، بیوگرافی و بارگذاری تصویر پروفایل آزمایش شده‌اند. [ ] گفتگوی خصوصی و گروه آزمایش شده‌اند. [ ] ارسال متن، تصویر، صوت و فایل آزمایش شده است. [ ] Cron Job با PHP 8.2 و زمان‌بندی */5 * * * * ساخته شده است. [ ] اجرای Cron و فایل log بررسی شده است. [ ] حذف پیام منقضی‌شده و فایل پیوست تست شده است. [ ] تنظیمات تماس صوتی/تصویری از پنل آزمایش شده‌اند. [ ] نصب PWA روی موبایل آزمایش شده است. [ ] نسخه پشتیبان تهیه شده است. [ ] محدودیت‌های این بسته به کاربران اعلام شده‌اند. لینک رسمی Cron Jobs در cPanel ----------------------------- https://docs.cpanel.net/cpanel/advanced/cron-jobs/ پایان راهنما. ۱۹) تم روشن و تاریک ------------------ - در نوار بالای برنامه دکمه «تم روشن/تم تاریک» قرار دارد. - انتخاب تم در همان مرورگر ذخیره می‌شود؛ برای هر دستگاه جداگانه است. - این تم، تنظیمات شخصی مرورگر است و در دیتابیس ذخیره نمی‌شود. - اگر تم بعد از به‌روزرسانی CSS تغییر نکرد، مرورگر را با Ctrl+F5 تازه‌سازی کن یا کش را پاک کن. ۲۰) ساخت و مدیریت کامل گروه‌ها ------------------------------ ۱. از ستون گفتگوها روی «+ گروه» کلیک کن. ۲. نام گروه را وارد کن؛ توضیحات تا ۵۰۰ نویسه اختیاری است. ۳. در صورت نیاز تصویر JPG/PNG/WebP حداکثر ۳ مگابایت انتخاب کن. ۴. اعضای اولیه را انتخاب کن؛ می‌توانی در فهرست اعضا جستجو کنی. ۵. «ساخت گروه و شروع گفتگو» را بزن. ۶. پس از بازشدن گروه، دکمه «اطلاعات و مدیریت گروه» (آیکون فهرست) را در بالای گفتگو بزن. ۷. مالک یا مدیر گروه می‌تواند نام و توضیحات را ویرایش کند، تصویر را عوض کند، عضو اضافه کند و لینک دعوت بسازد. ۸. مالک گروه می‌تواند اعضای عادی را مدیر کند، نقش مدیریت را پس بگیرد و مالکیت را به عضو دیگری منتقل کند. ۹. مدیران می‌توانند اعضای عادی را حذف کنند؛ مدیر نمی‌تواند مالک را حذف کند. فقط مالک می‌تواند گروه را کامل حذف کند. ۱۰. اعضای عادی می‌توانند گروه را ترک کنند. مالک باید ابتدا مالکیت را منتقل کند یا گروه را حذف کند. ۱۱. لینک دعوت از پنل مدیریت گروه ساخته می‌شود و در کلیپ‌بورد کپی می‌شود. فقط کاربران واردشده و تأییدشده چاپار می‌توانند عضو شوند. ۱۲. گزینه «اجازه افزودن اعضا به همه اعضا» فقط توسط مالک تغییر می‌کند. در حالت خاموش، فقط مالک و مدیران عضو اضافه می‌کنند. نکته: لینک دعوت را عمومی منتشر نکن؛ هر کاربر تأییدشده‌ای که لینک را داشته باشد می‌تواند وارد گروه شود. برای لغو لینک دعوت در حال حاضر باید کد invite_code گروه از دیتابیس پاک شود؛ رابط لغو لینک در این نسخه موجود نیست. ۲۱) ارتقا از نسخه قبلی ---------------------- اگر قبلاً چاپار را نصب کرده‌ای و می‌خواهی اطلاعات کاربران و پیام‌ها حفظ شود: ۱. از phpMyAdmin یک Export کامل از دیتابیس بگیر. ۲. از کل پوشه‌های پروژه، به‌خصوص app/config.php و storage نسخه پشتیبان تهیه کن. ۳. فایل‌های کد جدید را آپلود کن و app/config.php و فایل‌های داده‌ای خودت را بازنویسی نکن. ۴. در phpMyAdmin دیتابیس چاپار را انتخاب کن و فایل `database/migrations/upgrade_groups_themes.sql` را فقط یک بار اجرا کن. ۵. این migration، کانال‌های قبلی را به گروه تبدیل می‌کند و ستون‌های تصویر، توضیحات، لینک دعوت و تنظیمات گروه را اضافه می‌کند. ۶. اگر پیام خطای «Duplicate column» یا «Duplicate key» دریافت کردی، migration قبلاً بخشی یا تمام اجرا شده است؛ آن را کورکورانه دوباره اجرا نکن. از پشتیبان استفاده کن یا وضعیت ستون‌ها را با بخش Structure بررسی کن. ۷. اگر نصب تازه است و `database/schema.sql` جدید را وارد کرده‌ای، migration را اجرا نکن. ۸. پس از ارتقا، یک گروه آزمایشی بساز، تصویر و توضیحات را تغییر بده، عضو اضافه کن، مدیر تعیین کن، لینک دعوت را در یک مرورگر دیگر تست کن و سپس گروه آزمایشی را حذف کن. ۲۲) چک‌لیست نهایی انتشار ------------------------ [ ] HTTPS فعال است و فایل config.php شامل رمز دیتابیس درست است. [ ] پوشه storage خارج از public و برای PHP قابل نوشتن است. [ ] Cron Job هر ۵ دقیقه اجرا می‌شود و فایل‌های منقضی را پاک می‌کند. [ ] ورود، ثبت‌نام، تأیید مدیر و مسدودسازی آزمایش شده‌اند. [ ] جستجوی @نام‌کاربری و شناسه عمومی آزمایش شده است. [ ] تم روشن و تاریک روی موبایل و دسکتاپ آزمایش شده است. [ ] ساخت گروه با/بدون تصویر و توضیحات آزمایش شده است. [ ] افزودن/حذف عضو و ارتقای عضو به مدیر آزمایش شده است. [ ] انتقال مالکیت، ترک گروه و حذف گروه آزمایش شده‌اند. [ ] لینک دعوت فقط برای حساب تأییدشده قابل استفاده است. [ ] حذف پیام و فایل پس از ۲۴ ساعت با Cron آزمایش شده است. [ ] تماس‌ها فقط پس از تست روی شبکه واقعی فعال شده‌اند. [ ] نسخه پشتیبان خارج از پوشه عمومی نگهداری می‌شود. یادآوری: این بسته برای نصب روی هاست اشتراکی طراحی شده، اما تماس WebRTC، ارسال فایل، امنیت و عملکرد گروه‌ها باید روی هاست واقعی و مرورگرهای هدف آزموده شوند. این راهنما تضمین نبود باگ نمی‌دهد.