رفتن به محتوا
وردپرس

آموزش نصب وردپرس روی سرور مجازی؛ از آماده‌سازی تا راه‌اندازی سایت

آموزش نصب وردپرس روی VPS تازه با Ubuntu 24.04؛ آماده‌سازی Apache و MySQL، اتصال دامنه، HTTPS، تنظیم وردپرس و بررسی خطاهای راه‌اندازی.

11 دقیقه مطالعهبلاگ ابر آراد
مجله ابر آرادINSIGHTS / وردپرس

برای نصب وردپرس روی سرور مجازی، ابتدا باید محیط اجرای سایت را آماده کنید: وب‌سرور، PHP، دیتابیس، دامنه و HTTPS. سپس فایل‌های وردپرس را قرار می‌دهید، اتصال دیتابیس را تنظیم می‌کنید و نصب را در مرورگر به پایان می‌رسانید. تحویل یک VPS به‌تنهایی به معنی آماده‌بودن این اجزا نیست.

این راهنما برای یک VPS تازه با Ubuntu Server 24.04 LTS، بدون کنترل‌پنل و بدون سایت فعال نوشته شده است. مسیر اجرا Apache و MySQL است و فقط یک سایت را پوشش می‌دهد. اگر سرور شما cPanel، DirectAdmin، Nginx یا سایت موجود دارد، این تنظیمات را عیناً روی آن اجرا نکنید؛ مدیریت سرویس‌ها و مسیر فایل‌ها در آن محیط متفاوت است. انتقال سایت فعلی نیز به برنامهٔ جداگانهٔ جابه‌جایی داده نیاز دارد.

پیش از شروع، دسترسی و نسخه‌ها را بررسی کنید

یک حساب لینوکس با دسترسی sudo، اتصال SSH و دسترسی به تنظیم رکوردهای دامنه لازم دارید. به‌روزرسانی، امنیت، بکاپ و پایش سرور باید مسئول مشخص داشته باشند. اگر هنوز بین محیط آماده و مدیریت مستقیم سرور تصمیم نگرفته‌اید، راهنمای مقایسه هاست و سرور مجازی به انتخاب مسیر کمک می‌کند.

دامنهٔ example.com، کاربر لینوکس deploy و نشانی 203.0.113.10 در نمونه‌ها فرضی‌اند؛ آن‌ها را با مقادیر واقعی خود جایگزین کنید. example.com دامنهٔ قابل استفاده برای سایت شما نیست. عبارت REPLACE_WITH_STRONG_PASSWORD نیز باید پیش از اجرای SQL با یک رمز قوی و منحصربه‌فرد جایگزین شود؛ برای این مثال از رمز تصادفی بلند با حروف و اعداد استفاده کنید تا نقل‌قول یا نویسه‌های خاص، دستور SQL را تغییر ندهند.

از ترمینال کامپیوتر خود به سرور وصل شوید. اثرانگشت میزبان SSH را با اطلاعات معتبر سرویس تطبیق دهید؛ کاربر deploy باید از قبل ساخته شده و مجاز به اجرای sudo باشد.

ssh deploy@203.0.113.10

دستورات بعدی روی سرور اجرا می‌شوند. پیش از نصب، نسخه‌ها را با نیازمندی‌های رسمی وردپرس و سازگاری قالب و افزونه‌های پروژه تطبیق دهید. این راهنما از بسته‌های مخزن Ubuntu 24.04 استفاده می‌کند؛ نام php در این نسخه به شاخهٔ 8.3 وابسته است. انتخاب نسخهٔ پشتیبانی‌شده و برنامهٔ ارتقای آن، بخشی از نگهداری سایت است.

مرحله ۱: محیط اجرای وردپرس را نصب کنید

فهرست بسته‌ها را تازه کنید، به‌روزرسانی‌های موجود را نصب کنید و سپس Apache، MySQL و افزونه‌های PHP را اضافه کنید. هر دستور را پس از پایان موفق دستور قبلی اجرا کنید. اگر سیستم پس از به‌روزرسانی نیاز به راه‌اندازی مجدد داشت، ابتدا همان کار را انجام دهید و دوباره با SSH وصل شوید.

