[42 Project]مشروع inception

visible
visible
date
Mar 24, 2023
thumbnail
https://raw.githubusercontent.com/docker-library/docs/c350af05d3fac7b5c3f6327ac82fe4d990d8729c/docker/logo.png
slug
42_project_مشروع_inception
author
status
Public
tags
42Project
summary
يتحدث هذا المستند عن خادم Nginx وكيفية استخدامه كـ reverse proxy أو load balancer، ويوضح ملف تكوين خادم Nginx لموقع ويب يتم تقديمه عبر HTTPS. كما يتضمن المستند ملف Dockerfile لإنشاء صورة Docker تعمل على نظام تشغيل Debian Buster، ويشرح كيفية استخدام أداة إدارة قاعدة بيانات مفتوحة المصدر Adminer وخادم ذاكرة تخزين مؤقت مفتوح المصدر Redis Cache.
type
Post
updatedAt
Aug 21, 2023 05:58 PM
Status
Done
Person

Inception_42

هذا دليل كامل لمشروع Inception. ستتعلم في هذه الصفحة عن Docker، وما هو دوره في الإرساء، ولماذا نحتاجه. ستتعلم أيضًا كيفية استخدام صور Docker، وكيفية إنشاء صورة إرساء خاصة بك من البداية.

What are Containers ?

يتم استخدام الحاويات (Containers) لحزم التطبيقات والبيئة اللازمة لتشغيلها وتشغيلها بشكل متسق عبر منصات مختلفة. يتم تشغيل الحاويات في بيئة معزولة، مما يجعلها مستقلة تمامًا عن بقية النظام الأساسي. يسهل استخدام الحاويات في تطوير البرامج ونقلها بين البيئات بسهولة.

What are Virtual Machines ?

تستخدم الآلات الافتراضية (Virtual Machines) لإنشاء بيئات تشغيل افتراضية تشبه بشكل كبير النظام الأساسي. تعمل الآلات الافتراضية داخل برنامج مضيف، وتسمح لمستخدمين متعددين بتشغيل أنظمة تشغيل مختلفة على جهاز واحد بشكل متزامن. يتم تعيين موارد الجهاز الفعلية، مثل المعالج والذاكرة ومساحة التخزين، لكل آلة افتراضية بشكل منفصل. يستخدم الآلات الافتراضية على نطاق واسع في تطوير البرامج والاختبارات وإدارة البيانات.

لماذا Docker وما هي المشكلة التي يحلها؟

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

Docker

هناك العديد من الأوامر الشائعة في Docker. بعض الأمثلة على هذه الأوامر هي:
  • docker run: لبدء حاوية جديدة وتشغيل تطبيق محدد في الحاوية.
  • docker build: لبناء صورة Docker من ملف Dockerfile.
  • docker pull: لسحب صورة Docker من مستودع Docker.
  • docker push: لرفع صورة Docker إلى مستودع Docker.
  • docker ps: لعرض قائمة بجميع الحاويات التي تعمل حاليًا.
  • docker stop: لإيقاف تشغيل حاوية محددة.
  • docker rm: لإزالة حاوية محددة.
  • docker rmi: لإزالة صورة Docker محددة.

Docker Compose.

يسمح لك ملف Docker Compose بتعريف تطبيقات Docker المتعددة في ملف واحد. يمكنك تعريف الحاويات والشبكات وحجم التخزين والتكوينات الأخرى في ملف واحد بدلاً من كتابتها واحدة تلو الأخرى في سطر الأوامر. يمكنك استخدام Docker Compose لتبسيط عملية تشغيل التطبيقات المتعددة في بيئات الإنتاج والتطوير.
تعد Docker Compose أداة قوية تساعد على تسهيل عملية إدارة عدة حاويات وتطبيقات في وقت واحد. ومع ذلك ، يتطلب استخدامه بعض المعرفة بالأوامر الرئيسية لضمان التعامل الفعال مع Docker Compose CLI.
من بين الأوامر الرئيسية التي يستخدمها المطورون بشكل متكرر عند العمل مع Docker Compose:
  • docker-compose up: تستخدم هذه الأمر لبدء تشغيل تطبيقات Docker المتعددة مع تكوينات محددة في ملف docker-compose.yml.
  • docker-compose down: تستخدم هذه الأمر لإيقاف تشغيل تطبيقات Docker المتعددة التي تم إنشاؤها بواسطة docker-compose up.
  • docker-compose build: تستخدم هذه الأمر لبناء صور Docker المطلوبة لتشغيل تطبيقات Docker المتعددة.
  • docker-compose stop: تستخدم هذه الأمر لإيقاف تشغيل تطبيقات Docker المتعددة دون إزالتها.
  • docker-compose ps: تستخدم هذه الأمر لعرض قائمة بجميع الحاويات المعرفة في ملف docker-compose.yml وحالة كل حاوية.
