جدول المحتويات

يقوم معظم الأشخاص بتثبيت WordPress سهل الطريق. سنقوم بتثبيته يمين الطريقة آمنة وقابلة للتكرار، وبالرغم من قيمتها، فهي لا تزال سهلة.

لا يُخترق ووردبريس لأنه سيء، بل لأن الناس يتجاهلونه.

يُشغّل ووردبريس أكثر من ثلث شبكة الإنترنت، ورغم شهرته بسرعة تثبيته التي لا تتجاوز خمس دقائق، إلا أن معظم المستخدمين يُعدّونه بطريقة تُتيح للمهاجمين اختراقه ومشاكل مستقبلية. لا يعني تثبيته بالطريقة الصحيحة تعقيد الأمور، بل إرساء أساس متين للأداء والأمان والاستقرار. غالبًا ما يُخفي التكوين المُتسرّع أو المُنسوخ ثغرات خطيرة تستغلها الروبوتات والبرمجيات الخبيثة. عندما تُخصّص بضع دقائق إضافية لتكوين قاعدة البيانات بشكل صحيح، وتأمين PHP، واستخدام إعداد Nginx مُحصّن، فإنك تحمي نفسك من المشاكل التي قد تُعطّل مواقع بأكملها. تخيل الأمر كما لو أنك تبني منزلًا: يُمكن لأي شخص بناء أربعة جدران، ولكن البناء المُتأنّي فقط هو الذي سينجو من العاصفة. يُوضّح هذا الدليل العملية الكاملة خطوة بخطوة لتستفيد من مزايا ووردبريس دون الوقوع في الأخطاء الشائعة.
حسنًا، دعنا نتخطى الدردشة

ماذا سنستخدم؟

  • نظام:يوصى باستخدام Ubuntu 22.04 أو 24.04
  • قاعدة البيانات:MariaDB للأداء والاستقرار
  • خادم الويب:NGINX للأداء والاستقرار
  • التخزين المؤقت:Redis- مخزن بيانات عالي الأداء في الذاكرة
  • SSL:سيرتبوت
  • إضافات: إعادة تحميل Nginx التلقائية، ضغط Brotli، التسجيل الآمن، إخفاء البريد الإلكتروني

أصبح أوبونتو نظام تشغيل الخوادم المفضل لدي منذ أن ألغت ريد هات نظام CentOS. سهولة الاستخدام، ووفرة التوثيق، ودعم المجتمع القوي، وتوافر حزم البرامج الحديثة على نطاق واسع، تجعله خيارًا مثاليًا للمبتدئين والمحترفين على حد سواء. فهو يحقق التوازن الأمثل بين الاستقرار والميزات الحديثة، وهو ما تحتاجه تمامًا عند تشغيل نظام واسع النطاق مثل ووردبريس.

حضّر خادمك

لنُجهّز المكدس. سنبدأ بإضافة مستودع PPA الموثوق من Ondrej، فهو يُحافظ على إصدارات PHP وNginx المُحدّثة لأوبونتو. بعد ذلك، سنُثبّت Nginx وMariaDB وRedis وacl وجميع حزم PHP 8.4 التي ستحتاجها لتطبيقات WordPress.

سحق
sudo apt install python-software-properties
sudo add-apt-repository ppa:ondrej/nginx
sudo add-apt-repository ppa:ondrej/php
sudo apt update && sudo apt upgrade -y
sudo apt install -y nginx nginx-extras mariadb-server unzip curl redis-server imagemagick acl less file
sudo apt install -y php8.4-fpm php8.4-mysql \
 php8.4-curl php8.4-xml php8.4-zip php8.4-gd php8.4-mbstring php8.4-bcmath \
 php8.4-intl php8.4-soap php8.4-imagick php8.4-cli
سحق
# Allow NGINX in the Firewall (For this instance UFW)
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable

كما هو الحال دائمًا، أوصي بتعطيل تسجيل الدخول الجذري عبر ssh عبر ssh_config وتعطيل مصادقة كلمة المرور واللجوء إلى مفاتيح SSH لأسباب تتعلق بالسلامة

