قم بتبسيط نشر موقع WordPress الخاص بك باستخدام دليلنا السهل الإتباع. استخدم Docker Compose و Nginx و Apache و SSL لعملية التثبيت السلسة.
سنقوم أيضًا بإنشاء أوعية بحيث يتم الحفاظ على التغييرات أو التحديثات عند إعادة التشغيل الخاصة بالوعاء.
تم اختبار هذا الإعداد على السحابة الخاصة بـ Google مع مثيل يعمل بنظام التشغيل Ubuntu 22.04. يمكنك أيضًا إجراء هذا الإعداد في أي خدمات سحابية مثل AWS أو Azure أو DigitalOcean أو أي خوادم مخصصة أو VPS.
المتطلبات الأساسية
يرجى التأكد من إكمال جميع الخطوات المذكورة أعلاه.
- تحويل المجال إلى عنوان IP الخاص بخادمك.
- تثبيت وتهيئة Docker.
- تثبيت وتهيئة Docker Compose.
بمجرد الانتهاء من جميع المتطلبات الأساسية ، يمكنك المضي قدمًا في إعداد وتكوين WordPress.
إنشاء دليل المشروع
قم بالتصفح إلى خادمك وابدأ بإنشاء دليل مشروع جديد باسم wp-project
. يمكنك أيضًا تسميته بأي شيء تحتاجه.
mkdir wp-project
إنشاء ملف Docker Compose YML
الآن ، انتقل داخل دليل المشروع وأنشئ ملف docker-compose.yml جديد بالتكوين التالي.
cd wp-project
أنشئ ملف docker-compose.yml
جديد.
nano docker-compose.yml
انسخ المحتويات الكاملة أدناه والصقها في الملف.
تكوين Docker Compose
تأكد من استبدال المتغيرات البيئة المذكورة أدناه.
docker-compose.ymlversion: "3.9"
services:
wordpress:
container_name: wordpress
image: wordpress:php8.2-apache
restart: always
stdin_open: true
tty: true
environment:
WORDPRESS_DB_HOST: mariadb
WORDPRESS_DB_USER: db_user
WORDPRESS_DB_PASSWORD: db_user_pass
WORDPRESS_DB_NAME: db_name
volumes:
- wordpress_data:/var/www/html
mariadb:
container_name: mariadb
image: mariadb
restart: always
environment:
MYSQL_DATABASE: db_name
MYSQL_USER: db_user
MYSQL_PASSWORD: db_user_pass
MYSQL_RANDOM_ROOT_PASSWORD: 'root_pass'
volumes:
- db_data:/var/lib/mysql
nginx:
container_name: nginx
image: nginx:latest
restart: unless-stopped
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf:/etc/nginx/conf.d
- ./certbot/conf:/etc/nginx/ssl
- ./certbot/data:/var/www/html
certbot:
container_name: certbot
image: certbot/certbot:latest
command: certonly --webroot --webroot-path=/var/www/html --email [email protected] --agree-tos --no-eff-email -d domain.com -d www.domain.com
volumes:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/logs:/var/log/letsencrypt
- ./certbot/data:/var/www/html
volumes:
db_data:
wordpress_data:
اضغط على CTRL-X
متبوعًا بـ Y
و ENTER
لحفظ الملف والخروج منه.
تكوين Docker Compose: شرح
فيما يلي تفاصيل التكوين:
- الإصدار: اكتب إصدار ملف لتكوين متوافق مع محرك Docker. يمكنك التحقق من التوافق هنا.
- الخدمات: هناك، لدينا أربع خدمات تحمل الأسماء
WordPress
،MariaDB
،nginx
، وcertbot
. - الصورة: نستخدم أحدث صور WordPress مع PHP 8.2، Apache، Mariadb، Nginx، و Certbot المتاحة في Docker hub.
- أحجام:
wordpress_data
: لقد قمنا بتكوين هذا الدليل ليتم مزامنته مع الدليل الذي نرغب في استخدامه كجذر الويب داخل الوعاء.conf
: هنا، سنضع ملف تكوين Nginx ليتم مزامنته مع مجلد conf.d الافتراضي داخل الوعاء.cedtbot/conf
: هذا هو المكان الذي سنتلقى فيه شهادة الـ SSL، وسيتم مزامنة هذا مع المجلد الذي نرغب فيه داخل الوعاء.ports
: قم بتكوين الوعاء للاستماع على الموجودة في القوالب.command
: الأمر المستخدم لتلقي شهادة الـ SSL.
- البيئة: هنا نسرد جميع متغيرات البيئة المتاحة للصورة الـ WordPress.
WORDPRESS_DB_HOST
: هنا، نستخدم اسم الخدمة لحاوية MariaDB.WORDPRESS_DB_USER
: هو نفسه الذي قمنا بتكوينه في خدمة mariadb.WORDPRESS_DB_PASSWORD
: هو نفسه الذي قمنا بتكوينه في خدمة mariadb.WORDPRESS_DB_NAME
: هو نفسه الذي قمنا بتكوينه في خدمة mariadb.
قم بتكوين Nginx
وفقًا لتكوين docker-compose.yml، نحتاج لإنشاء ملف default.conf
داخل الدليل nginx/conf
.
قم بإنشاء الدليل بجانب ملف docker-compose.yml
الخاص بك لتخزين ملف التكوين.
mkdir -p nginx/conf
أنشئ ملفًا يسمى default.conf
.
nano nginx/conf/default.conf
ضع التكوينات التالية؛ هنا، نستخدم تكوين مراسل عكسي لحاوية wordpress التي تعمل بواسطة Apache.
nginx/conf/default.conf server {
listen [::]:80;
listen 80;
server_name domain.com www.domain.com;
root /var/www/html;
index index.php;
location ~ /.well-known/acme-challenge {
allow all;
root /var/www/html;
}
location / {
try_files $uri @apache;
}
location ~ ^/.user.ini {
deny all;
}
location ~* .(svg|svgz)$ {
types {}
default_type image/svg+xml;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location @apache {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~[^?]*/$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~ .php$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
}
اضغط على CTRL-X
متبوعًا بـ Y
و ENTER
لحفظ الملف والخروج.
الآن لديك تكوين docker-compose الخاص بك وتكوين Nginx.
نشر WordPress باستخدام Docker Compose
ابدأ الأوا Containers باستخدام الأمر التالي؛ ستتلقى شهادات SSL بمجرد بدء الأوا Containers.
docker-compose up -d
بمجرد بدء جميع الأوا Containers، سترى تكوين اثنين من الدليلين إضافيين، certbot
و WordPress
، التي تم إنشاؤها بجانب ملف docker-compose.yml
الخاص بك.
الدليل wordpress
يحمل كل شفرات مصدر موقع WordPress الخاص بك.
الدليل certbot
يحمل جميع الملفات المتعلقة بشهادات SSL الخاصة بك.
لعرض الأوا Containers، يمكنك تنفيذ الأمر التالي.
docker-compose ps
تكوين SSL Let’s Encrypt باستخدام Nginx
بما أنك تلقيت شهادة SSL Let’s Encrypt، يمكنك تكوين HTTPS وإعداد إعادة التوجيه إلى HTTPS.
قم بتعديل default.conf
وإجراء التغييرات التالية.
nano nginx/conf/default.conf
nginx/conf/default.confserver {
listen [::]:80;
listen 80;
server_name domain.com www.domain;
return 301 https://www.domain.com$request_uri;
}
server {
listen [::]:443 ssl http2;
listen 443 ssl http2;
server_name domain.com;
ssl_certificate /etc/nginx/ssl/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/domain.com/privkey.pem;
return 301 https://www.domain.com$request_uri;
}
server {
listen [::]:443 ssl http2;
listen 443 ssl http2;
server_name www.domain.com;
ssl_certificate /etc/nginx/ssl/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/domain.com/privkey.pem;
root /var/www/html;
index index.php;
location ~ /.well-known/acme-challenge {
allow all;
root /var/www/html;
}
location / {
try_files $uri @apache;
}
location ~ ^/.user.ini {
deny all;
}
location ~* .(svg|svgz)$ {
types {}
default_type image/svg+xml;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location @apache {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~[^?]*/$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~ .php$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
}
اضغط على CTRL-X
ثم Y
و ENTER
لحفظ الملف والخروج منه.
الآن، يمكنك إعادة تشغيل خدمة Nginx لتحميل التكوينات الجديدة.
docker-compose restart nginx
الآن، يمكنك التحقق من اسم المجال من متصفح الويب الخاص بك. ستحصل على إعادة التوجيه إلى HTTPS، وسترى صفحة تثبيت WordPress لإكمال التثبيت.
التصحيح
فيما يلي بعض النصائح لـ SSH إلى الأوا Containers؛ انظر إلى سجلات الأخطاء.
SSH إلى حاوية Docker
لـ SSH إلى حاوية wordpress
، يمكنك استخدام الأمر التالي.
docker-compose exec wordpress /bin/bash
للدخول إلى حاوية nginx
عبر SSH، يمكنك استخدام الأمر التالي.
docker-compose exec nginx /bin/bash
تحقق من سجلات الحاويات
يمكنك استخدام الأمر التالي للتحقق من سجلات الحاويات باستخدام docker-compose
docker-compose logs -f
إعادة تشغيل الحاويات
يمكنك إعادة تشغيل الحاويات باستخدام أمر restart
بسهولة.
docker-compose restart container_name
استبدل container_name
باسم حاويتك (wordpress, nginx, certbot)
إيقاف تشغيل جميع حاويات Docker
يمكنك إيقاف تشغيل جميع حاويات Docker باستخدام الأمر التالي.
docker-compose down
إزالة جميع الحاويات والأحجام
يمكنك استخدام docker-compose لإزالة جميع الحاويات وأحجامها باستخدام الأمر التالي.
docker compose rm -fv
إزالة جميع حاويات Docker
إزالة جميع الحاويات باستخدام الأمر التالي.
docker rm -f $(docker ps -a -q)
حذف جميع الأحجام
يمكنك أيضًا حذف جميع الأحجام باستخدام الأمر التالي.
docker volume rm $(docker volume ls -q)
بدء تشغيل جميع الحاويات
بأمر Docker compose واحد، يمكنك بدء تشغيل جميع الحاويات.
docker-compose up -d
الخاتمة
الآن لقد تعلمت كيفية تثبيت وإعداد WordPress مع Nginx، Apache، PHP 8.2، MariaDB، وLet’s Encrypt باستخدام Docker وDocker Compose على Ubuntu 22.04.
شكرًا لوقتك.
Source:
https://dzone.com/articles/wordpress-deployment-docker-nginx-apache-ssl