تستخدم هذه الأوامر بشكل متكرر من قبل المطورين لتشغيل حاويات وتطبيقات متعددة بسهولة ، وتساعد في تسريع وتسهيل عملية التطوير والإنتاج. بالإضافة إلى ذلك ، يمكن استخدام الأوامر المتعلقة بـ Docker Compose CLI لإدارة حاويات Docker بشكل أكثر فعالية ويسرًا.
يتم إعادة بناء Docker image عن طريق استخدام الأمر docker-compose up --build من خلال command line. هذا الأمر يقوم بإنشاء حاوية جديدة وتحديث تطبيق محدد في الحاوية باستخدام Dockerfile الخاص بك ويتم إعادة بناء الصورة الخاصة بك من البداية.

Docker Network

تتيح Docker Network إمكانية توصيل الحاويات بشكل مباشر والتواصل مع بعضها البعض عبر شبكة خاصة. يمكنك إنشاء شبكات Docker بسهولة والتحكم فيها باستخدام Docker CLI أو Docker Compose. يمكن استخدام Docker Network لتوصيل حاويات Docker بمصادر بيانات خارجية وخوادم قاعدة البيانات والخدمات الأخرى التي يتم تشغيلها خارج الحاويات. يمكن استخدام Docker Network لتقسيم حاويات Docker إلى مجموعات وتعيين موارد الشبكة المختلفة لكل مجموعة.
يمكن تكوين Docker Network بطرق مختلفة ، مثل تكوينها باستخدام Docker CLI أو Docker Compose. تمكنك Docker Network من تحديد العديد من الخصائص ، مثل نوع الشبكة والمحددات الفريدة للشبكة والإعدادات الأخرى. بالإضافة إلى ذلك ، يتيح Docker Network تحديد الحاويات المتصلة بالشبكة وتحديد الأذونات والتكوينات الأخرى التي يتم تطبيقها على كل حاوية.
تمكنك Docker Network من توفير واجهة برمجة تطبيقات (API) سهلة الاستخدام لإدارة الشبكات وتوصيل الحاويات. يتم استخدام هذه الواجهة البرمجية لإجراء عمليات إنشاء وتكوين وإدارة الشبكات بسهولة ، وتحديد الحاويات المتصلة بالشبكة وإزالتها عند الحاجة. بالإضافة إلى ذلك ، يمكن استخدام API لتكوين الأذونات والتكوينات الأخرى التي يتم تطبيقها على كل حاوية متصلة بالشبكة.
تعتبر Docker Network أداة قوية لتقسيم حاويات Docker إلى مجموعات وتوصيلها ببعضها البعض بسهولة. تتيح لمطوري البرامج إمكانية تحديد الموارد المختلفة لكل مجموعة وضبط الأذونات والتكوينات الأخرى على الحاويات. بالإضافة إلى ذلك ، يمكن استخدام Docker Network لتوصيل حاويات Docker بمصادر بيانات خارجية وخوادم قاعدة البيانات والخدمات الأخرى التي تعمل خارج الحاويات.

Docker Volumes

تتيح ميزة Docker Volumes الحفاظ على البيانات المستخدمة بواسطة حاويات Docker بشكل دائم. يمكن استخدام Volumes لتبادل البيانات بين حاويات مختلفة والحفاظ على البيانات بين عمليات تشغيل الحاويات. كما يمكن استخدام Volumes لتخزين البيانات المهمة والحفاظ على سلامة البيانات في حالة فقدان حاوية معينة أو تعطلها.
يمكن تكوين Volumes بطرق مختلفة، مثل تكوينها باستخدام Docker CLI أو Docker Compose. تمكّنك Volumes من تحديد العديد من الخصائص، مثل نوع الحجم والمحددات الفريدة للحجم والإعدادات الأخرى. بالإضافة إلى ذلك، يتيح Volumes تحديد المجلدات المتصلة بالحاوية وتحديد الأذونات والتكوينات الأخرى التي يتم تطبيقها على كل مجلد.
تمكنك Volumes من توفير واجهة برمجة تطبيقات (API) سهلة الاستخدام لإدارة الحجم وتخزين البيانات بسهولة. يتم استخدام هذه الواجهة البرمجية لإجراء عمليات إنشاء وتكوين وإدارة الحجم بسهولة، وتحديد المجلدات المتصلة بالحاوية وإزالتها عند الحاجة. بالإضافة إلى ذلك، يمكن استخدام API لتكوين الأذونات والتكوينات الأخرى التي يتم تطبيقها على كل مجلد متصل بحاوية Docker.
تُعد Volumes أداة قوية للحفاظ على البيانات المستخدمة بواسطة حاويات Docker بشكل دائم. يتيح لمطوري البرامج إمكانية تبادل البيانات بين حاويات مختلفة والحفاظ على البيانات بين عمليات تشغيل الحاويات. كما يمكن استخدام Volumes لتخزين البيانات المهمة والحفاظ على سلامة البيانات في حالة فقدان حاوية معينة أو تعطلها.
🧘‍♂️
يفضل مشاهدة Crush Coures Docker on Youtube

