استقرار در هاست

قالب استاتیک است؛ استقرار یعنی کپی‌کردن پوشه خروجی. این بخش نکات عملی برای هاست‌های واقعی است.

پیش‌نیازهای هاست

  • پشتیبانی از فایل‌های .woff2 (همه هاست‌های امروزی دارند)
  • امکان تنظیم هدر کش (اختیاری اما توصیه‌شده)
  • گواهی SSL (برای theme-boot.js و localStorage روی دامنه امن توصیه می‌شود)

روش ۱ — آپلود مستقیم

npm run build
rsync -avz dist/ user@server:/var/www/html/

روش ۲ — زیرپوشه

قالب همه لینک‌ها را نسبی می‌سازد، پس در https://example.com/admin/ هم بدون تغییر کار می‌کند. فقط website را در src/config/config.js به آدرس نهایی تغییر دهید تا sitemap.xml درست تولید شود.

روش ۳ — CDN

مسیرکش
assets/**۱ سال، immutable
*.htmlبدون کش یا no-cache
sitemap.xml / robots.txt۱ روز

نام فایل‌های باندل هش دارند (modules-DnMG3z6r.css)، پس انتشار نسخه جدید بدون نگرانی از کش قدیمی انجام می‌شود.

تنظیمات هاست اشتراکی

.htaccess نمونه (Apache):

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^([^\.]+)$ $1.html [NC,L]
</IfModule>

<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/css application/javascript image/svg+xml
</IfModule>

با این قواعد، هم dashboards/analytics.html و هم dashboards/analytics کار می‌کنند.

هدرهای امنیتی پیشنهادی

Header set X-Content-Type-Options "nosniff"
Header set Referrer-Policy "strict-origin-when-cross-origin"
Header set Permissions-Policy "geolocation=(), microphone=()"

صفحه خطا

فایل system/404.html را به‌عنوان صفحه خطای دامنه معرفی کنید (در cPanel → Error Pages). بقیه حالت‌ها: system/403.html, system/500.html, system/maintenance.html, system/offline.html.

چک‌لیست پس از انتشار

  1. صفحه اصلی و یک داشبورد را در دسکتاپ و موبایل باز کنید.
  2. در کنسول مرورگر خطا نداشته باشید.
  3. حالت تاریک و تغییر زبان را بیازمایید (تنظیمات باید ذخیره بماند).
  4. یک لینک نسبی از یک صفحه تودرتو بزنید (crm/contacts.html → users/details.html).
  5. sitemap.xml و robots.txt را باز کنید.
  6. سرعت: از ابزار Lighthouse استفاده کنید؛ انتظار امتیاز بالای ۹۰ برای عملکرد و دسترس‌پذیری وجود دارد.
نکته: اگر روی سرور امکان فشرده‌سازی ندارید، فایل‌های .css و .js خروجی گزیپ‌شده‌اند (Vite گزارش حجم gzip را چاپ می‌کند) اما فایل نهایی فشرده نیست؛ فعال‌کردن gzip سرور تفاوت محسوسی در سرعت ایجاد می‌کند
هشدار: پوشه tools/ فقط برای ساخت است و نباید روی هاست آپلود شود

همین‌طور node_modules و docs/ مارک‌داون.

Deploying to a host

The template is static; deploying means copying the output folder. This section contains practical notes for real hosts.

Host requirements

  • Support for .woff2 files (every modern host has it)
  • The ability to set cache headers (optional but recommended)
  • An SSL certificate (recommended for theme-boot.js and localStorage on a secure domain)

Method 1 — direct upload

npm run build
rsync -avz dist/ user@server:/var/www/html/

Method 2 — subfolder

The template makes every link relative, so it also works unchanged at https://example.com/admin/. Just change website in src/config/config.js to the final address so sitemap.xml is generated correctly.

Method 3 — CDN

PathCache
assets/**1 year, immutable
*.htmlNo cache or no-cache
sitemap.xml / robots.txt1 day

Bundle file names are hashed (modules-DnMG3z6r.css), so a new version can be released without worrying about stale caches.

Shared hosting settings

Sample .htaccess (Apache):

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^([^\.]+)$ $1.html [NC,L]
</IfModule>

<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/css application/javascript image/svg+xml
</IfModule>

With these rules both dashboards/analytics.html and dashboards/analytics work.

Recommended security headers

Header set X-Content-Type-Options "nosniff"
Header set Referrer-Policy "strict-origin-when-cross-origin"
Header set Permissions-Policy "geolocation=(), microphone=()"

Error page

Register system/404.html as the domain's error page (in cPanel → Error Pages). Other states: system/403.html, system/500.html, system/maintenance.html, system/offline.html.

Post-release checklist

  1. Open the home page and one dashboard on desktop and mobile.
  2. Make sure there are no errors in the browser console.
  3. Try dark mode and switching language (settings must persist).
  4. Click a relative link from a nested page (crm/contacts.html → users/details.html).
  5. Open sitemap.xml and robots.txt.
  6. Speed: use Lighthouse; expect scores above 90 for performance and accessibility.
Tip: if your server cannot compress, note that Vite only reports gzip sizes — the output .css and .js files themselves are not compressed; enabling server gzip makes a noticeable difference in speed
Warning: the tools/ folder is for building only and must not be uploaded to the host

The same goes for node_modules and the Markdown docs/.

النشر على الاستضافة

القالب ثابت؛ والنشر يعني نسخ مجلد المخرجات. يضم هذا القسم ملاحظات عملية للاستضافات الحقيقية.

متطلبات الاستضافة

  • دعم ملفات .woff2 (تدعمها كل الاستضافات الحديثة)
  • إمكانية ضبط ترويسات التخزين المؤقت (اختياري لكنه موصى به)
  • شهادة SSL (موصى بها لـ theme-boot.js وlocalStorage على نطاق آمن)

الطريقة ١ — الرفع المباشر

npm run build
rsync -avz dist/ user@server:/var/www/html/

الطريقة ٢ — مجلد فرعي

يجعل القالب جميع الروابط نسبية؛ لذا يعمل دون تغيير في https://example.com/admin/ أيضاً. فقط غيّر website في src/config/config.js إلى العنوان النهائي ليُولَّد sitemap.xml بشكل صحيح.

الطريقة ٣ — شبكة CDN

المسارالتخزين المؤقت
assets/**سنة واحدة، immutable
*.htmlبلا تخزين مؤقت أو no-cache
sitemap.xml / robots.txtيوم واحد

أسماء ملفات الحزم مجزّأة (modules-DnMG3z6r.css)؛ لذا يمكن نشر إصدار جديد دون القلق من ذاكرة مؤقتة قديمة.

إعدادات الاستضافة المشتركة

ملف .htaccess نموذجي (Apache):

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^([^\.]+)$ $1.html [NC,L]
</IfModule>

<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/css application/javascript image/svg+xml
</IfModule>

بهذه القواعد يعمل كل من dashboards/analytics.html وdashboards/analytics.

ترويسات الأمان المقترحة

Header set X-Content-Type-Options "nosniff"
Header set Referrer-Policy "strict-origin-when-cross-origin"
Header set Permissions-Policy "geolocation=(), microphone=()"

صفحة الخطأ

عرّف الملف system/404.html كصفحة خطأ النطاق (في cPanel ← Error Pages). والحالات الأخرى: system/403.html وsystem/500.html وsystem/maintenance.html وsystem/offline.html.

قائمة التحقق بعد النشر

  1. افتح الصفحة الرئيسية ولوحة تحكم واحدة على الحاسوب والجوال.
  2. تأكد من عدم وجود أخطاء في وحدة تحكم المتصفح.
  3. جرّب الوضع الداكن وتغيير اللغة (يجب أن تبقى الإعدادات محفوظة).
  4. انقر رابطاً نسبياً من صفحة متداخلة (crm/contacts.html ← users/details.html).
  5. افتح sitemap.xml وrobots.txt.
  6. السرعة: استخدم أداة Lighthouse؛ والمتوقع درجة أعلى من ٩٠ للأداء وإمكانية الوصول.
ملاحظة: إذا لم يكن الضغط متاحاً على الخادم، فاعلم أن Vite يطبع حجم gzip فقط — أما ملفات .css و.js النهائية فغير مضغوطة؛ وتفعيل gzip على الخادم يُحدث فرقاً ملموساً في السرعة
تحذير: المجلد tools/ للبناء فقط ويجب ألا يُرفع إلى الاستضافة

وكذلك node_modules ومجلد docs/ بصيغة Markdown.