WordPress را با پایگاه دادهٔ اختصاصی آماده می‌کنیم. PHP باید بتواند تنظیمات را بخواند و رسانه بارگذاری کند، اما به تغییر هسته و همهٔ فایل‌ها دسترسی نخواهد داشت.

این جلسه بخشی از دورهٔ انجین‌اکس در ۵۰ شب است. قرارداد آزمایشگاه، مسیرها و روال اعمال تغییر در راهنمای دوره آمده است.

محیط: یکی از poolهای شب ۲۹ یا ۳۰، کاربر wpapp و مسیر /var/www/nginx-wordpress/public؛ سایت هنوز فعال نیست. نسخهٔ WordPress و PHP را با صفحهٔ Requirements تطبیق بده.

پایگاه دادهٔ محلی#

در Debian/Ubuntu بستهٔ mariadb-server را با apt نصب کن. در Alma/Rocky 9 تمیز، ابتدا dnf module list mariadb را بررسی کن و فقط اگر stream موجود است dnf module enable mariadb:10.11 و سپس dnf install mariadb-server را اجرا کن. نصب موجود را reset نکن. MariaDB باید در نسخهٔ پشتیبانی‌شده و متناسب با نیاز WordPress باشد.

sudo systemctl enable --now mariadb
sudo env MYSQL_HISTFILE=/dev/null mariadb

در نشست مدیریتی SQL، مقدار نمونهٔ زیر را پیش از اجرا با رمز تولیدشدهٔ خودت جایگزین کن. MYSQL_HISTFILE نشست را از ذخیرهٔ history بازمی‌دارد؛ رمز را در خط فرمان shell نگذار.

CREATE DATABASE nginx_wp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'nginx_wp'@'localhost' IDENTIFIED BY 'REPLACE_WITH_A_RANDOM_SECRET';
GRANT ALL PRIVILEGES ON nginx_wp.* TO 'nginx_wp'@'localhost';
SHOW GRANTS FOR 'nginx_wp'@'localhost';

مجوزها فقط روی همین database هستند. با ss -lntp مطمئن شو 3306 روی شبکهٔ آزمایشگاه منتشر نشده است؛ PHP در این سناریو از socket محلی استفاده می‌کند. برای database دوردست، TLS و ACL مستقلی لازم است.

دریافت و نصب فایل‌ها#

روی VM تمیز، در پوشهٔ کاری متعلق به حساب خودت:

mkdir -p ~/nginx-lab/wordpress-stage
cd ~/nginx-lab/wordpress-stage
curl --fail --location --output wordpress.tar.gz https://wordpress.org/latest.tar.gz
tar -xzf wordpress.tar.gz
sudo cp -a wordpress/. /var/www/nginx-wordpress/public/
sudo chown -R root:root /var/www/nginx-wordpress/public
sudo find /var/www/nginx-wordpress/public -type d -exec chmod 755 {} +
sudo find /var/www/nginx-wordpress/public -type f -exec chmod 644 {} +
sudo install -d -o wpapp -g wpapp -m 755 /var/www/nginx-wordpress/public/wp-content/uploads
sudo install -o root -g wpapp -m 640 \
  /var/www/nginx-wordpress/public/wp-config-sample.php \
  /var/www/nginx-wordpress/wp-config.php

latest.tar.gz نسخهٔ متغیر دارد؛ نسخهٔ واقعی را از wp-includes/version.php ثبت کن و artifact را برای بازتولید نگه دار. اگر WP-CLI را از مسیر رسمی و با بررسی اصالت نصب کرده‌ای، wp core verify-checksums --path=/var/www/nginx-wordpress/public را اجرا کن؛ checksum هسته، افزونه‌ها و رازها را بررسی نمی‌کند.

با sudoedit /var/www/nginx-wordpress/wp-config.php نام database، user، رمز، DB_HOST برابر localhost و کلیدهای salt تصادفی مخصوص همین نصب را تنظیم کن. بالاتر از بارگذاری wp-settings اضافه کن:

define('WP_HOME', 'https://wp.nginx.test');
define('WP_SITEURL', 'https://wp.nginx.test');
define('FORCE_SSL_ADMIN', true);
define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MODS', true);

این مدل، نصب افزونه و به‌روزرسانی از dashboard را می‌بندد؛ عملیات نگه‌داری با حساب استقرار و برنامهٔ شب ۳۴ انجام می‌شود. رمز و salt را در Git یا public قرار نده.

SELinux و بررسی#

در Alma/Rocky فقط uploads را writable label بده:

sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nginx-wordpress/public/wp-content/uploads(/.*)?'
sudo restorecon -Rv /var/www/nginx-wordpress
sudo -u wpapp test -r /var/www/nginx-wordpress/wp-config.php
sudo -u wpapp test ! -w /var/www/nginx-wordpress/public/wp-login.php

موفقیت test خروجی ندارد و exit code صفر دارد. اتصال واقعی database و نصب را از مرورگر در شب بعد بررسی می‌کنیم. برای خطای database محلی، socket، اعتبارنامه و AVC را بررسی کن؛ boolean شبکه را فقط برای اتصال TCP لازم و تأییدشده فعال کن.

بازگشت: پیش از نصب دادهٔ واقعی، Snapshot برگردان؛ database حاوی داده را بدون backup حذف نکن.

منبع: نیازمندی‌های WordPress ، MariaDB در خانوادهٔ RHEL ، نصب WordPress ، بررسی checksum .