انجیناکس؛ شب ۳۱: WordPress، پایگاه داده و مالکیت کد
فهرست نوشته
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 .