متطلبات المشروع الالزامية

قاعدة البيانات Maria db

يعتبر MariaDB قاعدة بيانات مفتوحة المصدر شائعة الاستخدام في تطوير البرامج. يتم توفير حلول الاستضافة السحابية لـ MariaDB عبر العديد من المزودين، ولكن يمكن استخدام Docker لتشغيل MariaDB في بيئة محلية أو سحابية خاصة. يتم توفير مزايا عديدة عند استخدام Docker لتشغيل MariaDB، مثل السهولة في الإعداد والتشغيل والتنقل بين النسخ المختلفة، بالإضافة إلى إمكانية توفير إصدارات مختلفة من MariaDB في عملية التطوير والاختبار.

Script File

هذا النص يشرح الأمر الذي يجب تنفيذه لتشغيل MariaDB في بيئة Docker وتمكين بعض الإعدادات الأساسية مثل قاعدة البيانات واسم المستخدم وكلمة المرور. يتم إنشاء ملف SQL مؤقت يحتوي على بعض الأوامر اللازمة لإنشاء قاعدة البيانات وتعيين المستخدم والأذونات ذات الصلة. يتم تشغيل هذا الملف SQL باستخدام خادم MariaDB ، ومن ثم إيقاف تشغيل الخادم. يعد هذا السكريبت مثالًا على كيفية استخدام Docker لتشغيل تطبيقات MariaDB وتكوينها باستخدام ملفات SQL.
يمكنك استخدام هذا السكريبت أو تعديله حسب متطلباتك الخاصة. يجب تشغيل السكريبت على الخادم الخاص بك باستخدام shell أو terminal. الأوامر المستخدمة في السكريبت هي service mysql start و mysql < db1.sql و kill $(cat /var/run/mysqld/mysqld.pid).
مثال لتشغيل السكريبت:
#!/bin/bash

db1_name=mydatabase
db1_user=myuser
db1_pwd=mypassword

service mysql start

echo "CREATE DATABASE IF NOT EXISTS $db1_name ;" > db1.sql
echo "CREATE USER IF NOT EXISTS '$db1_user'@'%' IDENTIFIED BY '$db1_pwd' ;" >> db1.sql
echo "GRANT ALL PRIVILEGES ON $db1_name.* TO '$db1_user'@'%' ;" >> db1.sql
echo "ALTER USER 'root'@'localhost' IDENTIFIED BY '12345' ;" >> db1.sql
echo "FLUSH PRIVILEGES;" >> db1.sql

mysql < db1.sql

Configuration MariaDB

هذا هو ملف التكوين لـ MariaDB ، وهو نظام إدارة قواعد البيانات العلاقية ذو شعبية كبيرة ومفتوح المصدر. يحتوي الملف على عدد من الإعدادات والخيارات التي تتحكم في كيفية عمل خادم MariaDB ، مثل مستخدم الخادم والمنفذ ومقبس Unix ودليل البيانات.
بعض الإعدادات المهمة في هذا الملف تشمل ما يلي:
user: تحديد حساب المستخدم الذي يعمل تحته خادم MariaDB. pid-file: تحديد المسار واسم الملف الذي يخزن معرف العملية (PID) للخادم. socket: تحديد مسار واسم ملف مقبس Unix الذي يستخدمه الخادم للاتصالات المحلية للعملاء. port: تحديد رقم منفذ TCP/IP الذي يستمع إليه الخادم للاتصالات الواردة من العميل. basedir: تحديد الدليل الأساسي الذي تم تثبيت خادم MariaDB فيه. datadir: تحديد الدليل الذي يخزن فيه خادم MariaDB قواعد بياناته. bind-address: تحديد عنوان IP الذي يتصل إليه الخادم للاتصالات الواردة من العميل. query_cache_size: تحديد حجم ذاكرة التخزين المؤقت للاستعلامات ، والتي تخزن نتائج الاستعلامات التي يتم تنفيذها بشكل متكرر. log_error: تحديد المسار واسم ملف سجل الأخطاء الذي يخزنه الخادم. character-set-server و collation-server: تحديد مجموعة الأحرف الافتراضية والترتيب الذي يستخدمه الخادم لقواعد البيانات والجداول الجديدة. هناك أيضًا عدد من الإعدادات والخيارات الأخرى لضبط أداء الخادم ، وتمكين تسجيل الخطأ والتكرار ، وتعزيز الأمان.

