وقتی سایت وردپرسی از هاست اشتراکی بزرگتر میشود یا به تنظیمات خاص سرور نیاز دارد، اجرای آن روی سرور مجازی با پشته LEMP (Linux، Nginx، MariaDB و PHP-FPM) کنترل کامل و سرعت بیشتری میدهد. در این آموزش نصب وردپرس روی سرور مجازی Ubuntu ۲۴.۰۴ را از صفر انجام میدهیم: نصب Nginx و PHP ۸.۳، ساخت دیتابیس امن، تنظیم Nginx برای وردپرس، SSL رایگان، دسترسی صحیح فایلها و کش.
فهرست مطالب
چرا وردپرس روی VPS؟
- منابع اختصاصی: محدودیت Entry Process و CPU هاست اشتراکی را ندارید؛ توضیح در محدودیت منابع هاست.
- کنترل کامل: نسخه PHP، تنظیمات OPcache، Redis، Cronهای واقعی و ابزارهای دلخواه.
- مقیاسپذیری: با رشد سایت، منابع را افزایش دهید یا دیتابیس را جدا کنید.
در مقابل، مسئولیت بهروزرسانی، امنیت و بکاپ سرور با شماست. اگر نمیخواهید سرور را مدیریت کنید، هاست وردپرس انتخاب سادهتری است.
پیشنیازها
- یک سرور مجازی Ubuntu ۲۴.۰۴ با حداقل ۲ گیگابایت RAM (برای فروشگاه WooCommerce ۴ گیگابایت).
- دامنهای که رکورد A آن به IP سرور اشاره کند.
- کاربر با دسترسی sudo و SSH امن؛ راهنمای تنظیمات امنیتی اولیه VPS.
در دستورات زیر بهجای example.ir دامنه خودتان را بنویسید.
نصب Nginx، PHP-FPM و MariaDB
sudo apt update && sudo apt upgrade -y
sudo apt install -y nginx mariadb-server \
php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd php8.3-intl \
php8.3-mbstring php8.3-xml php8.3-zip php8.3-imagick php8.3-bcmath unzip
sudo systemctl enable --now nginx mariadb php8.3-fpm
PHP ۸.۳ نسخه پیشفرض Ubuntu ۲۴.۰۴ است و با وردپرس سازگار است. سپس MariaDB را امن کنید:
sudo mariadb-secure-installation
به سوالات پاسخ دهید: کاربرهای ناشناس حذف، ورود root از راه دور غیرفعال و دیتابیس test حذف شود. در Ubuntu، کاربر root دیتابیس بهطور پیشفرض با unix_socket احراز هویت میشود و نیاز به رمز جداگانه ندارد.
ساخت دیتابیس و کاربر
برای وردپرس یک کاربر اختصاصی با دسترسی فقط به دیتابیس خودش بسازید:
sudo mariadb
CREATE DATABASE wp_example DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wp_example'@'localhost' IDENTIFIED BY 'یک-رمز-قوی-و-طولانی';
GRANT ALL PRIVILEGES ON wp_example.* TO 'wp_example'@'localhost';
FLUSH PRIVILEGES;
EXIT;
کاراکترست utf8mb4 برای متن فارسی و ایموجی ضروری است. رمز را با openssl rand -base64 24 بسازید.
دانلود و پیکربندی وردپرس
cd /tmp
curl -LO https://wordpress.org/latest.tar.gz
tar xzf latest.tar.gz
sudo mkdir -p /var/www/example.ir
sudo cp -a /tmp/wordpress/. /var/www/example.ir/
sudo cp /var/www/example.ir/wp-config-sample.php /var/www/example.ir/wp-config.php
فایل wp-config.php را ویرایش کنید و مقادیر DB_NAME، DB_USER و DB_PASSWORD را وارد کنید. کلیدهای امنیتی را از سرویس رسمی وردپرس بگیرید و جایگزین خطوط نمونه کنید:
curl -s https://api.wordpress.org/secret-key/1.1/salt/
سپس دسترسی فایلها را تنظیم کنید؛ مالک فایلها کاربر وبسرور و پوشهها ۷۵۵ و فایلها ۶۴۴ باشند و wp-config.php محدودتر:
sudo chown -R www-data:www-data /var/www/example.ir
sudo find /var/www/example.ir -type d -exec chmod 755 {} \;
sudo find /var/www/example.ir -type f -exec chmod 644 {} \;
sudo chmod 640 /var/www/example.ir/wp-config.php
توضیح مفاهیم در دسترسی فایلها در لینوکس.
تنظیم Nginx برای وردپرس
فایل /etc/nginx/sites-available/example.ir:
server {
listen 80;
listen [::]:80;
server_name example.ir www.example.ir;
root /var/www/example.ir;
index index.php;
client_max_body_size 64m;
location / {
try_files $uri $uri/ /index.php?$args;
}
# جلوگیری از اجرای PHP در پوشه آپلود (باید پیش از بلوک PHP بیاید)
location ~* /wp-content/uploads/.*\.php$ { deny all; }
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.(?!well-known) { deny all; }
location = /xmlrpc.php { deny all; }
location ~* \.(css|js|jpg|jpeg|png|gif|webp|avif|svg|ico|woff2?)$ {
expires 30d;
access_log off;
}
}
sudo ln -s /etc/nginx/sites-available/example.ir /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginx
اگر از اپلیکیشن موبایل وردپرس یا Jetpack استفاده میکنید، خط مسدودسازی xmlrpc.php را حذف کنید. مبانی Nginx و Server Block در نصب Nginx و Let’s Encrypt آمده است.
فعالسازی HTTPS
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.ir -d www.example.ir
حالا https://example.ir را باز کنید؛ صفحه نصب وردپرس نمایش داده میشود. زبان فارسی، نام سایت، نام کاربری مدیر (نه admin) و یک رمز قوی انتخاب کنید.
تنظیمات PHP
فایل /etc/php/8.3/fpm/conf.d/99-wordpress.ini را بسازید:
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 120
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 10000
sudo systemctl restart php8.3-fpm
تعداد پردازههای PHP-FPM در /etc/php/8.3/fpm/pool.d/www.conf با pm.max_children تعیین میشود. برای محاسبه، RAM قابلاختصاص به PHP را بر مصرف میانگین هر پردازه (معمولاً ۴۰ تا ۸۰ مگابایت) تقسیم کنید. اگر RAM کم است، ساخت Swap از OOM جلوگیری میکند.
امنسازی پس از نصب
- در
wp-config.phpخطdefine('DISALLOW_FILE_EDIT', true);را اضافه کنید تا ویرایش کد از پیشخوان بسته شود. - WP-Cron را با Cron سیستم جایگزین کنید:
define('DISABLE_WP_CRON', true);و سپس در crontab کاربرwww-data:*/5 * * * * php /var/www/example.ir/wp-cron.php >/dev/null 2>&1. توضیح در Cron و systemd timers. - برای ورود مدیر احراز هویت دومرحلهای فعال کنید.
- Fail2ban برای مسدودسازی تلاشهای ورود؛ نصب Fail2ban.
- بهروزرسانی خودکار امنیتی سیستمعامل:
sudo apt install unattended-upgrades. - بکاپ خودکار فایل و دیتابیس خارج از سرور؛ بکاپ با Restic.
چکلیست کامل امنیت وردپرس در راهنمای امنیت وردپرس.
کش و کارایی
- کش صفحه: یک افزونه کش صفحه کامل یا FastCGI Cache در Nginx، بزرگترین اثر را بر سرعت دارد.
- Object Cache: با نصب Redis (
sudo apt install redis-server php8.3-redis) و یک افزونه Object Cache، کوئریهای تکراری دیتابیس کم میشود؛ بهخصوص برای WooCommerce. - دیتابیس:
innodb_buffer_pool_sizeرا حدود ۵۰ تا ۶۰ درصد RAM در سرور اختصاصی دیتابیس، و کمتر روی سرور مشترک با وب تنظیم کنید؛ بهینهسازی MySQL.
بهینهسازی سمت وردپرس در افزایش سرعت وردپرس و برای فروشگاهها در افزایش سرعت WooCommerce.
سوالات متداول
سایت فعلی را چطور به این سرور منتقل کنم؟
فایلها و دیتابیس را از هاست قبلی منتقل کنید و آدرسها را در صورت تغییر دامنه جایگزین کنید. مراحل کامل در انتقال وردپرس به هاست جدید.
Apache یا Nginx برای وردپرس؟
هر دو کار میکنند. Nginx با PHP-FPM در ترافیک بالا حافظه کمتری مصرف میکند، اما فایل .htaccess را نمیخواند؛ قوانین افزونهها باید در تنظیمات Nginx اعمال شوند.
چند سایت وردپرس روی یک VPS میشود نصب کرد؟
بله. برای هر سایت دیتابیس، کاربر دیتابیس، پوشه و Server Block جدا بسازید. برای جداسازی بهتر، برای هر سایت یک Pool جداگانه PHP-FPM با کاربر لینوکس مستقل تعریف کنید.
حداقل منابع سرور برای وردپرس چقدر است؟
یک سایت کوچک با ۱ هسته و ۲ گیگابایت RAM اجرا میشود. فروشگاهها و سایتهای پربازدید به ۲ تا ۴ هسته و ۴ گیگابایت RAM یا بیشتر نیاز دارند.
وردپرس سریع روی سرور مجازی
سرور مجازی تراست هاست با دیسک NVMe و دسترسی Root برای اجرای وردپرس و WooCommerce مناسب است. اگر نصب، امنسازی و بهینهسازی را میخواهید به متخصص بسپارید، خدمات پشتیبانی سرور را ببینید.