مقدمه
وردپرس یکی از محبوبترین ابزارهای متنباز برای ساخت وبسایت و وبلاگه و بخش بزرگی از سایتهای دنیا با اون اداره میشن. یه راه رایج برای شروع، استفاده از یه نصب یککلیکی یا اپ آماده روی سرورهای ابریه. اما روش دیگهای هم هست که کنترل خیلی بیشتری بهتون میده: نصب و مدیریت دستی وردپرس از طریق خط فرمان، روی یه سرور ابری (VPS) خام.
این آموزش دقیقاً همین روش رو پوشش میده: نصب و پیکربندی وردپرس با استفاده از LAMP Stack، یعنی ترکیب Linux (سیستمعامل)، Apache (وبسرور)، MySQL (پایگاهداده) و PHP (زبان برنامهنویسی سمت سرور). این مسیر چند قدم بیشتر از یه نصب آماده داره، اما در ازاش کنترل کامل روی محیط وردپرستون به دست میارید.
برای انجام این آموزش به یه سرور مجازی (VPS) نیاز دارید. میتونید از هر ارائهدهندهی سروری که در دسترستونه استفاده کنید، مثلاً یه سرور مجازی ابری پارمین کلود.
این راهنما برای اوبونتو ۲۶.۰۴ LTS (کد نام Resolute Raccoon) نوشته شده که در حال حاضر آخرین نسخهی LTS اوبونتوئه. اگه هنوز روی نسخهی ۲۰.۰۴ یا ۲۲.۰۴ هستید، بدونید که این نسخهها یا پشتیبانی استانداردشون تموم شده یا بهزودی تموم میشه؛ برای سرورهای تازه بهتره از ۲۶.۰۴ (یا حداقل ۲۴.۰۴ که هنوز تحت پشتیبانیه) استفاده کنید.
پیشنیازها
قبل از شروع باید این موارد آماده باشن:
- یه سرور اوبونتو ۲۶.۰۴ با یه کاربر sudo غیر از root.
- LAMP Stack نصبشده روی سرور (Apache، MySQL یا معادل سازگارش، و PHP).
- گواهی SSL/TLS برای سایت: اگه دامنه دارید بهترین گزینه Let’s Encryptه (رایگان و معتبر). اگه دامنه ندارید و فقط برای تست یا استفادهی شخصیه، یه گواهی self-signed هم کفایت میکنه؛ رمزنگاریش مثل بقیهست، فقط تاییدیهی دامنه نداره.
با آماده بودن این موارد، بهعنوان کاربر sudo وارد سرور بشید و بریم سراغ مرحلهی اول.
مرحله ۱: ساخت دیتابیس و کاربر MySQL برای وردپرس
وردپرس اطلاعات سایت و کاربرهاش رو در MySQL نگه میداره. پس اولین کار، ساختن یه دیتابیس و یه یوزر اختصاصی براشه.
روی نصب استاندارد MySQL در اوبونتو، کاربر root پایگاهداده بهصورت پیشفرض با روش auth_socket کار میکنه؛ یعنی احراز هویتش از طریق خود سیستمعامل انجام میشه و کافیه با sudo وارد بشید، بدون نیاز به پسورد جدا:
sudo mysql
اگه ترجیح میدید root یه پسورد اختصاصی هم داشته باشه (مثلاً برای اتصال از ابزارهای دیگه)، بعد از ورود این دستور رو بزنید (بهجای new_password یه پسورد قوی بذارید):
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'new_password';
نکته: نسخههای قدیمیتر MySQL معمولاً از پلاگین
mysql_native_passwordاستفاده میکردن. این پلاگین از MySQL 8.4 به بعد دیگه بهصورت پیشفرض فعال نیست و در MySQL 9 کاملاً حذف شده، پس در این آموزش سراغcaching_sha2_passwordرفتیم که هم پیشفرضه و هم امنتره.
حالا دیتابیس اختصاصی وردپرس رو میسازیم (اسمش هرچی دوست دارید میتونه باشه؛ اینجا از wordpress استفاده میکنیم). از utf8mb4 هم استفاده میکنیم که پشتیبانی کامل یونیکد MySQLه و برای کاراکترهای فارسی و ایموجی گزینهی درستیه:
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
هر دستور MySQL باید با
;تموم بشه؛ اگه به خطایی خوردید اول همین رو چک کنید.
حالا یه یوزر جدا برای مدیریت این دیتابیس میسازیم (بهجای wordpressuser هر اسمی میخواید بذارید، و بهجای password یه پسورد قوی):
CREATE USER 'wordpressuser'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
از localhost بهجای % (یعنی هر هاست) استفاده کردیم، چون دیتابیس و اپلیکیشن روی یه سرور هستن و نیازی نیست از بیرون به دیتابیس وصل بشیم؛ این کار امنیت رو بالاتر میبره.
به این یوزر روی دیتابیس wordpress دسترسی کامل میدیم:
GRANT ALL ON wordpress.* TO 'wordpressuser'@'localhost';
تغییرات رو اعمال میکنیم:
FLUSH PRIVILEGES;
و از MySQL خارج میشیم:
EXIT;
مرحله ۲: نصب اکستنشنهای اضافی PHP
موقع نصب LAMP معمولاً فقط حداقل اکستنشنهای لازم برای ارتباط PHP با MySQL نصب میشه، اما وردپرس و خیلی از پلاگینهاش به اکستنشنهای بیشتری نیاز دارن.
با دستور زیر رایجترین اکستنشنهای موردنیاز وردپرس رو نصب میکنیم:
sudo apt update
sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip php-imagick
هر پلاگین وردپرس ممکنه پکیجهای خاص خودش رو بخواد؛ مستندات پلاگین رو چک کنید و در صورت نیاز با
aptنصبش کنید.
بعد از نصب اکستنشنها، آپاچی باید ریاستارت بشه تا این تغییرات لود بشن. چون تو مرحلهی بعد هم تنظیمات آپاچی رو تغییر میدیم، میتونید صبر کنید و یکجا ریاستارت کنید، یا همین الان انجامش بدید:
sudo systemctl restart apache2
مرحله ۳: تنظیم آپاچی برای فعالسازی .htaccess و Rewrite
فعالسازی override با .htaccess
بهصورت پیشفرض استفاده از فایلهای .htaccess در آپاچی غیرفعاله. وردپرس و خیلی از پلاگینهاش برای تنظیمات سطح دایرکتوری به این فایلها نیاز دارن.
فایل تنظیمات سایتتون رو با یه ادیتور مثل nano باز کنید (مسیر و اسم فایل رو مطابق تنظیمات خودتون عوض کنید؛ اینجا wordpress.conf رو مثال زدیم):
sudo nano /etc/apache2/sites-available/wordpress.conf
داخل بلاک VirtualHost، این بخش رو اضافه کنید (مسیر document root رو مطابق سرور خودتون بذارید؛ اینجا /var/www/wordpress مثاله):
<Directory /var/www/wordpress/>
AllowOverride All
</Directory>
فایل رو ذخیره و ببندید (در nano: اول Ctrl+X، بعد Y و در آخر Enter).
فعالسازی ماژول Rewrite
برای استفاده از پرمالینکهای خوانا در وردپرس (مثلاً example.com/2026/post-name/ بهجای آدرسهای شلوغ با پارامتر)، باید ماژول mod_rewrite رو فعال کنیم:
sudo a2enmod rewrite
تست و اعمال تغییرات
قبل از اعمال نهایی، تنظیمات رو از نظر خطای نحوی چک کنید:
sudo apache2ctl configtest
ممکنه خروجیای شبیه این ببینید:
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK
خط اول فقط یه هشدار دربارهی نبود ServerName تو تنظیمات کلیه و مشکلی برای عملکرد سایت ایجاد نمیکنه (اگه بخواید ساکتش کنید، یه خط ServerName با دامنه یا آیپی سرور به فایل /etc/apache2/apache2.conf اضافه کنید). مهم اینه که در خروجی Syntax OK رو ببینید.
حالا آپاچی رو ریاستارت کنید تا همهی تغییرات اعمال بشه:
sudo systemctl restart apache2
مرحله ۴: دانلود وردپرس
وقتشه خود وردپرس رو دانلود کنیم. برای امنیت بیشتر همیشه آخرین نسخه رو از سایت رسمی wordpress.org بگیرید.
به یه دایرکتوری قابلنوشتن مثل /tmp برید و فایل فشرده رو دانلود کنید:
cd /tmp
curl -O https://wordpress.org/latest.tar.gz
فایل رو باز کنید تا ساختار دایرکتوری وردپرس ساخته بشه:
tar xzvf latest.tar.gz
قبل از انتقال فایلها، یه .htaccess خالی میسازیم که وردپرس بعداً ازش استفاده کنه:
touch /tmp/wordpress/.htaccess
فایل نمونهی تنظیمات رو هم کپی میکنیم به اسمی که وردپرس واقعاً میخونتش:
cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php
دایرکتوری upgrade رو هم از قبل میسازیم تا وردپرس موقع آپدیت خودکار به مشکل دسترسی نخوره:
mkdir /tmp/wordpress/wp-content/upgrade
حالا کل محتوای این دایرکتوری (شامل فایلهای مخفی مثل همون .htaccess) رو به document root سایت منتقل میکنیم. نقطهی انتهای مسیر مبدأ یعنی «همهچیز داخل این دایرکتوری»:
sudo cp -a /tmp/wordpress/. /var/www/wordpress
مسیر /var/www/wordpress رو با دایرکتوری واقعی سروری که تنظیم کردید جایگزین کنید.
مرحله ۵: تنظیم دایرکتوری وردپرس
تنظیم مالکیت و دسترسی فایلها
باید مالکیت فایلها رو به کاربر و گروه www-data بدیم؛ این همون کاربریه که آپاچی باهاش اجرا میشه و باید بتونه فایلهای وردپرس رو برای سرو کردن سایت و انجام آپدیتهای خودکار بخونه و بنویسه:
sudo chown -R www-data:www-data /var/www/wordpress
بعد با دو دستور find، دسترسی مناسب رو روی دایرکتوریها و فایلها تنظیم میکنیم:
sudo find /var/www/wordpress/ -type d -exec chmod 750 {} \;
sudo find /var/www/wordpress/ -type f -exec chmod 640 {} \;
این سطح دسترسی برای کارکرد عادی وردپرس کافیه، اما ممکنه بعضی پلاگینها یا فرآیندهای خاص به تنظیم دقیقتری نیاز داشته باشن.
تنظیم فایل wp-config.php
اولین کار تو این فایل، گذاشتن کلیدهای امنیتی (secret keys) هست. وردپرس یه ابزار آنلاین برای تولید این مقادیر داره تا لازم نباشه خودتون یه چیز پیچیده بسازید. این کلیدها فقط داخلی استفاده میشن، پس مشکلی نداره پیچیده و کاملاً تصادفی باشن:
curl -s https://api.wordpress.org/secret-key/1.1/salt/
خروجی این دستور هشت خط define با مقادیر یکتاست. حتماً هر بار مقادیر تازه بگیرید؛ این مقادیر باید واقعاً یکتا و تصادفی باشن، پس از یه نمونهی ثابت کپی نکنید.
مقادیری که گرفتید رو کپی کنید، بعد فایل تنظیمات وردپرس رو باز کنید:
sudo nano /var/www/wordpress/wp-config.php
بخشی که این شکلیه رو پیدا کنید:
define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');
و کل این بخش رو با خروجیای که از دستور curl گرفتید جایگزین کنید.
بعد باید تنظیمات اتصال به دیتابیس رو هم وارد کنیم؛ اسم دیتابیس، یوزرنیم و پسوردی که تو مرحلهی ۱ ساختیم:
define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'wordpressuser' );
define( 'DB_PASSWORD', 'password' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8mb4' );
define( 'DB_COLLATE', '' );
یه تنظیم دیگه هم لازمه: چون از قبل به آپاچی اجازهی نوشتن روی فایلهای وردپرس رو دادیم، میتونیم متد فایلسیستم رو صراحتاً روی direct بذاریم. اگه این رو تنظیم نکنیم، وردپرس موقع بعضی عملیاتها (مثل نصب پلاگین) از شما اطلاعات FTP میخواد که اصلاً نیازی بهش نداریم:
define('FS_METHOD', 'direct');
این خط رو میتونید زیر تنظیمات دیتابیس یا هرجای دیگهی فایل اضافه کنید. فایل رو ذخیره و ببندید.
مرحله ۶: تکمیل نصب از طریق مرورگر
با تنظیمات سمت سرور تمومشده، بقیهی نصب رو از طریق مرورگر انجام میدیم.
آدرس دامنه یا آیپی سرورتون رو تو مرورگر باز کنید:
https://server_domain_or_IP
اول زبان موردنظرتون رو انتخاب میکنید (فارسی هم بین گزینههاست). بعد به صفحهی اصلی تنظیمات میرسید و باید این موارد رو مشخص کنید:
- اسم سایت
- یوزرنیم ادمین — بهتره از چیزی غیر از
adminاستفاده کنید، برای امنیت بیشتر - پسورد — یه پسورد قوی بهصورت خودکار پیشنهاد میشه؛ همون رو نگه دارید یا یه پسورد قوی دیگه انتخاب کنید و حتماً جایی امن ذخیرهاش کنید
- ایمیل و مشخص کردن اینکه آیا میخواید موتورهای جستجو فعلاً از ایندکس کردن سایت منصرف بشن یا نه
بعد از تکمیل این فرم، به صفحهی ورود هدایت میشید. با یوزرنیم و پسوردی که ساختید وارد بشید تا به پیشخوان مدیریت وردپرس برسید.
جمعبندی
تبریک میگم، وردپرس نصب شد و آمادهی استفادهست! چند قدم پیشنهادی برای بعد:
- تنظیم پرمالینکها از مسیر Settings > Permalinks
- انتخاب قالب جدید از Appearance > Themes
- نصب پلاگینهای موردنیاز از Plugins > Add New
- اگه قراره با تیم یا نویسندههای دیگه کار کنید، اضافهکردن کاربر جدید از Users > Add New
نکتهی تکمیلی برای کاربران پارمین کلود
اگه علاوه بر این نصب مستقیم، پروژههای دیگهای هم دارید که از Docker یا پکیجمنیجرهایی مثل npm، pip یا Composer استفاده میکنن، پارمین کلود میرورهای داخلی برای اینها هم ارائه میده (نصب داکر، رجیستریهای ایمیج، و مخزنهای npm/PyPI/Composer) که میتونه سرعت دسترسی رو روی سرورهای پارمین کلود بهتر کنه. چون این آموزش مشخص از Docker یا این پکیجمنیجرها استفاده نمیکنه، جزئیاتشون رو اینجا نیاوردیم؛ اگه بخواید یه نسخهی جایگزین از همین راهنما با استقرار وردپرس روی Docker (بهجای LAMP مستقیم) و با استفاده از این میرورها آماده کنم، خبر بدید.
نظرات کاربران