نشر WordPress: Docker، Nginx، Apache، و SSL

قم بتبسيط نشر موقع WordPress الخاص بك باستخدام دليلنا السهل الإتباع. استخدم Docker Compose و Nginx و Apache و SSL لعملية التثبيت السلسة.

سنقوم أيضًا بإنشاء أوعية بحيث يتم الحفاظ على التغييرات أو التحديثات عند إعادة التشغيل الخاصة بالوعاء.

تم اختبار هذا الإعداد على السحابة الخاصة بـ Google مع مثيل يعمل بنظام التشغيل Ubuntu 22.04. يمكنك أيضًا إجراء هذا الإعداد في أي خدمات سحابية مثل AWS أو Azure أو DigitalOcean أو أي خوادم مخصصة أو VPS.

المتطلبات الأساسية

  1. تثبيت Docker على Ubuntu 22.04
  2. تثبيت Docker Compose على Ubuntu 22.04.

يرجى التأكد من إكمال جميع الخطوات المذكورة أعلاه.

  • تحويل المجال إلى عنوان 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