DockerFile For Maria db

هذا هو ملف Dockerfile الذي يحدد صورة Docker استنادًا إلى صورة debian:buster الأساسية. الصورة مصممة لتشغيل خادم MariaDB ، وتفعل ما يلي:
  • يحدث قائمة الحزم باستخدام apt-get update.
  • يثبت حزمة خادم MariaDB باستخدام apt-get install mariadb-server.
  • ينسخ ملف تكوين مخصص 50-server.cnf إلى دليل /etc/mysql/mariadb.conf.d/. يحتوي هذا الملف على إعدادات مخصصة لخادم MariaDB.
  • ينسخ ملف script.sh الخاص بشل إلى الدليل الجذر.
  • يضبط الأمر الافتراضي لحاوية Docker لتشغيل ملف script.sh.

MariaDb Structure File

Structure File:
.
├── Dockerfile
└── tools
    ├── 50-server.cnf
    └── script.sh
Dockerfile:
FROM debian:buster

RUN apt-get update -y && apt-get install mariadb-server -y

COPY ./tools/50-server.cnf /etc/mysql/mariadb.conf.d/

COPY ./tools/script.sh /

CMD ["/script.sh"]
#!/bin/bash

db1_name=mydatabase
db1_user=myuser
db1_pwd=mypassword

service mysql start

echo "CREATE DATABASE IF NOT EXISTS $db1_name ;" > db1.sql
echo "CREATE USER IF NOT EXISTS '$db1_user'@'%' IDENTIFIED BY '$db1_pwd' ;" >> db1.sql
echo "GRANT ALL PRIVILEGES ON $db1_name.* TO '$db1_user'@'%' ;" >> db1.sql
echo "ALTER USER 'root'@'localhost' IDENTIFIED BY '12345' ;" >> db1.sql
echo "FLUSH PRIVILEGES;" >> db1.sql

mysql < db1.sql

while true
do
  sleep 300
done
50-server.cnf:
#
#These groups are read by MariaDB server.
#Use it for options that only the server (but not clients) should see
#
#See the examples of server my.cnf files in /usr/share/mysql

#this is read by the standalone daemon and embedded servers
[server]

#this is only for the mysqld standalone daemon
[mysqld]

#
# * Basic Settings
#
user                    = mysql
pid-file                = /run/mysqld/mysqld.pid
socket                  = /run/mysqld/mysqld.sock
port                    = 3306
basedir                 = /usr
datadir                 = /var/lib/mysql
tmpdir                  = /tmp
lc-messages-dir         = /usr/share/mysql
#skip-external-locking

#Instead of skip-networking the default is now to listen only on
#localhost which is more compatible and is not less secure.
bind-address            = 0.0.0.0

#
# * Fine Tuning
#
#key_buffer_size        = 16M
#max_allowed_packet     = 16M
#thread_stack           = 192K
#thread_cache_size      = 8
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
#myisam_recover_options = BACKUP
#max_connections        = 100
#table_cache            = 64
#thread_concurrency     = 10

#
# * Query Cache Configuration
#
#query_cache_limit      = 1M
query_cache_size        = 16M

#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
#general_log_file       = /var/log/mysql/mysql.log
#general_log            = 1
#
# Error log - should be very few entries.
#
log_error = /var/log/mysql/error.log
#
# Enable the slow query log to see queries with especially long duration
#slow_query_log_file    = /var/log/mysql/mariadb-slow.log
#long_query_time        = 10
#log_slow_rate_limit    = 1000
#log_slow_verbosity     = query_plan
#log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
#       other settings you may need to change.
#server-id              = 1
#log_bin                = /var/log/mysql/mysql-bin.log
expire_logs_days        = 10
#max_binlog_size        = 100M
#binlog_do_db           = include_database_name
#binlog_ignore_db       = exclude_database_name

#
# * Security Features
#
# Read the manual, too, if you want chroot!
#chroot = /var/lib/mysql/
#
# For generating SSL certificates you can use for example the GUI tool "tinyca".
#
#ssl-ca = /etc/mysql/cacert.pem
#ssl-cert = /etc/mysql/server-cert.pem
#ssl-key = /etc/mysql/server-key.pem
#
# Accept only connections using the latest and most secure TLS protocol version.
# ..when MariaDB is compiled with OpenSSL:
#ssl-cipher = TLSv1.2
# ..when MariaDB is compiled with YaSSL (default in Debian):
#ssl = on

