بهینهسازی حرفهای سرور اختصاصی برای میزبانی سایت فروشگاهی شما
بهینهسازی یک سایت فروشگاهی خود میزبان روی سرور Bare-Metal
اگر قصد دارید سایت فروشگاهی خود را روی سرور اختصاصی راهاندازی کنید، بهینهسازی سرور اولین و مهمترین قدم برای افزایش سرعت، امنیت و تجربه کاربری بهتر است. در این راهنمای جامع، تمام تنظیمات و روشهای بهینهسازی یک سرور bare-metal برای سایتهای فروشگاهی را مرور میکنیم.
1) اولویتهای کلی (ترتیب اجرا)
- امنسازی و ایزوله کردن سرور (دسترسی کاربران، فایروال، بکاپها).
- رفع گلوگاههای اصلی (دیتابیس + ذخیرهسازی + شبکه).
- اضافه کردن لایههای کش (Object + Page + HTTP).
- بهینهسازی سیستم عامل / شبکه / کرنل برای پردازش همزمان بالا.
- مانیتورینگ + تست بار و بهینهسازی مداوم.
2) سختافزار و سیستم عامل (مزایای Bare-Metal)
- برای دیتابیس و OPCache PHP از NVMe/SSD استفاده کنید؛ هارد دیسکها برای ذخیرهسازی سرد / رسانهها مناسب هستند.
- بیشترین حافظه RAM را به دیتابیس اختصاص دهید. قانون سرانگشتی: سرور DB = RAM زیاد؛ وب/Node = CPU + شبکه.
- از کرنل Linux LTS جدید استفاده کنید (مثلاً Ubuntu 22.04/24.04، Rocky/Alma Linux 8/9) و آپدیتهای امنیتی نصب شده باشند.
- سربار Hypervisor را حذف کنید — یا روی OS میزبان اجرا کنید یا تنها اگر نیاز دارید از Hypervisor کمحجم استفاده کنید.
3) ذخیرهسازی و سیستم فایل
- دیتابیس روی NVMe/SSD باشد. با
noatimeو scheduler مناسب mount کنید (مثلاً cfq → noop یا mq-deadline برای SSD). - نمونه خط fstab:
/dev/nvme0n1p1 /var/lib/mysql ext4 defaults,noatime,nodiratime,barrier=0 0 2
*(قبل از استفاده از barrier=0 تست کنید — بستگی به workload و RAID با باتری/BBU دارد)*
- برای خواندن با سرعت بالا،
discardرا فقط در صورت پشتیبانی و تست شده فعال کنید؛ ترجیحاً از TRIM زمانبندی شده استفاده کنید. - اگر از کنترلر RAID استفاده میکنید، write cache را فقط با باتری/BBU یا supercap فعال کنید.
4) دیتابیس (MySQL/MariaDB/Postgres) — بیشترین تاثیر
- دیتابیس را به سریعترین ذخیرهسازی منتقل کنید و در صورت امکان CPU را اختصاص دهید.
- تنظیمات پیشنهادی MySQL/MariaDB برای سروری با 32GB RAM اختصاصی برای DB:
[mysqld] innodb_buffer_pool_size = 22G # حدود 60-70٪ RAM اگر فقط DB باشد innodb_buffer_pool_instances = 8 innodb_flush_log_at_trx_commit = 1 # 1 = safest, 2 for perf with some risk innodb_flush_method = O_DIRECT innodb_file_per_table = 1 max_connections = 500 thread_cache_size = 50 query_cache_type = 0 # غیر فعال (deprecated) tmp_table_size = 256M max_heap_table_size = 256M
- از
pt-query-digestبرای پیدا کردن کوئریهای کند استفاده کنید. ایندکسها را برای SELECTهای سنگین اضافه کنید. از full table scan خودداری کنید. - برای Postgres:
shared_buffersحدود 25٪ RAM،work_memبهینه وwal_compressionفعال شود اگر بسیاری از نوشتارهای کوچک دارید. - دورهای
ANALYZEوOPTIMIZEاجرا کنید (یا VACUUM/ANALYZE برای Postgres).
5) وب سرور (توصیه NGINX)
- NGINX به عنوان reverse proxy + سرویسدهنده فایلهای استاتیک استفاده شود. نمونه :
worker_processes auto; worker_rlimit_nofile 100000; events { worker_connections 4096; multi_accept on; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 15; types_hash_max_size 2048; server_tokens off; client_max_body_size 64M; gzip on; gzip_comp_level 5; } - از
open_file_cacheبرای سرویسدهی سریع فایلهای استاتیک استفاده کنید:open_file_cache max=10000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2;
- در هنگام proxy به اپ سرور،
proxy_buffer_sizeوproxy_buffersرا تنظیم کنید.
6) PHP / محیط اجرا (PHP-FPM مثال)
- OPCache را فعال کنید (افزایش سرعت چشمگیر). نمونه:
opcache.memory_consumption = 256،opcache.interned_strings_buffer = 16. - تنظیم pool PHP-FPM:
pm = dynamic pm.max_children = 200 pm.start_servers = 20 pm.min_spare_servers = 10 pm.max_spare_servers = 30 request_terminate_timeout = 300s
- برای throughput بالا، PHP-FPM با Unix sockets و
listen.backlogبالا توصیه میشود.
7) لایههای کش (افزایش قابل توجه سرعت)
- کش کل صفحه: Varnish یا NGINX FastCGI برای سرویسدهی HTML کششده به کاربران ناشناس.
- کش Object: Redis یا Memcached برای session + object cache (مثلاً پلاگین Redis برای WordPress).
- کش کوئری / نتایج DB: از کش اپلیکیشن برای کوئریهای سنگین استفاده شود (Redis/Memcached).
- CDN / مرورگر: Cache-Control طولانی برای فایلهای استاتیک و استفاده از Cloudflare یا CDN دیگر برای edge caching جهانی.
8) بهینهسازی شبکه / کرنل (Linux)
net.core.somaxconn = 65535 net.core.netdev_max_backlog = 250000 net.ipv4.tcp_max_syn_backlog = 65535 net.ipv4.tcp_tw_reuse = 1 net.ipv4.ip_local_port_range = 1024 65535 net.ipv4.tcp_fin_timeout = 15 fs.file-max = 2000000
افزایش file descriptors کاربران در /etc/security/limits.conf:
* soft nofile 200000 * hard nofile 200000