إعداد قاعدة البيانات

عند تثبيت MariaDB لأول مرة، تشعر وكأنك انتقلت إلى شقة جديدة بأبواب مفتوحة، ومفاتيح احتياطية على الطاولة، ولوحة ترحيبية على الباب. mysql_secure_installation يوجد نص لإغلاق هذه الأبواب قبل أن يدخل أي شخص.

سحق
sudo mysql_secure_installation
Switch to unix_socket authentication [Y/n] N
Change the root password? [Y/n] As you wish
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

أنشئ قاعدة بيانات مخصصة + مستخدمًا لووردبريس، حيث سيتم تخزين معظم بيانات ووردبريس، إن لم يكن كلها، هناك. لذا، تأكد من اختيار كلمة مرور قوية.

إس كيو إل
# Change the DB/User Names, Password as you wish
CREATE DATABASE wp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'VERY_STRONGPASS!';
GRANT ALL PRIVILEGES ON wp.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;

الضبط الموصى به لتحسين أداء قاعدة البيانات وأمانها، تحرير /etc/mysql/mariadb.conf.d/50-server.cnf

/etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld]
bind-address            = 127.0.0.1
# Adjust as you like.
# ~50-70% of RAM on DB-only servers
innodb_buffer_pool_size = 1G 
innodb_log_file_size    = 256M
innodb_flush_method     = O_DIRECT
max_connections         = 200
query_cache_size        = 0
query_cache_type        = 0
سحق
sudo systemctl restart mariadb

تحسين PHP لـ WordPress

بعد ذلك، سنُجري بعض التعديلات على إعدادات PHP الأساسية. تُحدث هذه التغييرات البسيطة فرقًا كبيرًا في الاستقرار والأمان، خاصةً لمواقع WordPress عالية الزيارات.
يفتح /etc/php/8.4/fpm/php.ini أو 8.4 وإلغاء التعليق/إضافة ما يلي

/etc/php/8.4/fpm/php.ini
memory_limit = 256M
; These values are kinda low. So adjust as you like
upload_max_filesize = 64M
; Post_Max_size always needs to be the same as file max upload or higher. Never lower
post_max_size = 64M
max_execution_time = 120

; Security: prevent path-info exploits
cgi.fix_pathinfo = 0
expose_php = Off

; Enable OPcache, dramatically improves performance
zend_extension=opcache
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
سحق
# Reload PHP-fpm
sudo systemctl reload php8.4-fpm # or 8.4

تنزيل ووردبريس عبر WP-CLI

بدلاً من إدارة WordPress من خلال المتصفح في كل مرة، يمكنك استخدام WP-CLI، واجهة برمجة تطبيقات تتيح لك تثبيت وتحديث وإدارة ووردبريس بأوامر طرفية بسيطة. إنها ضرورية للمطورين، أو نصوص الأتمتة، أو أي شخص يدير مواقع متعددة. لنبدأ بتثبيت WP-CLI

سحق
# Login as a user other than the root, for better security
sudo -u ubuntu -i
curl -sS -o /usr/local/bin/wp https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x /usr/local/bin/wp
# You shoulod see WP-Cli Version now
wp --info

إذا واجهت خطأً في الأذونات أو لم يظهر الإصدار، فاستخدم الأمر التالي. وإلا، فتخطَّه.

سحق
curl -fsSL https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar \
| sudo tee /usr/local/bin/wp >/dev/null
sudo chmod +x /usr/local/bin/wp

بعد ذلك، أنشئ الدليل الذي سيحتوي على ملفات ووردبريس. هذا هو جذر الويب، المكان الذي سيُقدّم فيه Nginx المحتوى. يمكنك تسميته بأي اسم أو وضعه في أي مكان على نظامك، ولكن تأكد من إمكانية الكتابة إليه بواسطة خادم الويب. www-data.

سحق
mkdir -p /var/www/blog
sudo chown -R www-data:www-data /var/www/blog
cd /var/www/blog

