وردپرس یکی از محبوبترین سیستمهای مدیریت محتوا (CMS) است که به کاربران اجازه میدهد با استفاده از MySQL با پردازش PHP وبسایت راهاندازی کنند. بعد از راهاندازی اولیه وبسایت وردپرسی، مدیریت آن بهراحتی از طریق رابط گرافیکی امکانپذیر است. در این مقاله قصد داریم به آموزش نصب وردپرس روی سرور لینوکس با LEMP (Linux ,Nginx, MySQL, PHP) بپردازیم. اگر قصد نصب وردپرس روی پشته LEMP برای سرور اوبونتو 22.04 را دارید، با مراحل این مقاله همگام شوید.
پیشنیازهای نصب وردپرس روی سرور مجازی
برای نصب وردپرس روی سرور لینوکس باید به سرور اوبونتو 22.04 دسترسی داشته باشید. همچنین برای نصب موفقیتآمیز وردپرس روی VPS انجام کارهای زیر قبل از شروع مراحل نصب ضروری است:
- یک کاربر sudo روی سرور خود ایجاد کنید: برای انجام مراحل نصب وردپرس روی سرور ابری به شیوه این مقاله، باید یک کاربر غیرریشه (Non-root) با امتیازهای sudo داشته باشید.
- نصب پشته LEMP: وردپرس برای عملکرد صحیح به یک وبسرور، یک دیتابیس و PHP نیاز دارد. برای برآورده کردن این الزامات راهاندازی یک پشته LEMP یعنی Linux، Nginx، MySQL و PHP ضروری است. در مقاله «آموزش نصب LEMP روی سرور اوبونتو» به توضیح کامل نحوه انجام این کار پرداختهایم.
- با SSL وبسایت خود را ایمن کنید: وردپرس محتوای پویا ارائه میدهد و احراز هویت و مجوز کاربر را مدیریت میکند. SSL/TLS یک تکنولوژی است که به شما اجازه میدهد برای ایمن کردن اتصال، ترافیک را از وبسایت خود رمزگذاری کنید. نحوه راهاندازی SSL به این بستگی دارد که آیا شما نام دامنه برای وبسایت خود دارید یا خیر.
- اگر نام دامنه دارید، با استفاده از CDN ابر دراک میتوانید SSL رایگان دریافت کنید.
- اگر دامنه ندارید و هدفتان از این پیکربندی، تست یا استفاده شخصی است، بهجای دامنه میتوانید از یک گواهی خود امضا (self-signed) استفاده کنید.
بعد از انجام کارهای بالا، بهعنوان کاربر sudo وارد سرور شوید و ادامه مراحل زیر را طی کنید.
گام اول: ایجاد یک کاربر و دیتابیس MySQL برای وردپرس
وردپرس برای مدیریت و ذخیره اطلاعات کاربر و وبسایت از MySQL استفاده میکند. در اولین گام از نصب وردپرس روی سرور ابری قصد داریم یک دیتابیس و یک کاربر برای وردپرس ایجاد کنیم.
برای شروع، وارد حساب (Administrative) ریشه MySQL شوید. اگر MySQL برای استفاده از افزونه احراز هویت auth_socket پیکربندی شده (که بهصورت پیشفرض است)، با استفاده از sudo میتوانید وارد حساب مدیریت MySQL شوید:
sudo mysql
اگر روش احراز هویت را تغییر دادهاید که از رمز عبور برای حساب ریشه MySQL استفاده کنید، بهجای دستور بالا، کد زیر را بنویسید:
mysql -u root -p
با این کار، رمز عبوری که برای حساب ریشه MySQL تنظیم کردهاید، از شما خواسته میشود.
بعد از ورود به سیستم، یک دیتابیس جداگانه ایجاد کنید که وردپرس بتواند آن را کنترل کند. شما میتوانید هر نام دلخواهی را برای دیتابیس استفاده کنید؛ ما در این مقاله از نام «wordpress» برای ایجاد دیتابیس استفاده میکنیم. برای ایجاد دیتابیس دستور زیر را بنویسید:
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
نکته: در انتهای هر دستور MySQL باید از نقطه ویرگول (؛) استفاده کنید. در صورت مواجهه با خطا، حتما از وجود این علامت مطمئن شوید.
در ادامه قرار است یک حساب کاربری MySQL جداگانه بسازیم تا از آن فقط برای کار روی دیتابیس جدید خود استفاده کنیم؛ زیرا ایجاد حسابها و دیتابیسهای تکمنظوره مدیریت و تامین امنیتشان را راحتتر میکند. ما در این مقاله از نام «wordpressuser» استفاده میکنیم؛ شما میتوانید هر نام دیگری را انتخاب کنید.
با استفاده از دستور زیر میتوانید یک حساب ایجاد کنید، رمز عبور تعیین کنید و به دیتابیسی که ایجاد کردهاید، دسترسی بدهید. برای تعیین رمز عبور حتما موارد امنیتی را رعایت کنید.
CREATE USER 'wordpressuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON wordpress.* TO 'wordpressuser'@'localhost';
حالا شما یک دیتابیس و یک حساب کاربری دارید که هرکدام بهطور اختصاصی برای وردپرس ساخته شده است. با تکمیل تسکهای دیتابیس، عبارت زیر را تایپ کنید تا از MySQL خارج شوید:
EXIT;
گام دوم: نصب افزونههای اضافی PHP
هنگام راهاندازی یک پشته LEMP برای برقراری ارتباط PHP با MySQL به مجموعه کوچکی از افزونهها (extension) نیاز دارید. وردپرس و بسیاری از پلاگینهای آن از افزونههای اضافی PHP استفاده میکنند؛ در این مقاله شما از چند افزونه دیگر نیز استفاده خواهید کرد.
با تایپ دستور زیر میتوانید برخی از محبوبترین افزونههای PHP را برای استفاده با وردپرس، دانلود و نصب کنید:
sudo apt update
sudo apt install php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip
نکته: هر پلاگین وردپرس به مجموعهای از الزامات خاص خودش نیاز دارد. بعضی از افزونهها ممکن است به نصب پکیجهای افزونه PHP نیاز داشته باشند. بنابراین لازم است برای شناخت الزامات PHP، مستندات پلاگین خود را بررسی کنید. اگر افزونهها در دسترس باشند، مانند دستور بالا میتوانید از apt برای نصب استفاده کنید.
بعد از اتمام نصب افزونهها، فرایند PHP-FPM را ریاستارت کنید تا پردازنده PHP در حال اجرا بتواند از ویژگیهایی که بهتازگی نصب شدهاند، استفاده کند:
sudo systemctl restart php8.1-fpm
بهاینترتیب، همه افزونههای PHP مورد نیاز را روی سرور نصب کردهاید.
گام سوم: پیکربندی Nginx
در گام سوم از آموزش نصب وردپرس روی سرور ابری لینوکس باید چندین تنظیمات در فایلهای بلوک سرور Nginx انجام دهیم. طبق پیشنیازهایی که ابتدای مقاله گفتیم، شما باید یک فایل پیکربندی در دایرکتوری /etc/nginx/sites-available/ برای وبسایت خود داشته باشید که برای پاسخ به آدرس IP یا نام دامنه سرور شما پیکربندی شده و با گواهی SSL/TLS محافظه شده باشد. ما در این آموزش از /etc/nginx/sites-available/wordpress بهعنوان نمونه استفاده میکنیم؛ اما شما در صورت لزوم، باید مسیر فایل پیکربندی خود را جایگزین کنید.
علاوهبر این، ما از /var/www/wordpress بهعنوان دایرکتوری ریشه نصب وردپرس در این آموزش استفاده میکنیم. مجددا شما میتوانید از ریشه وب (Web root) مشخصشده در پیکربندی استفاده کنید.
نکته: شما میتوانید از پیکربندی پیشفرض /etc/nginx/sites-available/default (با /var/www/html بهعنوان ریشه وب) استفاده کنید. اگر میخواهید فقط یک وبسایت را روی این سرور میزبانی کنید، انجام این کار توصیه میشود. در غیر این صورت بهتر است پیکربندی لازم را به قطعات منطقی، یک فایل در هر وبسایت تقسیم کنید.
برای شروع، فایل بلوک سرور سایت خود را با امتیازهای sudo باز کنید:
sudo nano /etc/nginx/sites-available/wordpress
در ادامه باید در بلوک اصلی server، چند location block اضافه کنیم.
با ساختن لوکیشن بلاکهایی برای درخواستهای فایلهای /favicon.ico و /robots.txt شروع کنید تا بتوانید گزارش درخواستهای هرکدام از این فایلها را ذخیره نکنید.
از یک لوکیشن Regular expression برای مطابقت با هر درخواستی برای فایلهای استاتیک استفاده کنید. ما ثبت این درخواستها را خاموش کرده و آنها را بهعنوان «قابل ذخیرهسازی» (Highly cacheable) علامتگذاری میکنیم؛ زیرا آنها معمولا منابع گرانی برای ارائه هستند. شما میتوانید فهرست فایلهای استاتیک را به نحوی تنظیم کنید بهنحوی که حاوی همه افزونههای فایلهای دیگر باشد که وبسایت شما از آن استفاده میکند:
server {
. . .
location = /favicon.ico { log_not_found off; access_log off; }
location = /robots.txt { log_not_found off; access_log off; allow all; }
location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
expires max;
log_not_found off;
}
. . .
}
در این مرحله قرار است داخل بلوک location / موجود، فهرست try_files را تنظیم کنیم. با اضافه کردن علامت # به خط و اضافه کردن خط هایلایتشده، مانند کد زیر تنظیمات پیشفرض را به کامنت تبدیل کنید. بهاینترتیب بهجای برگرداندن خطای 404 بهعنوان گزینه پیشفرض، کنترل با آرگومنتهای درخواست به فایل index.php منتقل میشود.
server {
. . .
location / {
#try_files $uri $uri/ =404;
try_files $uri $uri/ /index.php$is_args$args;
}
. . .
}
بعد از اتمام کار، فایل را ذخیره کنید و ببندید.
در این مرحله با تایپ دستور زیر میتوانیم پیکربندی خود را برای خطاهای Syntax بررسی کنیم:
sudo nginx -t
اگر هیچ خطایی گزارش نشد، با تایپ دستور زیر Nginx را دوباره بارگذاری کنید:
sudo systemctl reload nginx
در گام بعدی از نصب وردپرس روی سرور مجازی قرار است به دانلود و نصب وردپرس بپردازیم.
گام چهارم: دانلود وردپرس
تا این گام از نصب وردپرس روی سرور مجازی لینوکس، نرمافزار سرور را پیکربندی کردهایم و حالا نوبت دانلود و نصب وردپرس است. توصیه میکنیم همیشه آخرین نسخه وردپرس را بهطور مستقیم از وبسایت اصلی آن دانلود کنید.
با تایپ دستور زیر، دایرکتوری را به یک دایرکتوری قابل نوشتن تبدیل کرده و سپس نسخه فشردهشده را دانلود کنید:
cd /tmp
این کار دایرکتوری شما را به یک فولدر موقت تغییر میدهد. سپس دستور زیر را وارد کنید تا آخرین نسخه وردپرس در یک فایل فشرده دانلود شود:
curl -LO https://wordpress.org/latest.tar.gz
نکته: از فلگ -LO برای دسترسی مستقیم به منبع فایل فشرده استفاده میشود. -L اطمینان حاصل میکند که Fetching فایل در صورت تغییر مسیر (Redirect) با موفقیت انجام شده است و -O خروجی فایل ریموت شما را با یک فایل محلی به همان نام مینویسد.
فایل دانلودشده را برای ایجاد ساختار دایرکتوری وردپرس از حالت فشرده خارج کنید:
tar xzvf latest.tar.gz
این فایلها را باید بهصورت لحظهای به ریشه داکیومنت منتقل کنید، اما قبل از انجام این کار، باید فایل پیکربندی نمونه را روی نام فایلی که وردپرس آن را میخواند، کپی کنید:
cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php
حالا باید کل محتویات دایرکتوری را در ریشه داکیومنت خود کپی کنیم. ما از فلگ -a برای اطمینان از حفظ مجوزهایمان استفاده میکنیم و یک نقطه در انتهای دایرکتوری منبع قرار میدهیم تا نشان دهد که همه چیز در دایرکتوری (حتی فایلهای پنهان) باید کپی شود:
sudo cp -a /tmp/wordpress/. /var/www/<^>your_domain/wordpress
با این کار فایلهای ما در جای خود قرار میگیرند و حالا باید مالکیت را به کاربر و گروه www-data اختصاص دهیم که منظور همان کاربر و گروهی است که Nginx را اجرا میکنند. Nginx باید قادر به خواندن و نوشتن فایلهای وردپرس باشد تا بتواند به وبسایت سرویس دهد و بهروزرسانیها را بهطور خودکار انجام دهد:
sudo chown -R www-data:www-data /var/www/your_domain/wordpress
اکنون فایلها در ریشه داکیومنت سرور هستند و مالکیت صحیحی دارند؛ اما شما هنوز باید برخی از پیکربندیهای اضافی را تکمیل کنید.
گام پنجم: تنظیم فایل پیکربندی وردپرس
در این مرحله از نصب وردپرس روی VPS یا سرور ابری قرار است تغییراتی در فایل پیکربندی اصلی وردپرس ایجاد کنیم.
بعد از باز کردن فایل باید با تنظیم برخی از کلیدهای مخفی برای تامین امنیت نصب شروع کنید. وردپرس یک مولد (generator) امن برای این مقادیر فراهم میکند تا مجبور نباشید خودتان این مقادیر را به دست آورید. این موارد فقط بهصورت داخلی استفاده میشوند؛ بنابراین داشتن مقادیر پیچیده و امن در اینجا به قابلیت استفاده آسیبی نمیرساند.
برای گرفتن مقادیر امن از مولد کلید مخفی (secret key) وردپرس، دستور زیر را تایپ کنید:
curl -s https://api.wordpress.org/secret-key/1.1/salt/
بهاینترتیب مانند عبارت زیر، مقادیر منحصربهفردی را دریافت خواهید کرد:
هشدار: مهم است که هر بار مقادیر منحصربهفرد درخواست دهید. مقادیر نشان داده شده در زیر را کپی نکنید.
Output
define('AUTH_KEY', '1jl/vqfs<XhdXoAPz9 DO NOT COPY THESE VALUES c_j{iwqD^<+c9.k<J@4H');
define('SECURE_AUTH_KEY', 'E2N-h2]Dcvp+aS/p7X DO NOT COPY THESE VALUES {Ka(f;rv?Pxf})CgLi-3');
define('LOGGED_IN_KEY', 'W(50,{W^,OPB%PB<JF DO NOT COPY THESE VALUES 2;y&,2m%3]R6DUth[;88');
define('NONCE_KEY', 'll,4UC)7ua+8<!4VM+ DO NOT COPY THESE VALUES #`DXF+[$atzM7 o^-C7g');
define('AUTH_SALT', 'koMrurzOA+|L_lG}kf DO NOT COPY THESE VALUES 07VC*Lj*lD&?3w!BT#-');
define('SECURE_AUTH_SALT', 'p32*p,]z%LZ+pAu:VY DO NOT COPY THESE VALUES C-?y+K0DK_+F|0h{!_xY');
define('LOGGED_IN_SALT', 'i^/G2W7!-1H2OQ+t$3 DO NOT COPY THESE VALUES t6**bRVFSD[Hi])-qS`|');
define('NONCE_SALT', 'Q6]U:K?j4L%Z]}h^q7 DO NOT COPY THESE VALUES 1% ^qUswWgn+6&xqHN&%');
اینها خطوط پیکربندی هستند که میتوانید برای تنظیم کلیدهای ایمن بهطور مستقیم در فایل پیکربندی خود Paste کنید. حالا خروجی دریافتی را کپی کنید.
اکنون فایل پیکربندی وردپرس را باز کنید:
sudo nano /var/www/your_domain/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');
. . .
این خطها را پاک کرده و مقادیری را که از خط دستور کپی کردهاید، Paste کنید:
. . .
define('AUTH_KEY', 'VALUES COPIED FROM THE COMMAND LINE');
define('SECURE_AUTH_KEY', 'VALUES COPIED FROM THE COMMAND LINE');
define('LOGGED_IN_KEY', 'VALUES COPIED FROM THE COMMAND LINE');
define('NONCE_KEY', 'VALUES COPIED FROM THE COMMAND LINE');
define('AUTH_SALT', 'VALUES COPIED FROM THE COMMAND LINE');
define('SECURE_AUTH_SALT', 'VALUES COPIED FROM THE COMMAND LINE');
define('LOGGED_IN_SALT', 'VALUES COPIED FROM THE COMMAND LINE');
define('NONCE_SALT', 'VALUES COPIED FROM THE COMMAND LINE');
. . .
در این مرحله میخواهیم برخی از تنظیمات اتصال دیتابیس را در ابتدای فایل تغییر دهیم. شما باید نام دیتابیس، کاربر دیتابیس و رمز عبوری را که در MySQL پیکربندی شده است، تنظیم کنید.
تغییر دیگری که باید انجام شود، تنظیم روشی است که وردپرس برای نوشتن در فایلسیستم (Filesystem) استفاده میکند. ازآنجاییکه به وبسرور مجوز دادهاید که در هرجایی که نیاز است بنویسد، شما میتوانید روش فایلسیستم را روی «direct» تنظیم کنید. تنظیم نکردن درست این مورد با تنظیمات فعلی باعث میشود که وردپرس هنگام انجام برخی اقدامات، برای اعتبار FTP درخواست دهد. این تنظیمات را زیر تنظیمات اتصال دیتابیس یا هرجای دیگری در فایل اضافه کنید:
. . .
define( 'DB_NAME', 'wordpress' );
/** MySQL database username */
define( 'DB_USER', 'wordpressuser' );
/** MySQL database password */
define( 'DB_PASSWORD', 'password' );
. . .
define( 'FS_METHOD', 'direct' );
بعد از انجام کار، فایل را ذخیره کنید و ببندید.
گام ششم: تکمیل نصب وردپرس روی VPS از طریق رابط وب
در آخرین مرحله از نصب وردپرس روی سرور ابری باید نصب را از طریق رابط وب (Web interface) وردپرس به پایان برسانید. در مرورگر وب خود، به نام دامنه سرور یا IP آدرس عمومی بروید:
http://server_domain_or_IP/wordpress
زبان مورد نظرتان را انتخاب کنید:
سپس به صفحه تنظیمات اصلی بروید.
یک نام برای سایت وردپرسی خود و یک نام کاربری انتخاب کنید. توصیه میکنیم برای امنیت بیشتر از کلماتی مانند «Admin» استفاده نکنید. بهطور خودکار یک رمز عبور قوی ایجاد میشود که باید آن را ذخیره کرده یا رمز عبور مورد نظر خودتان را جایگزین کنید.
آدرس ایمیل خود را وارد کرده و انتخاب کنید که آیا وبسایت شما برای موتورهای جستوجو قابل مشاهده باشد یا خیر:
در ادامه به صفحهای هدایت خواهید شد که از شما میخواهد وارد شوید:
بعد از ورود به سیستم، به داشبورد مدیریت وردپرس هدایت خواهید شد:
راهاندازی وردپرس روی سرور ابری دراک با اطمینان از پایداری و امنیت
با انجام مراحل مطرح در این مقاله نصب وردپرس روی سرور مجازی لینوکس به اتمام میرسد. ابر دراک برای راحتی شما عزیزان، مقالات آموزشی و مستندات متعددی را تهیه کرده است که با مراجعه به قسمت پایگاه دانش میتوانید به آنها دسترسی داشته باشید. چنانچه هرگونه سوالی در زمینه راهاندازی و استفاده از سرور ابری دارید، از طریق ارسال تیکت در پنل کاربری خود با تیم پشتیبانی ما در ارتباط باشید.
منبع: DigitalOcean