#
# * Character sets
#
# MySQL/MariaDB default is Latin1, but in Debian we rather default to the full
# utf8 4-byte character set. See also client.cnf
#
character-set-server  = utf8mb4
collation-server      = utf8mb4_general_ci

#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!

#
# * Unix socket authentication plugin is built-in since 10.0.22-6
#
# Needed so the root database user can authenticate without a password but
# only when running as the unix root user.
#
# Also available for other users if required.
# See <https://mariadb.com/kb/en/unix_socket-authentication-plugin/>

# this is only for embedded server
[embedded]

WordPress

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

Script File

#!/bin/bash



# create directory to use in nginx container later and also to setup the wordpress conf
mkdir /var/www/
mkdir /var/www/html

cd /var/www/html


rm -rf *

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar 

chmod +x wp-cli.phar 

mv wp-cli.phar /usr/local/bin/wp


wp core download --allow-root

mv /var/www/html/wp-config-sample.php /var/www/html/wp-config.php

mv /wp-config.php /var/www/html/wp-config.php


sed -i -r "s/db1/$db_name/1"   wp-config.php
sed -i -r "s/user/$db_user/1"  wp-config.php
sed -i -r "s/pwd/$db_pwd/1"    wp-config.php

wp core install --url=$DOMAIN_NAME/ --title=$WP_TITLE --admin_user=$WP_ADMIN_USR --admin_password=$WP_ADMIN_PWD --admin_email=$WP_ADMIN_EMAIL --skip-email --allow-root




wp user create $WP_USR $WP_EMAIL --role=author --user_pass=$WP_PWD --allow-root


wp theme install astra --activate --allow-root


wp plugin install redis-cache --activate --allow-root

wp plugin update --all --allow-root


 
sed -i 's/listen = \/run\/php\/php7.3-fpm.sock/listen = 9000/g' /etc/php/7.3/fpm/pool.d/www.conf

mkdir /run/php



wp redis enable --allow-root

/usr/sbin/php-fpm7.3 -F
هذا هو سكريبت shell يقوم بإعداد موقع ويب WordPress مع الخطوات التالية:
  • إنشاء دليل /var/www/html لاحتواء ملفات الموقع.
  • إزالة أي ملفات من الدليل /var/www/html.
  • تنزيل وتثبيت WP-CLI ، وهو أداة سطر الأوامر لإدارة مواقع WordPress.
  • تنزيل أحدث إصدار من WordPress باستخدام WP-CLI.
  • إعادة تسمية ملف wp-config-sample.php إلى wp-config.php ونقل ملف wp-config.php المخصص إلى الموقع نفسه.
  • تحرير ملف wp-config.php لاستبدال العلامات النهائية بالقيم الفعلية لاسم قاعدة البيانات واسم المستخدم وكلمة المرور.
  • استخدام WP-CLI لتثبيت WordPress مع المعلمات المقدمة ، بما في ذلك عنوان URL للموقع والعنوان وتفاصيل حساب المشرف.
  • إنشاء مستخدم إضافي بدور "المؤلف" باستخدام WP-CLI.
  • تثبيت وتنشيط سمة Astra وملحق Redis Cache باستخدام WP-CLI.
  • تحديث جميع الملحقات باستخدام WP-CLI.
  • تعديل تكوين PHP-FPM للاستماع على المنفذ 9000 بدلاً من مقبس Unix الافتراضي.
  • تمكين تخزين Redis باستخدام WP-CLI.
  • يبدأ خادم PHP-FPM لتشغيل موقع WordPress.
بصفة عامة ، يقوم هذا السكريبت بتوحيد عملية إعداد موقع WordPress الأساسي مع تكوين وملحقات مخصصة.

wp-config.php

هذا هو ملف wp-config.php لتثبيت ووردبريس. يحتوي على إعدادات التكوين الخاصة بالموقع ، بما في ذلك:
  • إعدادات قاعدة البيانات ، مثل اسم قاعدة البيانات واسم المستخدم وكلمة المرور والمضيف.
  • مفاتيح وأمان سرية تستخدم للمصادقة والأمان.
  • إعدادات تخزين Redis ، مثل مضيف وأرقام المنافذ.
  • تكوين لتمكين استخدام ملحق التخزين المؤقت.
  • بادئة الجداول لقواعد البيانات.
  • خيارات التصحيح.
  • المسار المطلق إلى دليل ووردبريس.
  • متطلبات تحميل ملف wp-settings.php ، الذي يبدأ ووردبريس. يتم استخدام هذا الملف من قبل ووردبريس خلال عملية التثبيت ويجب تكوينه بالإعدادات الصحيحة لضمان الوظائف الصحيحة للموقع.