بعد إعداد الإعداد وإنشاء قاعدة البيانات، حان الوقت لإطلاق ووردبريس. بدلاً من تنزيله يدويًا، سنستخدم WP-CLI، أسرع وأنظف ومثالي للإعدادات الآلية.

التنزيل والتكوين: يمكنك متابعة التثبيت باستخدام متصفحك بعد ذلك wp core download --locale=en_US أو CLI (أدناه).

سحق
sudo -u www-data wp core download --locale=en_US
# The DB/User/Password you created earlier
sudo -u www-data wp config create --dbname=wp --dbuser=wpuser --dbpass=VERY_STRONGPASS! --dbhost=localhost --dbprefix=wp_
# Do not use default username: admin, Choose something more secure
sudo -u www-data wp core install --url="https://example.com" --title="My Site" --admin_user="myusername" --admin_password="ANOTHERSTRONGPASS" --admin_email="me@example.com"

بعد تثبيت ووردبريس، حان وقت تأمين ملفاته. الهدف بسيط: خادم الويب (www-data) يجب أن تكون قادرًا على اقرأ واكتب فقط ما تحتاجه تمامًالا أكثر. هذا يقلل بشكل كبير من احتمالية قيام المهاجم بزرع أو تعديل الملفات من خلال استغلال مكون إضافي أو تحميل خاطئ.

سحق
find /var/www/blog -type d -exec chmod 755 {} \;
find /var/www/blog -type f -exec chmod 644 {} \;
rm /var/www/blog/wp-config-sample.php
rm /var/www/blog/readme.html

الآن إلى الملف الأكثر حساسية على الإطلاق، wp-config.php. إنه يحمل بيانات اعتماد قاعدة البيانات ومفاتيحها، لذا تعامل معه مثل كلمة مرور الجذر. ثم امسح سجل الجلسة لأننا استخدمنا كلمة مرور نصية عادية في shell.

نحن نصنع wp-config.php قابلة للقراءة فقط بواسطة www-data، والتحقق مع getfacl تأكد من صحة قائمة التحكم بالوصول (ACL). هذا يضمن قدرة خادم الويب على قراءة الملف لتحميل ووردبريس، دون تعديله أو استبداله.

سحق
chown ubuntu:www-data /var/www/blog/wp-config.php
chown ubuntu:www-data /var/www/blog/wp-admin
chown ubuntu:www-data /var/www/blog/wp-includes
# WP-CONFIG should always have 600 (-rw-------) or 440 (-r--r-----+) permission
chmod 440 /var/www/blog/wp-config.php
sudo setfacl -m u:www-data:r /var/www/blog/wp-config.php
# ensure mask allows read
sudo setfacl -m m::r /var/www/blog/wp-config.php
getfacl /var/www/blog/wp-config.php
# https://developer.wordpress.org/advanced-administration/security/hardening/#file-permissions
# Clear Session Command History
history -c

تأمين وتحسين ووردبريس

يستخدم ووردبريس مجموعة من مفاتيح التشفير والأملاح لتأمين جلسات المستخدم وملفات تعريف الارتباط. وتجعل هذه المفاتيح والأملاح من المستحيل تقريبًا على أي شخص اختراق تسجيل الدخول أو إعادة استخدام رموز المصادقة.

سحق
# Set unique salts & keys
sudo -u ubuntu wp config shuffle-salts

قبل الختام، دعونا نضيف بضعة أسطر إضافية إلى wp-config.php لجعل WordPress يتصرف بشكل أكثر قابلية للتنبؤ وأمانًا.
يحررwp-config.php وأضف ما يلي فوق "هذا كل شيء، توقف عن التحرير!"

بي اتش بي
# Disable file editing inside WP-Admin
define('DISALLOW_FILE_EDIT', true);
# Limit Revisions to 5
define('WP_POST_REVISIONS', 5);
# Disable WP cron (use system cron)
define('DISABLE_WP_CRON', true);
# Save/Exit the file