sudo apt update
sudo apt upgrade
sudo apt install apache2 mysql-server php libapache2-mod-php \
  php-mysql php-curl php-gd php-mbstring php-xml php-zip \
  php-intl php-bcmath php-imagick curl ca-certificates \
  unzip nano ufw dnsutils
sudo systemctl enable --now apache2 mysql
sudo systemctl restart apache2
php -v
mysql --version
sudo systemctl status apache2 mysql --no-pager

Apache درخواست وب را دریافت می‌کند، PHP کد وردپرس را اجرا می‌کند و MySQL داده‌های سایت را نگه می‌دارد. خروجی وضعیت باید فعال‌بودن سرویس‌ها را نشان دهد. این راهنما از ماژول PHP در Apache استفاده می‌کند؛ تنظیمات PHP-FPM آموزش‌های دیگر را با آن ترکیب نکنید. برای جزئیات این اتصال، مستندات نصب PHP در اوبونتو مرجع مناسبی است.

مرحله ۲: دامنه و فایروال را آماده کنید

در سرویس DNS دامنه، رکورد A دامنهٔ اصلی را به IPv4 عمومی سرور متصل کنید. در این آموزش فقط دامنهٔ اصلی استفاده می‌شود؛ افزودن www مستلزم رکورد و تنظیم وب‌سرور و گواهی همان نام است. اگر رکورد AAAA دارید، باید IPv6 نیز واقعاً به همین سرور برسد؛ رکورد اشتباه می‌تواند بخشی از کاربران یا اعتبارسنجی گواهی را به مقصد دیگری ببرد.

dig +short A example.com
dig +short AAAA example.com

پاسخ DNS را از یک شبکهٔ دیگر هم بررسی کنید. زمان مشاهدهٔ تغییر به کش و TTL وابسته است و عدد ثابتی برای همهٔ دامنه‌ها ندارد. این مسیر آموزشی، اتصال مستقیم دامنه به سرور را فرض می‌کند؛ اگر پروکسی CDN فعال است، صدور گواهی و ارتباط با مبدأ را مطابق همان سرویس تنظیم کنید.

پیش از فعال‌کردن UFW، پورت واقعی SSH را مجاز کنید. مثال زیر برای SSH روی پورت ۲۲ است؛ اگر پورت دیگری دارید، مقدار را تغییر دهید. نشست فعلی را باز نگه دارید و پس از فعال‌سازی، اتصال دوم را آزمایش کنید.

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status

اگر فایروال دیگری در مسیر زیرساخت وجود دارد، همان دسترسی‌های لازم را در آن نیز بررسی کنید. برای این نصب محلی، پورت MySQL را به اینترنت باز نکنید. راهنمای رسمی UFW تفاوت قواعد و وضعیت فایروال را توضیح می‌دهد.

مرحله ۳: وب ‌سرور را برای دامنه تنظیم کنید

یک مسیر خالی برای سایت بسازید و فایل تنظیم دامنه را باز کنید. مسیر این مثال به نصب تازه اختصاص دارد و نباید حاوی فایل‌های سایت قبلی باشد.

sudo mkdir -p /var/www/wordpress
sudo nano /etc/apache2/sites-available/wordpress.conf

محتوای زیر را در فایل قرار دهید؛ example.com را در ServerName با دامنهٔ واقعی عوض کنید. در nano با Ctrl+O و سپس Enter ذخیره کنید و با Ctrl+X خارج شوید.

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/wordpress
    DirectoryIndex index.php
    <Directory /var/www/wordpress>
        Options -Indexes +FollowSymLinks
        AllowOverride FileInfo
        Require all granted
    </Directory>
    <Files "wp-config.php">
        Require all denied
    </Files>
    ErrorLog ${APACHE_LOG_DIR}/wordpress-error.log
    CustomLog ${APACHE_LOG_DIR}/wordpress-access.log combined