<?php
/**
 * The base configuration for WordPress
 *
 * The wp-config.php creation script uses this file during the
 * installation. You don't have to use the web site, you can
 * copy this file to "wp-config.php" and fill in the values.
 *
 * This file contains the following configurations:
 *
 * * MySQL settings
 * * Secret keys
 * * Database table prefix
 * * ABSPATH
 *
 * @link https://wordpress.org/support/article/editing-wp-config-php/
 *
 * @package WordPress
 */

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'db1' );

/** MySQL database username */
define( 'DB_USER', 'user' );

/** MySQL database password */
define( 'DB_PASSWORD', 'pwd' );

/** MySQL hostname */
define( 'DB_HOST', 'mariadb' );

/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );

/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

define( 'WP_ALLOW_REPAIR', true );

/**#@+
 * Authentication Unique Keys and Salts.
 *
 * Change these to different unique phrases!
 * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
 * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
 *
 * @since 2.6.0
 */
define( 'AUTH_KEY',         '):Uw9 :|7$m3yy=c^IM%d8}zG6yXY%25SDUyr.r#GcDP)[b25Yn$sDLNwR~I=kwq' );
define( 'SECURE_AUTH_KEY',  'lBWxAzhu=StQ(s-[t_D8yH8_`0NiM~d[m q<{Hri]n#UM3J;@x[ne;,k<~cN`~%,' );
define( 'LOGGED_IN_KEY',    ' /e+%ecWs`>hA<s`|+7rmujt>3MA}GD*n=D7W%$8h*Xc!jP?hn+fw0#;;g{Ywl@k' );
define( 'NONCE_KEY',        ' -cX{xQc|GjD$=kXd,|lUX5)*oT)ru3^px-iU{q;`1If22EqIwA0/lPIIbpbtB=C' );
define( 'AUTH_SALT',        'U9LX s1@q6$[*VV,MUhL7tS@;I9t_u*uDQIfZdG.ei1Amy$*.RI_TSTz#y=X.>Wq' );
define( 'SECURE_AUTH_SALT', '0<MR&l4v=cZ)8Ke/#ip>2<Ed@ j<#pvLaOMc-jEFM9^tr`X*T2qDIB@)gg.0<e2V' );
define( 'LOGGED_IN_SALT',   'xSHh4B]r[~)h%n$f(dCt;mD}#q gy$<{ >qGgPS>XH*]jH>W<!10>H<_16l{(OdP' );
define( 'NONCE_SALT',       '7Ea$kvU|lkO8&X]b7^#K+w! lH2)SOelLiaYYX(Zz)Ebk_]-#m,J&aM<*JedFa| ' );

define( 'WP_REDIS_HOST', 'redis' );
define( 'WP_REDIS_PORT', 6379 );     


define('WP_CACHE', true);

/**#@-*/

/**
 * WordPress Database Table prefix.
 *
 * You can have multiple installations in one database if you give each
 * a unique prefix. Only numbers, letters, and underscores please!
 */
$table_prefix = 'wp_';

/**
 * For developers: WordPress debugging mode.
 *
 * Change this to true to enable the display of notices during development.
 * It is strongly recommended that plugin and theme developers use WP_DEBUG
 * in their development environments.
 *
 * For information on other constants that can be used for debugging,
 * visit the documentation.
 *
 * @link https://wordpress.org/support/article/debugging-in-wordpress/
 */
define( 'WP_DEBUG', true );

/* That's all, stop editing! Happy publishing. */

/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
	define( 'ABSPATH', __DIR__ . '/' );
}

/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';
?>

Dockerfile

FROM debian:buster


RUN apt update -y 

RUN apt install php-fpm php-mysql -y

RUN apt install curl -y


COPY ./tools/script.sh /
COPY ./tools/wp-config.php /


CMD [ "/script.sh" ]
هذا هو ملف Dockerfile الذي يحدد صورة Docker الأساسية debian:buster. تم تصميم الصورة لتشغيل موقع WordPress وتفعل الآتي:
  • تحديث قائمة الحزم باستخدام apt update.
  • تثبيت حزم PHP-FPM و PHP MySQL باستخدام apt install.
  • تثبيت cURL باستخدام apt install.
  • نسخ ملف shell يسمى script.sh إلى الدليل الرئيسي.
  • نسخ ملف wp-config.php المخصص إلى الدليل الرئيسي.
  • تعيين الأمر الافتراضي لحاوية Docker لتشغيل سكريبت script.sh. بشكل عام ، يقوم هذا الملف بإعداد بيئة دنية لتشغيل موقع WordPress ، بما في ذلك الحزم PHP اللازمة وملف wp-config.php الذي يحتوي على إعدادات التكوين للموقع. يتحمل السكريبت script.sh المسؤولية الرئيسية على الأرجح لبدء خادم PHP-FPM وتهيئة موقع WordPress.