بما أننا عطّلنا وظيفة cron الداخلية في ووردبريس سابقًا، فسنستبدلها الآن بوظيفة cron مناسبة للنظام. هذا يضمن تنفيذ المهام المجدولة، مثل نشر المنشورات، أو إرسال رسائل البريد الإلكتروني، أو تشغيل التحديثات، في الوقت المحدد، حتى مع انخفاض عدد زيارات موقعك.

سحق
sudo -u www-data crontab -e
# Append the following at the end of the file
* * * * * /usr/local/bin/wp --path=/var/www/blog cron event run --due-now --quiet
سحق
# To list upcoming scheduled events
sudo -u www-data wp cron event list

# To run all pending (due) cron events immediately
sudo -u www-data -H wp cron event run --due-now

إعداد خادم الويب NGINX

الآن بعد تثبيت ووردبريس وتأمينه، لنضعه خلف خادم ويب مناسب. سنستخدم نجينكس، وهو بديل خفيف الوزن وعالي الأداء لـ Apache لخدمة حركة المرور على موقعك، ومعالجة SSL، وحتى العمل كموازن للتحميل إذا كنت تخطط للتوسع لاحقًا.
أولاً، دعنا نقوم بإعداد Certbot لإصدار شهادة SSL مجانية | مفتاح API لـ Cloudflareإذا كنت لا تستخدم Cloudflare، فابحث عن مزود الخدمة الخاص بك هنا أو استخدم طريقة HTTP.
ضع في اعتبارك الذي - التي "ملف blog.confيمكن إعادة تسمية "" بأي اسم تريده. في حال لم يكن ذلك واضحًا.

سحق
sudo apt install -y certbot python3-certbot-dns-cloudflare
sudo mkdir -p /etc/letsencrypt
echo "dns_cloudflare_api_token = YOUR_API_TOKEN_HERE" > /etc/.cloudflare.ini
sudo chmod 600 /root/.cloudflare.ini
سحق
# Issue a Certificate
sudo certbot certonly -d example.com -d "*.example.com" \
  --dns-cloudflare \
  --dns-cloudflare-credentials /etc/.cloudflare.ini \
  --key-type rsa \
  --rsa-key-size 2048 \
  --agree-tos \
  --force-renewal\
  --no-eff-email\
  --email YOUR@EMAIL.COM
# The cert output should be in /etc/letsencrypt/live/example.com/

الآن، لنبدأ بإعداد NGINX. ملفات التكوين: في حسابي على جيثب. لا تنسى لتغيير "example.com" داخل الملفات إلى المجال الخاص بك ومسار شهادة SSL.

سحق
nano /etc/nginx/nginx.conf
# Apend/Modify the following inside http{} block
http2 on;
ssl_protocols TLSv1.2 TLSv1.3; # Drop v1, v1.1 - Keep only 1.2 & 1.3
سحق
cd /etc/nginx/sites-available/
wget -O /etc/nginx/sites-available/blog.conf https://raw.githubusercontent.com/abdessalllam/cloud-setup/refs/heads/main/wordpress/blog.conf
# Disable directory browsing
echo "autoindex off;" > /etc/nginx/snippets/no-autoindex.conf
# Enable the Website and Reload NGINX
sudo ln -s /etc/nginx/sites-available/blog.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

تمكين دعم Cloudflare

إذا كنت ستستخدم Cloudflare مع الوكيل العكسي، فنحن بحاجة إلى إضافة نطاقات CF للتأكد من حصول خادمنا على عنوان IP الحقيقي للزائر. أحدث إصدارات Cloudflare IPv4 - IPv6 النطاقات
يمكن تطبيق نفس الشيء على موازنات التحميل الأخرى، كل ما عليك فعله هو تعديل الملف أدناه لتضمين نطاقات IP الخاصة بها "فقط".

سحق
wget -O /etc/nginx/conf.d/realip.conf https://raw.githubusercontent.com/abdessalllam/cloud-setup/refs/heads/main/wordpress/realip.conf
sudo nginx -t && sudo systemctl reload nginx

يعد هذا أمرًا مهمًا، خاصةً إذا كنت ستستخدم مكون التحليلات و/أو مكون WAF لموقع WordPress الخاص بك.