</VirtualHost>

این تنظیم نمایش فهرست پوشه‌ها را غیرفعال می‌کند و اجازهٔ قواعد بازنویسی در .htaccess را می‌دهد. سایت و ماژول بازنویسی را فعال کنید. غیرفعال‌کردن سایت پیش‌فرض در دستور زیر فقط برای همین سرور تازه است.

sudo a2enmod rewrite
sudo a2ensite wordpress.conf
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

فقط وقتی آزمون تنظیمات بدون خطا تمام شد، reload را اجرا کنید. در این مرحله مسیر سایت هنوز خالی است؛ نمایش خطای ۴۰۳ برای ریشهٔ خالی، با وجود غیرفعال‌بودن فهرست پوشه‌ها، الزاماً خرابی تنظیم دامنه نیست.

از مطالعه تا انتخابسرویس مناسب پروژه‌تان را بررسی کنید.

محصولات ابر آراد را ببینید و مشخصات هر سرویس را مقایسه کنید.

بررسی محصولات

مرحله ۴: HTTPS را پیش از نصب در مرورگر فعال کنید

وقتی DNS درست است و دامنه از اینترنت روی پورت ۸۰ به سرور می‌رسد، گواهی را بگیرید. روش زیر از نسخهٔ Snap ابزار Certbot استفاده می‌کند و فرض می‌کند Certbot دیگری روی سرور نصب نشده است. دسترسی به مخزن Snap و سرویس صدور گواهی نیز لازم است.

sudo apt install snapd
sudo snap install --classic certbot
sudo /snap/bin/certbot --apache -d example.com --redirect
sudo /snap/bin/certbot renew --dry-run

ایمیل معتبر وارد کنید و پیام‌های Certbot را بخوانید. گزینهٔ redirect مسیر HTTP را به HTTPS هدایت می‌کند. آزمون dry-run باید موفق شود؛ پس از آن هم اجرای زمان‌بندی تمدید و تاریخ انقضای گواهی را پایش کنید. راهنمای Certbot برای Apache مرجع روش نصب و تمدید است. تا زمانی که HTTPS دامنه بدون هشدار گواهی کار نمی‌کند، اطلاعات مدیر سایت را در نصاب وارد نکنید.

مرحله ۵: دیتابیس و کاربر مخصوص سایت را بسازید

با دستور زیر وارد محیط MySQL شوید. دستورهای CREATE و GRANT را در همان محیط اجرا کنید، نه در پوستهٔ لینوکس. رمز نمونه را پیش از اجرا عوض کنید و مشخصات را در محل امن نگه دارید.

sudo mysql
CREATE DATABASE wordpress CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost'
  IDENTIFIED BY 'REPLACE_WITH_STRONG_PASSWORD';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
EXIT;

کاربر wpuser فقط روی پایگاه wordpress مجوز دارد؛ وردپرس نباید با حساب مدیریتی root دیتابیس وصل شود. localhost در این سناریو یعنی برنامه و دیتابیس روی یک سرور قرار دارند. اتصال را پیش از ادامه آزمایش کنید؛ گزینهٔ p رمز را به‌صورت تعاملی می‌پرسد.

mysql -u wpuser -p -h localhost wordpress

اگر وارد شدید، با EXIT; خارج شوید. اگر دسترسی رد شد، نام کاربر، رمز و مجوز را بررسی کنید. ساخت پایگاه یا کاربر را بی‌دلیل تکرار نکنید؛ خطای «از قبل وجود دارد» با خطای احراز هویت متفاوت است.

مرحله ۶: فایل‌ها و اتصال وردپرس را آماده کنید

بسته را از منبع رسمی وردپرس دریافت کنید. این دستورات را در نشست همین کاربر اجرا کنید و فقط در صورت موفقیت دانلود و بازشدن آرشیو ادامه دهید.