WordPress Structure files

.
├── Dockerfile
└── tools
    ├── wp-config.php
    └── script.sh
يحدد ملف Dockerfile صورة القاعدة كـ debian:buster، يثبت الحزم اللازمة، ينسخ ملفات script.sh و wp-config.php، ويعين الأمر الافتراضي لتشغيل script.sh.
يقوم ملف script.sh بإعداد ملفات الويب وقاعدة البيانات لـ WordPress، ويثبت الحزم والملحقات اللازمة، ويبدأ خادم PHP-FPM.
يحتوي ملف wp-config.php على إعدادات التكوين للموقع WordPress، بما في ذلك إعدادات قاعدة البيانات ومفاتيح / ملحات الأمان.

Nginx

Nginx هو خادم ويب شائع يستخدم لخدمة مواقع الويب وتطبيقات الويب الأخرى. يتميز Nginx بأدائه السريع والاستقرار العالي، كما يتميز بقدرته على التعامل مع أحمال العمل العالية بكفاءة. يمكن استخدام Nginx كـ reverse proxy أو load balancer، مما يساعد في تحسين أداء التطبيقات وزيادة الاستقرارية. يتميز Nginx بتوافقه مع تقنيات الويب الحديثة مثل HTTP/2 و WebSocket، مما يجعله خيارًا جيدًا لتطبيقات الويب الحديثة.

Conf

هذا هو ملف تكوين خادم Nginx لموقع ويب يتم تقديمه عبر HTTPS (المنفذ 443). يشمل التكوين:
  • اسم الخادم للموقع ، الذي يمكن الوصول إليه بأو بدون العنوان الفرعي www.
  • ملفات شهادة SSL ومفتاح SSL ، التي يتم استخدامها لتشفير حركة المرور بين الخادم والعميل.
  • مواصفة لإصدار بروتوكول TLS الذي يستخدم (TLSv1.3).
  • ملف فهرس (index.php) ودليل جذر (/var/www/html) لخدمة محتوى الموقع.
  • كتلة الموقع التي تستخدم التعبيرات العادية لمطابقة طلبات الملفات PHP (التي تنتهي بـ .php) ، وتمررها إلى معالج FastCGI للمعالجة.
  • توجيه try_files الذي يحاول خدمة ملف PHP المطلوب ، ويتراجع إلى صفحة خطأ 404 إذا لم يتم العثور عليه.
  • توجيه fastcgi_pass الذي يحدد عنوان IP ورقم المنفذ لخادم FastCGI الذي سيتعامل مع معالجة PHP (في هذه الحالة ، wordpress: 9000 ، مما يشير إلى أن الخادم يعمل في حاوية Docker بـ اسم المضيف wordpress ورقم المنفذ 9000).
  • توجيه include الذي يتضمن ملف fastcgi_params ، الذي يحتوي على مجموعة من المعلمات FastCGI.
  • توجيه fastcgi_param الذي يحدد معلمة SCRIPT_FILENAME إلى المسار الكامل للنص البرمجي PHP المطلوب ، والذي يتم استخدامه بواسطة عملية FastCGI لتحديد موقع النص البرمجي وتنفيذه.
بشكل عام ، يتم تصميم ملف تكوين هذا للتعامل مع طلبات الملفات البرمجية PHP وتمريرها إلى عملية FastCGI للتنفيذ ، في حين يتم خدمة الملفات الأخرى مباشرةً من دليل الجذر للموقع.
server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name www.sahafid.1337.ma sahafid.1337.ma;

    ssl_certificate here_certs;
    ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;

    ssl_protocols TLSv1.3;

    index index.php;
    root /var/www/html;

    location ~ [^/]\.php(/|$) { 
            try_files $uri =404;
            fastcgi_pass wordpress:9000;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
}

Script File