سيتم تضمين جميع ملفات .conf الموجودة ضمن conf.d تلقائيًا بشكل افتراضي
(اختياري) أنشئ ملف ip.php في مجلد /var/www/blog وتحقق من حصول Nginx على عنوان IP الحقيقي. (احذفه بعد الانتهاء)

ip.php
<?php
header('Content-Type: text/plain');
foreach (['REMOTE_ADDR','HTTP_CF_CONNECTING_IP','HTTP_X_FORWARDED_FOR'] as $h) {
    echo "$h: " . ($_SERVER[$h] ?? '') . "\n";
}

الآن، قم بتثبيت البرنامج الإضافي الخاص بـ Cloudflare وقم بتطبيق الإعدادات الموصى بها.

إعداد تخزين Redis المؤقت

Redis هي إحدى أفضل الطرق لتسريع WordPress (التخزين المؤقت للكائنات، والتخزين المؤقت للصفحات في بعض الأحيان)

سحق
sudo systemctl enable redis-server
sudo systemctl start redis-server

تأمين Redis عن طريق التحرير /etc/redis/redis.conf

/etc/redis/redis.conf
# Append/Uncomment/Modify the following
supervised systemd
maxmemory 256mb                # adjust for your RAM
maxmemory-policy allkeys-lru   # evict least-used keys

تثبيت المكونات الإضافية الأساسية

سحق
sudo -u www-data wp plugin install redis-cache --activate
sudo -u www-data wp redis enable
sudo -u www-data wp plugin install nginx-helper --activate

تثبيت وإعداد Brotli

يُسهّل Brotli تحميل موقعك الإلكتروني بإرسال بايتات أقل عبر الإنترنت - مثل ضغط الملفات قبل إرسالها عبر البريد الإلكتروني، ولكنه تلقائي وغير مرئي للمستخدم. إنه أفضل من Gzip.

سحق
# Only with ppa:ondrej/nginx Repo
sudo apt install libnginx-mod-http-brotli-filter libnginx-mod-http-brotli-static
سحق
nano /etc/nginx/nginx.conf
/etc/nginx/nginx.conf
# Append the following to inside http{} block, above "gzip on"
brotli on;
brotli_comp_level 5;
brotli_static on;  # serve precompressed .br if present (harmless if not)
brotli_types
  text/plain text/css text/javascript application/javascript
  application/json application/xml application/rss+xml
  application/vnd.ms-fontobject application/font-sfnt
  application/x-font-ttf font/ttf font/otf image/svg+xml;
  
# Append/Uncomment the following
gzip on;
gzip_comp_level 6;
gzip_types text/plain text/css application/javascript application/json application/xml image/svg+xml;

أعد تحميل NGINX واختبر ما إذا كان Brotli يعمل

سحق
sudo nginx -t && sudo systemctl reload nginx
# Brotli client
curl -sI -H 'Accept-Encoding: br' https://yourdomain | grep -i content-encoding
# Response → Content-Encoding: br

# Gzip client
curl -sI -H 'Accept-Encoding: gzip' https://yourdomain | grep -i content-encoding
# Response → Content-Encoding: gzip (or nothing if already tiny)

إعادة التحميل التلقائي لـ NGINX

إذا بدأت باستخدام إضافات مثل Smush وYoast SEO Redirects، إلخ... أي إضافة تتطلب تضمين ملفات في "blog.conf" أو "nginx.conf". في كل مرة تُغيّر فيها الإضافة هذا الملف، نحتاج إلى إعادة تحميل NGINX. لذا، لنُنشئ خدمة تُنفّذ ذلك تلقائيًا.

/etc/systemd/system/nginx-auto-reload.service
# Create a /etc/systemd/system/nginx-auto-reload.service
[Unit]
Description=Validate and reload Nginx when watched files change

[Service]
Type=oneshot
# Validate config & Stop if there are errors
ExecStart=/usr/sbin/nginx -t
# Reload ONLY if ExecStart succeeded
ExecStartPost=/bin/systemctl reload nginx
/etc/systemd/system/nginx-auto-reload.path
# Create /etc/systemd/system/nginx-auto-reload.path
[Unit]
Description=Watch specific Nginx-related files