mkdir -p ~/wordpress-install
cd ~/wordpress-install
curl -fL -o latest.tar.gz https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
sudo cp -a wordpress/. /var/www/wordpress/
sudo chown -R www-data:www-data /var/www/wordpress
sudo find /var/www/wordpress -type d -exec chmod 755 {} \;
sudo find /var/www/wordpress -type f -exec chmod 644 {} \;
sudo -u www-data cp /var/www/wordpress/wp-config-sample.php \
  /var/www/wordpress/wp-config.php
sudo nano /var/www/wordpress/wp-config.php

در فایل تنظیمات، مقادیر موجود DB_NAME، DB_USER، DB_PASSWORD و DB_HOST را به‌ترتیب با wordpress، wpuser، رمز ساخته‌شده و localhost جایگزین کنید. ثابت تکراری اضافه نکنید. هشت مقدار کلید و salt احراز هویت را هم با خروجی تازهٔ مولد رسمی کلیدهای وردپرس عوض کنید؛ کلیدهای نمونه یا متعلق به سایت دیگری را نگه ندارید.

این دو خط را پیش از خط توقف ویرایش در فایل اضافه کنید. اولی ویرایش مستقیم فایل قالب و افزونه را از پیشخوان می‌بندد و دومی استفاده از HTTPS برای ورود و مدیریت را الزام می‌کند.

define( 'DISALLOW_FILE_EDIT', true );
define( 'FORCE_SSL_ADMIN', true );

پس از ذخیره، دسترسی فایل تنظیمات را محدود کنید:

sudo chmod 440 /var/www/wordpress/wp-config.php

در این روش ساده، فایل‌های سایت متعلق به کاربر وب‌سرورند تا نصب و به‌روزرسانی از پیشخوان ممکن باشد. پیامدش این است که آسیب‌پذیری کد PHP می‌تواند امکان تغییر فایل‌ها را بدهد؛ مجوز ۷۵۵ به‌تنهایی این خطر را حذف نمی‌کند. برای چند سایت با مدیران متفاوت، این مالکیت مشترک مناسب نیست و باید کاربران و اجرای PHP را از هم جدا کنید. در محیط حساس نیز مالکیت کد و روش استقرار را محدودتر طراحی کنید و مسئول به‌روزرسانی را مشخص نگه دارید.

مرحله ۷: نصب را در مرورگر تمام کنید

بلافاصله پس از آماده‌کردن فایل‌ها، دامنهٔ واقعی را با HTTPS باز کنید و صفحهٔ نصب را تکمیل کنید؛ نصاب آماده را رها نکنید. زبان فارسی، نام سایت، ایمیل معتبر و حساب مدیر با نام و رمز منحصربه‌فرد را انتخاب کنید. رمز مدیر وردپرس را از رمز دیتابیس جدا نگه دارید. مراحل و فیلدهای نصب در راهنمای رسمی نصب وردپرس توضیح داده شده‌اند.

اگر سایت هنوز آمادهٔ انتشار نیست، درخواست جلوگیری از نمایه‌سازی موتورهای جست‌وجو را فعال کنید؛ این گزینه سایت را خصوصی نمی‌کند. برای محیط محرمانه یا آزمایشی، کنترل دسترسی واقعی لازم است. پس از آماده‌شدن سایت، تنظیم نمایه‌سازی را دوباره بررسی کنید.

پس از نصب، کارکرد واقعی سایت را بررسی کنید

ورود به پیشخوان پایان راه‌اندازی نیست. این بررسی‌ها را با یک مرورگر دیگر و یک اتصال بیرون از سرور انجام دهید:

نشانی سایت و پیشخوان با HTTPS باز شوند و مرورگر هشدار گواهی یا محتوای ناامن ندهد.

یک نوشتهٔ آزمایشی بسازید، پیوند یکتا را از تنظیمات ذخیره کنید و صفحهٔ داخلی را باز کنید؛ فقط صفحهٔ اصلی را نسنجید.

یک تصویر بارگذاری کنید و نتیجه را ببینید؛ خطای نوشتن فایل را با مالکیت و مجوز درست حل کنید، نه دسترسی ۷۷۷.

