پرش به مطلب اصلی

نصب WordPress روی VPS با LEMP

وردپرس روی سرور خودتان یعنی کنترل کامل روی منابع، افزونه‌ها و نسخه‌ی PHP، بدون محدودیت‌های هاست اشتراکی. در این آموزش وردپرس را روی پشته‌ی LEMP نصب می‌کنید: Linux (اوبونتو)، Engine-X (Nginx)، MariaDB و PHP-FPM.

نکته

اگر نمی‌خواهید سرور را خودتان مدیریت کنید، هاستینگ آریانت گزینه‌ی ساده‌تری برای یک سایت وردپرسی است.

پیش‌نیازها​

در دستورها example.com را با دامنه‌ی خودتان عوض کنید.

Ubuntu 22.04

اوبونتو ۲۴.۰۴ PHP 8.3 و اوبونتو ۲۲.۰۴ PHP 8.1 دارد. روی 22.04 در مسیرها و نام سرویس‌ها 8.3 را با 8.1 عوض کنید (مثلاً php8.1-fpm و /run/php/php8.1-fpm.sock).

۱. نصب Nginx، MariaDB و PHP​

sudo apt update
sudo apt install -y nginx mariadb-server \
php-fpm php-mysql php-curl php-gd php-intl php-mbstring php-xml php-zip php-imagick
sudo ufw allow 'Nginx Full'

نسخه‌ی PHP و سرویس آن را بررسی کنید:

php -v
systemctl is-active php8.3-fpm mariadb nginx

۲. امن‌سازی MariaDB​

sudo mariadb-secure-installation

در اوبونتو، root پایگاه داده با socket سیستم‌عامل وارد می‌شود و رمز لازم ندارد. برای رمز فعلی فقط Enter بزنید، به Switch to unix_socket authentication و Change the root password پاسخ n بدهید (ورود با socket همین حالا فعال است) و به پرسش‌های بعدی (حذف کاربر ناشناس، بستن ورود root از راه دور، حذف پایگاه داده‌ی test و بارگذاری دوباره‌ی دسترسی‌ها) Y بدهید.

۳. ساخت پایگاه داده و کاربر​

رمز را با یک رمز قوی عوض کنید:

sudo mariadb <<'SQL'
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'CHANGE-ME-strong-password';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
SQL

۴. دانلود WordPress​

cd /tmp
curl -LO https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
sudo mkdir -p /var/www/example.com
sudo cp -a /tmp/wordpress/. /var/www/example.com/
sudo chown -R www-data:www-data /var/www/example.com
sudo find /var/www/example.com -type d -exec chmod 755 {} \;
sudo find /var/www/example.com -type f -exec chmod 644 {} \;

مالکیت www-data لازم است تا وردپرس بتواند wp-config.php را بسازد و افزونه‌ها و به‌روزرسانی‌ها را بدون FTP نصب کند.

۵. تنظیم Nginx​

sudo tee /etc/nginx/sites-available/example.com > /dev/null <<'EOF'
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;

root /var/www/example.com;
index index.php index.html;
client_max_body_size 64M;

location / {
try_files $uri $uri/ /index.php?$args;
}

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}

location ~ /\.ht {
deny all;
}

location ~* \.(css|js|gif|ico|jpe?g|png|svg|webp|woff2?)$ {
expires 30d;
access_log off;
}
}
EOF

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginx

۶. حجم آپلود PHP​

پیش‌فرض PHP برای آپلود ۲ مگابایت است. آن را با client_max_body_size بالا هماهنگ کنید:

sudo tee /etc/php/8.3/fpm/conf.d/99-wordpress.ini > /dev/null <<'EOF'
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 120
EOF
sudo systemctl restart php8.3-fpm

۷. گواهی SSL​

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com --redirect --agree-tos -m you@example.com

جزئیات و تمدید خودکار در Nginx و گواهی رایگان Let's Encrypt.

۸. نصب از مرورگر​

https://example.com را باز کنید، زبان را انتخاب کنید و اطلاعات پایگاه داده را وارد کنید:

فیلدمقدار
نام پایگاه دادهwordpress
نام کاربریwpuser
رمزرمزی که در مرحله‌ی ۳ گذاشتید
میزبان پایگاه دادهlocalhost
پیشوند جدولwp_ (یا هر پیشوند دلخواه)

وردپرس wp-config.php را با کلیدهای امنیتی تصادفی می‌سازد. سپس عنوان سایت، نام کاربری مدیر (از admin استفاده نکنید)، رمز قوی و ایمیل را وارد کنید.

بررسی نهایی​

curl -sI https://example.com | head -n 1         # HTTP/2 200 or HTTP/1.1 200
curl -sI https://example.com/wp-login.php | head -n 1
sudo -u www-data test -w /var/www/example.com/wp-content && echo writable

در پیشخوان وردپرس، «ابزارها ← سلامت سایت» باید بدون خطای بحرانی باشد.

خطاهای رایج​

خطاراه‌حل
502 Bad Gatewayمسیر socket در fastcgi_pass با نسخه‌ی PHP نمی‌خواند. ls /run/php/ را ببینید و مسیر را اصلاح کنید.
Error establishing a database connectionنام پایگاه داده، کاربر یا رمز در wp-config.php اشتباه است، یا MariaDB خاموش است: systemctl status mariadb.
413 Request Entity Too Largeclient_max_body_size در Nginx کوچک است.
The uploaded file exceeds the upload_max_filesize directiveمرحله‌ی ۶ را انجام دهید و php8.3-fpm را ری‌استارت کنید.
وردپرس برای نصب افزونه اطلاعات FTP می‌خواهدمالکیت فایل‌ها www-data نیست؛ دستور chown مرحله‌ی ۴ را دوباره اجرا کنید.
ایمیل‌های وردپرس نمی‌رسنداز یک افزونه‌ی SMTP با سرویس ایمیل و پورت ۵۸۷ یا ۴۶۵ استفاده کنید. در VPS آریانت پورت ۲۵ به‌طور پیش‌فرض بسته است.

نگه‌داری​

  • پیش از به‌روزرسانی هسته، قالب یا افزونه‌های مهم یک اسنپ‌شات بگیرید.
  • از پایگاه داده نسخه‌ی پشتیبان منظم بگیرید: sudo mariadb-dump wordpress | gzip > wordpress-$(date +%F).sql.gz
  • برای رسانه‌های حجیم یک دیسک جدا وصل کنید.

قدم بعدی​

سرور خود را بسازید​

وردپرس خود را روی سرور خودتان و با منابع اختصاصی اجرا کنید. در پنل آریانت یک سرور ابری («سرور ابری / Cloud Computing ← سرور جدید») یا یک سرور مجازی با Ubuntu 24.04 بسازید و با پشتیبان‌گیری خودکار از سایت محافظت کنید.