[Path]
# Add one line per file you want to monitor for changes
# Add/Remove Lines as needed
PathChanged=/var/www/blog/file1.conf
PathChanged=/var/www/blog/file2.conf
PathChanged=/var/www/blog/file3.conf

[Install]
WantedBy=multi-user.target

تمكين وبدء

سحق
sudo systemctl daemon-reload
sudo systemctl enable --now nginx-auto-reload.path
# (optional first run)
sudo systemctl start nginx-auto-reload.service

امتحان:قم بتعديل أحد الملفات التي تتم مراقبتها، ثم

سحق
journalctl -u nginx-auto-reload.service -n 20 --no-pager
# You should see nginx: configuration file /etc/nginx/nginx.conf test is successful followed by a reload. If the config is broken, nginx -t will fail and no reload happens.

تأمين وتحسين PHP

الآن، لنُحسّن أداء PHP وأمانه. الإعداد الافتراضي php.ini القيم مُخصصة للتطوير، لا للإنتاج. إنها آمنة، لكنها بعيدة كل البعد عن المثالية. ستجعل هذه التعديلات خادمك أسرع وأكثر أمانًا وأكثر ملاءمةً لـ WordPress على نطاق واسع.
قم بتعديل/إضافة ما يلي إلى الملفات المناسبة.

/etc/php/8.4/fpm/php.ini
; Core
expose_php = 0
cgi.fix_pathinfo = 0           ; never guess script names
default_charset = UTF-8
max_execution_time = 120
memory_limit = 512M            ; raise if you run heavy builders
post_max_size = 64M
upload_max_filesize = 64M
max_input_vars = 5000
realpath_cache_size = 4096k
realpath_cache_ttl = 600