ایمیل بازیابی رمز و فرم موردنیاز پروژه را آزمایش کنید. این نصب، سرویس ارسال ایمیل را خودکار آماده نمی‌کند؛ در صورت نیاز، راهنمای تنظیم SMTP وردپرس را با مشخصات سرویس ایمیل خود دنبال کنید.

سلامت سایت را در بخش ابزارهای وردپرس بررسی کنید؛ پیش از نصب افزونه‌های متعدد، خطاهای پایه را برطرف کنید.

فایل‌ها و دیتابیس را با هم در برنامهٔ بکاپ قرار دهید، یک نسخه خارج از همین سرور نگه دارید و بازیابی را در محیط جدا آزمایش کنید. به‌روزرسانی سیستم‌عامل، هسته، قالب و افزونه، بررسی فضای دیسک و پیگیری تمدید گواهی باید در برنامهٔ نگهداری باشد. منابع موردنیاز سایت را پس از راه‌اندازی با مصرف واقعی و آزمون بار بسنجید؛ یک نسخهٔ PHP یا یک عدد RAM، ظرفیت همهٔ سایت‌ها را تعیین نمی‌کند.

خطاهای رایج را از مسیر درست پیگیری کنید

اگر دامنه به سایت نمی‌رسد، ابتدا DNS، رکورد AAAA، فایروال و وضعیت Apache را بررسی کنید. اگر صفحهٔ پیش‌فرض Apache دیده می‌شود، ServerName و فعال‌بودن wordpress.conf را بسنجید. خطای اتصال دیتابیس را از مشخصات wp-config.php، وضعیت MySQL و آزمون ورود wpuser دنبال کنید. خطای ۴۰۴ صفحات داخلی معمولاً بررسی قواعد بازنویسی و ذخیرهٔ پیوندهای یکتا را لازم دارد؛ صفحهٔ اصلی سالم، کافی نیست.

برای خطای ۵۰۰ یا ۴۰۳، گزارش مخصوص همین سایت را ببینید و تغییر اخیر را بررسی کنید:

sudo tail -n 50 /var/log/apache2/wordpress-error.log

گزارش ممکن است مسیر فایل یا اطلاعات حساس داشته باشد؛ آن را بدون حذف اطلاعات خصوصی منتشر نکنید. اگر به‌جای اجرا، متن خام PHP نمایش داده یا دانلود می‌شود، دسترسی عمومی سایت را متوقف کنید و اتصال PHP به Apache را اصلاح کنید؛ در این وضعیت سراغ ادامهٔ نصب نروید. برای عیب‌یابی نیز گزارش خطا را روی صفحهٔ عمومی سایت نمایش ندهید.

اگر پروژه به کنترل سیستم‌عامل و تنظیم محیط اجرای وردپرس نیاز دارد، مشخصات سرور مجازی ابر آراد را بررسی کنید. پیش از خرید، منابع اولیه و مسئول به‌روزرسانی، بکاپ و پایش را مشخص کنید؛ برای ارزیابی سهم تیم و خدمات قابل دریافت، دامنهٔ پلن‌های پشتیبانی را با نیاز پروژه تطبیق دهید.

قدم بعدی شمابرای انتخاب سرویس، درباره نیاز پروژه صحبت کنیم.

از صفحه تماس ابر آراد، مسیر ارتباط با تیم را انتخاب کنید.

گفت‌وگو با تیم آراد
به انتهای این مقاله رسیدید. مسیر یادگیری را با مقاله‌های دیگر ادامه دهید.
گفت‌وگو درباره این مقاله

دیدگاه‌ها و پرسش‌های شما

تجربه یا پرسش خود را درباره موضوع مقاله با ما در میان بگذارید.

هنوز دیدگاهی ثبت نشده است؛ شما گفت‌وگو را شروع کنید.

دیدگاه خود را بنویسید

نشانی ایمیل شما نمایش داده نمی‌شود. فیلدهای ستاره‌دار الزامی هستند.