يتم استخدام هذا البرنامج النصي لإنشاء شهادة SSL ذاتية التوقيع وتكوين Nginx لاستخدام HTTPS على المنفذ 443.
تنشئ الأمر الأول شهادة SSL باستخدام OpenSSL. يقوم بإنشاء شهادة صالحة لمدة 365 يومًا ، ويستخدم RSA بمفتاح 2048 بت ، ويحفظ المفتاح في /etc/ssl/private/nginx-selfsigned.key والشهادة في الملف المحدد بواسطة المتغير $CERTS_.
يقوم الأمر الثاني بإعداد تكوين كتلة خادم Nginx لـ HTTPS. يستمع على المنفذ 443 ، ويحدد الشهادة والمفتاح SSL المستخدمين ، ويعيد ضبط بروتوكول SSL إلى TLSv1.3. كما يعيد ضبط الدليل الجذر إلى /var/www/html حيث يتم تقديم ملفات ووردبريس ، ويكون PHP-FPM مكونًا لمعالجة ملفات PHP.
يقوم الأمر الأخير بتشغيل خادم Nginx ويحافظ على تشغيله في الخلفية.
cutable File  35 lines (21 sloc)  805 Bytes

#!/bin/bash




openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out $CERTS_ -subj "/C=MO/L=KH/O=1337/OU=student/CN=sahafid.42.ma"


echo "
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    #server_name www.$DOMAIN_NAME $DOMAIN_NAME;
    ssl_certificate $CERTS_;
    ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;" > /etc/nginx/sites-available/default


echo '
    ssl_protocols TLSv1.3;
    index index.php;
    root /var/www/html;
    location ~ [^/]\.php(/|$) { 
            try_files $uri =404;
            fastcgi_pass wordpress:9000;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
} ' >>  /etc/nginx/sites-available/default


nginx -g "daemon off;"

Dockerfile

هذا ملف Dockerfile لإنشاء صورة Docker تعمل على نظام تشغيل Debian Buster. يتم استخدام الصورة لتشغيل موقع WordPress ويتم القيام بالآتي:
  • تحديث قائمة الحزم (apt update)
  • تثبيت خادم Nginx و OpenSSL باستخدام (apt install)
  • نسخ ملف shell يدعى "script.sh" إلى الدليل الرئيسي.
  • تعيين الأمر الافتراضي لحاوية Docker لتشغيل سكريبت "script.sh"
يستخدم ملف script.sh لإنشاء شهادة SSL ذاتية التوقيع وتكوين Nginx لاستخدام HTTPS على المنفذ 443. يقوم الأمر الأول بإنشاء شهادة صالحة لمدة 365 يومًا ويستخدم RSA بمفتاح 2048 بت، ويحفظ المفتاح في /etc/ssl/private/nginx-selfsigned.key والشهادة في الملف المحدد بواسطة المتغير $CERTS_. الأمر الثاني يقوم بتكوين كتلة خادم Nginx لـ HTTPS. يستمع على المنفذ 443 ويحدد الشهادة والمفتاح SSL المستخدمين، ويعيد ضبط بروتوكول SSL إلى TLSv1.3. كما يعيد ضبط الدليل الجذر إلى /var/www/html حيث يتم تقديم ملفات ووردبريس، ويكون PHP-FPM مكونًا لمعالجة ملفات PHP. الأمر الأخير يقوم بتشغيل خادم Nginx ويحافظ على تشغيله في الخلفية.
FROM debian:buster


RUN apt -y update && apt install -y nginx && apt install openssl -y




# COPY ./conf/default /etc/nginx/sites-available/

COPY ./tools/script.sh /


CMD [ "/script.sh" ]

Structure files

├── Dockerfile
|── tools
|   └── script.sh
└── conf
    ├── default

Bonus 🎇

Adminer

Adminer هو أداة إدارة قاعدة بيانات مفتوحة المصدر تستخدم لإدارة قواعد البيانات المختلفة بطريقة بسيطة وسهلة. يتميز بواجهة المستخدم البسيطة والسهلة الاستخدام، والتي تساعد على تسهيل عملية البحث والتحرير والإدارة في قواعد البيانات. يمكن استخدام Adminer لإدارة قواعد البيانات المختلفة بما في ذلك MySQL وPostgreSQL وSQLite وغيرها. بالإضافة إلى ذلك ، يتميز Adminer بأنه محمول ، مما يجعله خيارًا شائعًا للمطورين والمشغلين الذين يبحثون عن أداة سهلة الاستخدام لإدارة قواعد البيانات.

FTP

FTP هي اختصار لـ File Transfer Protocol وهي بروتوكول يستخدم لنقل الملفات بين أجهزة الكمبيوتر عبر الإنترنت. يمكن استخدام FTP لتحميل وتنزيل الملفات إلى ومن خوادم الويب وجهاز الكمبيوتر الشخصي. كما يمكن استخدام FTP لنقل الملفات بين المواقع على الإنترنت. يتم استخدام FTP بشكل شائع في تحميل وتنزيل ملفات الموقع والملفات الكبيرة عبر الإنترنت.

Redis Cache

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