; Errors (log, don't leak)
display_errors = Off
log_errors = On
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
zend.exception_ignore_args = On

; Sessions (secure cookies)
session.use_strict_mode = 1
session.cookie_httponly = 1
session.cookie_secure = 1      ; keep https-only
session.cookie_samesite = Lax
session.sid_length = 48
session.sid_bits_per_character = 6
; per-pool session.save_path is set in pool conf for isolation

; Opcache (prod profile)
opcache.enable = 1
opcache.enable_cli = 1                 ; faster WP-CLI
opcache.jit = off                      ; JIT is useless for WP
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 64
opcache.max_accelerated_files = 130987 ; ~128k hash slots
opcache.max_wasted_percentage = 5
opcache.validate_timestamps = 0        ; immutable code in prod
opcache.revalidate_freq = 0            ; reload FPM on deploy
opcache.fast_shutdown = 1
opcache.save_comments = 1              ; plugins use reflection
; If you deploy often and don't reload, use:
; opcache.validate_timestamps=1
; opcache.revalidate_freq=60

; Optional: APCu (micro-cache inside each FPM worker)
; install: apt-get install php8.4-apcu
apc.enabled = 1
apc.enable_cli = 0
apc.shm_size = 64M
apc.entries_hint = 4096
apc.ttl = 120
apc.gc_ttl = 240

الآن، لنُعدّل PHP-FPM، مدير العمليات FastCGI الذي يُشغّل شفرة PHP. هنا تكمن معظم مشاكل الأداء، خاصةً في مواقع WordPress عالية الزيارات.

/etc/php/8.4/fpm/pool.d/www.conf
; PROCESS MODEL
pm = dynamic
; I use: max_children  (MemAvailable - reserve_for_DB_OS) / avg_child_MB
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 4
pm.max_spare_servers = 20
pm.max_requests = 800          ; recycle to kill leaks

; LISTENING
listen = /run/php/php8.4-fpm.sock
listen.mode = 0660
listen.owner = www-data
listen.group = www-data

; SECURITY GUARD RAILS
clear_env = yes
security.limit_extensions = .php
; Harden only FPM SAPI; leave CLI free for wp-cli
php_admin_value[disable_functions] = exec,passthru,shell_exec,system,proc_open,proc_terminate,proc_get_status,proc_nice,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wexitstatus,pcntl_wifexited,pcntl_wifsignaled,pcntl_wifstopped,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_async_signals,popen
; If a plugin genuinely needs one of these, remove it here, not globally.

; OBSERVABILITY
pm.status_path = /fpm-status
ping.path = /fpm-ping
ping.response = pong
request_terminate_timeout = 120
request_slowlog_timeout = 3s
; Make sure the slowlog path exists and is writable by the FPM user
; e.g. sudo mkdir -p /var/log/php8.4-fpm && sudo chown www-data:www-data /var/log/php8.4-fpm
; Otherwise, PHP Reload would fail
slowlog = /var/log/php8.4-fpm/slow.log
catch_workers_output = yes
decorate_workers_output = no
سحق
# Reload PHP
sudo systemctl reload php8.4-fpm
sudo systemctl status php8.4-fpm --no-pager

آمن التسجيل

السجلات هي مُسجِّل بياناتك السرية: فهي تُخبرك بما حدث، ومتى، ولماذا. وهي ضرورية لتصحيح الأخطاء واكتشاف مشاكل الأداء أو الأمان. ولكن بدون تدوير، ستنمو السجلات بلا نهاية وقد تملأ قرصك. نفِّذ العملية بشكل صحيح، وفعِّل ما تحتاجه فقط، وخزِّنه بأمان، وقم بتدويره/ضغطه وفقًا لجدول زمني.

سحق
mkdir -p /var/log/blog
sudo chown www-data:www-data /var/log/blog
sudo chmod 750 /var/log/blog
sudo tee /etc/logrotate.d/wordpress >/dev/null <<'EOF'
/var/log/blog/debug.log {
weekly
rotate 12
compress
missingok
notifempty
create 640 www-data www-data
}
EOF
ملف wp-config.php
# Enable file logging only in wp-config.php
if ( ! defined( 'WP_DEBUG' ) ) {
        define( 'WP_DEBUG', true );
}
// Set display to false, We don't want errors displayed on our frontend
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
// Log to a file (outside web root is best)
define('WP_DEBUG_LOG', '/var/log/blog/debug.log');

إضافات

إذا كنت لا تستخدم "Email Obfuscation" الخاص بـ Cloudflare، فإنني أوصي بهذا المكون الإضافي لحماية عنوان بريدك الإلكتروني من برامج التجسس والبرمجيات الخبيثة. يضمن هذا ظهور بريدك الإلكتروني فقط عند تفعيل JavaScript، مما يبقيه مخفيًا عن مصدر الصفحة ويصعّب على برامج التجسس الوصول إليه.

سحق
# Let's create a Must-Use folder
mkdir -p /var/www/blog/wp-content/mu-plugins 
chown ubuntu:www-data //var/www/blog/wp-content/mu-plugins
wget -O /var/www/blog/wp-content/mu-plugins/protect-my-email.php https://raw.githubusercontent.com/abdessalllam/cloud-setup/refs/heads/main/wordpress/protect-my-email.php

الاستخدام:

محرر
Full Shortcode: [js_email label="Reach out to me via Email:" user="info" domain="example.com" display="inline" subject="Hello" msg="Please enable JS for the Email" class="optional-extra-class"]
Minimal Use: [js_email user="info" domain="example.com"]
Output: info@example.com

ماذا بعد؟

توجد سجلات Nginx في /var/log/nginx/

هذا كل شيء، لقد انتهيت. تهانينا 🎉🎉 أنصحك بتثبيت إضافة ذاكرة التخزين المؤقت وإضافة الأمان لتسريع عملية الإعداد وتأمينها بشكل أكبر.

هذا ليس الأسرع طريقة تثبيت ووردبريس، ولكنها الطريق الصحيح.
هل لديكم اقتراحات أو لاحظتم شيئًا يمكنني تحسينه؟ شاركونا أفكاركم في التعليقات، يسعدنا سماع آرائكم.

 

 

مصنفة في:

أدلة,