مقدمه
بهینهسازی استفاده از منابع سیستمی در محیط توسعه داکر برای وردپرس
در دنیای توسعه وب، انتخاب ابزار و فناوریهای مناسب که همزمان با کارایی بالا، مصرف منابع را به حداقل برسانند، از اهمیت ویژهای برخوردار است. این امر بهویژه برای توسعهدهندگانی که با سیستمهای دارای منابع محدودتر کار میکنند، بیش از پیش مورد توجه قرار گرفته است. با توجه به این نیاز، استفاده از محیط توسعه داکر برای وردپرس، راهکاری نوین و بهینه به شمار میرود. داکر با ارائه محیطهای توسعهای سبک و قابل انعطاف، امکان مدیریت بهتر منابع سیستمی را فراهم میآورد و به توسعهدهندگان اجازه میدهد تا با تمرکز بیشتری بر روی خلاقیت و نوآوری در توسعه پروژههای خود، پیش بروند.
قبل از شروع، لازم است به جهت آشنایی و شناختن دلیل انتخاب محیط توسعه داکر برای وردپرس، مقاله قبلی با عنوان راهنمای انتخاب بهترین محیط توسعه سبک وردپرس برای توسعهدهندگان را بخوانید. در این مقاله محیطهای توسعه متفاوتی را بررسی کردهایم و به این سوال پاسخ می دهیم که چرا داکر در مقابل سایر محیطهای توسعه میتواند پاسخ بهتری به نیازهای شما بدهد.
چرا داکر برای وردپرس؟
استفاده از Docker برای وردپرس میتواند به چند دلیل مفید باشد:
- محیطهای ایزوله Docker: شما امکان میدهد وردپرس را در محیطهای کانتینریزه اجرا کنید. این امر به ایجاد محیطهای جداگانه برای توسعه، آزمایش و تولید کمک میکند، به طوری که تغییرات در یک محیط بر دیگری تأثیر نمیگذارد. اگر شما هم از جمله افرادی هستید که از نصب هزاران بسته پیشنیاز برای راه اندازی یک نرم افزار به ستوه میآیید، محیط ایزوله داکر برای وردپرس پاسخ مستقیم به نیاز شما است.
- سهولت در تنظیم و استقرار: با استفاده از Docker، شما میتوانید با چند دستور ساده وردپرس را تنظیم و اجرا کنید. این امر به ویژه برای توسعهدهندگانی که میخواهند سریعاً یک محیط توسعه راهاندازی کنند مفید است.
- قابلیت حمل و نقل: کانتینرهای Docker را میتوان به راحتی بین محیطهای مختلف منتقل کرد، مثلاً از محیط توسعه به تست یا تولید. این امر به تسهیل فرآیند توسعه و استقرار کمک میکند.
- تطابق با زیرساختهای مدرن Docker: با اکوسیستمهای مدیریت کانتینر مانند Kubernetes و Docker Swarm سازگار است، که این امکان را به شما میدهد تا اپلیکیشنهای وردپرس خود را در مقیاس بزرگ مدیریت کنید.
- مدیریت وابستگیهای Docker: امکان مدیریت آسان تر وابستگیهای وردپرس مانند PHP، MySQL و دیگر سرویسها را میدهد. شما میتوانید نسخههای خاصی از این وابستگیها را در کانتینرهای خود قرار دهید تا اطمینان حاصل کنید که محیط شما با محیط تولید یکسان است. اگر شما هم از سیستم عاملهای متفاوت استفاده میکنید دیگر نگران راهاندازی پروژه خود نباشید. سیستم تحت داکر شما در هر سیستم عاملی کار میکند.
- بهینهسازی منابع Docker: به شما امکان میدهد تا منابع سختافزاری را به طور مؤثرتری استفاده کنید، زیرا کانتینرها تنها منابع مورد نیاز برای اجرای فرآیندها را مصرف میکنند، در مقایسه با ماشینهای مجازی که منابع بیشتری را اشغال میکنند. به عنوان مثال یک محیط و کانتینر داکر برای وردپرس 50 تا 100 مگابایت رم نیاز دارد.
با توجه به این مزایا، Docker میتواند انتخاب خوبی برای توسعهدهندگان وردپرس باشد که به دنبال بهبود فرآیندهای توسعه و استقرار خود هستند.
پیادهسازی محیط توسعه داکر برای وردپرس
نصب داکر
در ابتدای مسیر پیادهسازی محیط توسعه داکر برای وردپرس لازم است تا نرمافزار داکر را مطابق سیستم عامل خود دانلود و نصب کنید. برای انجام این کار پکیج مناسب را از سایت اصلی داکر دانلود کنید. دسترسی به سایت داکر از طریق آی پی ایران به دلیل تحریمها مشکل میباشد، به همین جهت لازم است از شیوههای جانبی گذر از تحریم استفاده کنید.
در هنگام نصب داکر در ویندوز اگر WSL2 را از قبل فعال نکرده باشید، شما یک پیغام مبنی بر راهاندازی WSL2 دریافت خواهید کرد. حتما تمامی پیشنیازهای مربوط برای داکر را نصب کنید.
کانفیگ داکر برای وردپرس
در مقاله قبل فایل بیسیک و پایه راه اندازی داکر برای وردپرس را در اختیار شما قرار داده شده است. هر چند که این فایل محیط توسعه داکر برای وردپرس را راه اندازی می کند باید گفت که این فایل هنوز آماده توسعه نیست و با هر بار راه اندازی متوجه خواهید شد که بسیاری از اطلاعات در حال توسعه را از دست خواهید داد.
پایهایترین کانفیگ حالت نصب داکر برای وردپرس در فایل docker-compose.yml به شکل زیر است:
version: '3.1'
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- wordpress:/var/www/html
db:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
volumes:
wordpress:
db:
به عنوان مثال معمولا از دو پلاگین Debug Bar و Query Monitor برای دیباگ کردن وردپرس استفاده میشود. اما با هر بار راه اندازی کانتینر داکر برای وردپرس این دو پلاگین را باید از ابتدا نصب کرد. برای اینکه این اطلاعات را از دست ندهید لازم است تا به اصطلاح قسمتهایی از کانتینر را که نیاز دارید persistent یا پایدار کنید.
ساختار پروژه برای پوشههای ثابت
با توجه به تغییراتی که در فایل کانفیگ خواهیم داد نیاز هست تا سختار پروژه نیز اصلاح شود. این ساختار در هر مرحله کاملتر خواهد شد. شما میتوانید با کلیک بر روی گزینه شامل فایلهای تمپلیت در ابتدای مقاله مستقیما آخرین نسخه ساختار و فایلها را دریافت کنید.
ساختار اولیه پوشه پروژه به منظور پایدار کردن اطلاعات مربوط به پروژه مطابق زیر خواهد بود:
project_folder/
├── wordpress/
│ ├── plugins/
│ ├── themes/
│ ├── uploads/
│ └── wp-config.php
└── docker-compose.yml
در این مرحله باید در فایل docker-compose.yml در قسمت volumes اطلاعات زیر را وارد کنیم تا پوشهها و اطلاعات مورد نیاز پایدار شود:
volumes:
# ------------------------- the code before
- ./wordpress/plugins:/var/www/html/wp-content/plugins # This adds plugins to host and make them permanent.
- ./wordpress/themes:/var/www/html/wp-content/themes # This adds themes to host and make it permanent.
- ./wordpress/wp-config.php:/var/www/html/wp-config.php # This copies the wp-config.php file to the host.
# - ./uploads:/var/www/html/wp-content/uploads # This adds upload folder to the host. Remove the pawn sign from the begining.
# ------------------------- The code after
اگر نیاز دارید به پوشه آپلود نیز دسترسی داشته باشید می توانید کاراکتر “#” را از ابتدا این خط از کد پاک کنید:
- ./uploads:/var/www/html/wp-content/uploads
اضافه کردن پوشههای پوسته و پلاگین در حال توسعه
برای اضافه کردن پوشههای پوسته و پلاگین در محیط کانتیتر داکر برای وردپرس ساختار پروژه به شکل زیر تغییر میکند:
project_folder/
├── myplugin/
│ └── myplugin.php
├── mytheme/
│ ├── index.php
│ └── style.css
├── wordpress/
│ ├── plugins/
│ ├── themes/
│ └── uploads/
├── wp-config.php
└── docker-compose.yml
در بخش volumes در فایل docker-compose.yml کدهای زیر را به منظور برقراری ارتباط بین کانتینر و هاست وارد کنید:
volumes:
# ------------------------- the code before
# Adding plugins and themes for development
- ./mytheme:/var/www/html/wp-content/themes/mytheme # This adds theme for development.
- ./myplugin:/var/www/html/wp-content/plugins/myplugin # This adds plugin for development.
# ------------------------- The code after
کدهای اولیه مربوط به myplugin.php را از زیر میتوانید کپی کنید. این اطلاعات هدر پایه و بیسیک و ساده شناسایی پلاگین توسط محیط توسعه مبتنی بر داکر برای وردپرس هستند.
<?php
/**
* Plugin Name: My Simple Plugin
* Plugin URI: http://example.com/my-simple-plugin
* Description: This is a very simple WordPress plugin.
* Version: 1.0
* Author: Your Name
* Author URI: http://example.com
*/
می توانید index.php را خالی بگذارید و محتویات زیر را در فایل style.css کپی کنید. این محتویات هدر شناسایی پوسته توسط وردپرس هست.
/*
Theme Name: My Custom Theme
Theme URI: http://example.com/my-custom-theme
Author: Your Name
Author URI: http://example.com
Description: A brief description of the theme.
Version: 1.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: my-custom-theme
Tags: responsive, clean, minimal
*/
حتما قبل از اجرای کانتینر برای اولین بار نام پلاگین و پوسته خود را اصلاح کنید. بر اساس تجربه بدست آمده لنظر میرسد که اگر بعد از اجرای کانتینر نام پوشه و پلاگین یا پوسته را تغییر دهید با توجه به اینکه routing توسط داکر انجام شده است تغییر نام در وردپرس صورت نمی گیرد. و باید پلاگین را از داخل سایت وردپرسی حذف کنید.
عیبیابی داکر برای وردپرس
در پروسه برنامهنویسی همیشه خطاهایی وجود دارد. به همین جهت لازم است تا اقدامات لازم جهت دیباگ مشکل موجود انجام شود. در حالت عادی اولین راهکار دیباگ وردپرس تنظیم مقدار WP_DEBUG از طریق wp-config.php میباشد. با توجه به این موضوع که برای این پروژه از کانتینر اصلی و رسمی برای پیاده سازی MySQL و داکر برای وردپرس استفاده میشود، میبایست از دستورالعمل خود کانتینر به جهت تنظیم کردن گزینه WP_DEBUG استفاده شود. به جهت فعال کردن این گزینه در بخش environment قطعه کد زیر را وارد کنید:
environment:
# The code before
WORDPRESS_DEBUG: 1 # This should turn on the WP_DEBUG.
# The code after
هر چند که با فعال کردن این گزینه متوجه خواهید شد که همچنان نمایش مشکلات پیش آمده در وردپرس انجام نمیشود. با کمی تحقیق در stack overflow متوجه میشوید که برا رفع مشکل مربوط به نمایش ارورها نیازمند پیادهسازی سیستم لاگ هستید. بدین جهت ساختار پروژه به شکل زیر تغییر می کند:
project_folder/
├── logs/
│ └── debug.log
├── myplugin/
│ └── myplugin.php
├── mytheme/
│ ├── index.php
│ └── style.css
├── wordpress/
│ ├── plugins/
│ ├── themes/
│ ├── uploads/
│ └── wp-config.php
├── docker-compose.yml
└── error-logging.ini
محتویات فایل error-logging.ini به محیط کانتینر داکر برای وردپرس اعلام میکند که چگونه ارورهای مربوطه را در فایل debug.log در داخل پوشه logs ذخیره کند.
error_reporting = E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_RECOVERABLE_ERROR
display_errors = Off
display_startup_errors = Off
log_errors = On
error_log = /var/www/html/wp-content/logs/debug.log
log_errors_max_len = 1024
ignore_repeated_errors = On
ignore_repeated_source = Off
html_errors = Off
حال باید به بخش volumes قطعه کد زیر را اضافه کنید:
volumes:
# ------------------------- the code before
- ./logs:/var/www/html/wp-content/logs # This maps a directory from your project into the container so that logs will persist through restarts.
- ./error-logging.ini:/usr/local/etc/php/conf.d/error-logging.ini # This copy logs to the host check "./logs/debug.log" for the info.
# ------------------------- The code after
اکنون هر زمان که به مشکل خوردید میتوانید فایل debug.log را بررسی کنید.
نصب phpMyAdmin
اگر قصد توسعه پلاگین دارید قطعا در ادامه کار نیازمند دسترسی دیتابیس خواهید داشت. و به همین جهت دسترسی به phpMyAdmin ضروری خواهد بود. برای نصب از نسخه رسمی phpMyAdmin در داکر استفاده خواهید کرد. برای این کار قطعه کد زیر را به به فایل docker-compose.yml اضافه کنید. می توانید پورت را مطابق نظر خودتان تغییر دهید.
services:
# ------------------------- the code before
phpmyadmin:
image: phpmyadmin
restart: always
ports:
- 4000:80
environment:
- PMA_ARBITRARY=1
# ------------------------- The code after
اگر از قطعه کد موجود در این مقاله استفاده کردید برای دسترسی به phpMyAdmin کافیست به آدرس زیر بروید:
127.0.0.1:4000
در صورتی که پورت را تغییر دادهاید از پورت جدید به جای 4000 استفاده کنید.
برای ورود و دسترسی به پایگاه داده میتوانید از مشخصاتی که قبلا برای وردپرس و MySQL در بخش environment تعیین کردهاید استفاده کنید:
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
افزایش مموری، حجم آپلود فایلها و سایز پستها در داکر برای وردپرس
قطعا شما هم هنگام کار با وردپرس متوجه محدودیت حجم در آپلود و دانلود شدهاید. به منظور تعیین حجم آپلود برای وردپرس یک فایل تحت عنوان uploads.ini در پوشه اضافه می کنیم ساختار پوشه پروژه به شکل زیر خواهد شد:
project_folder/
├── logs/
│ └── debug.log
├── myplugin/
│ └── myplugin.php
├── mytheme/
│ ├── index.php
│ └── style.css
├── wordpress/
│ ├── plugins/
│ ├── themes/
│ ├── uploads/
│ └── wp-config.php
├── docker-compose.yml
├── error-logging.ini
└── uploads.ini
محتویات فایل uploads.ini را میتوانید از قطعه کد زیر کپی کنید:
file_uploads = On
memory_limit = 2000M
upload_max_filesize = 2000M
post_max_size = 2000M
max_execution_time = 600
میتوانید هر کدام از موارد موجود در کد را مطابق نیاز خود تنظیم کنید.
تمپلیت نهایی
با توجه به موارد گفته شده در بخش قبل ساختار نهایی پروژه شما به شکل زیر درخواهد آمد:
project_folder/
├── logs/
│ └── debug.log
├── myplugin/
│ └── myplugin.php
├── mytheme/
│ ├── index.php
│ └── style.css
├── wordpress/
│ ├── plugins/
│ ├── themes/
│ ├── uploads/
│ └── wp-config.php
├── docker-compose.yml
├── error-logging.ini
└── uploads.ini
همچنین فایل docker-compose.yml به شکل زیر خواهد بود:
version: '3.1'
services:
wordpress:
image: wordpress # change your wordpress image here.
restart: always
ports:
- "3000:80" # You may change the port to load website. Default address is: 127.0.0..1:3000
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser # This should be the same as "MYSQL_USER".
WORDPRESS_DB_PASSWORD: examplepass # This should be the same as "MYSQL_PASSWORD".
WORDPRESS_DB_NAME: exampledb # This should be the same as "MYSQL_DATABASE".
WORDPRESS_DEBUG: 1 # This should turn on the WP_DEBUG.
volumes:
- ./wordpress/plugins:/var/www/html/wp-content/plugins # This adds plugins to host and make them permanent.
- ./wordpress/themes:/var/www/html/wp-content/themes # This adds themes to host and make it permanent.
- ./wordpress/wp-config.php:/var/www/html/wp-config.php # This copies the wp-config.php file to the host.
# - ./uploads:/var/www/html/wp-content/uploads # This adds upload folder to the host. Remove the pawn sign from the begining.
- ./logs:/var/www/html/wp-content/logs # This maps a directory from your project into the container so that logs will persist through restarts.
- ./error-logging.ini:/usr/local/etc/php/conf.d/error-logging.ini # This copy logs to the host check "./logs/debug.log" for the info.
- ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini # This changes the max upload size.
# Adding plugins and themes for development
- ./mytheme:/var/www/html/wp-content/themes/mytheme # This adds theme for development.
- ./myplugin:/var/www/html/wp-content/plugins/myplugin # This adds plugin for development.
db:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
phpmyadmin:
image: phpmyadmin
restart: always
ports:
- "4000:80" # You may change the port to access phpmyadmin. Default address is: 127.0.0..1:4000
environment:
PMA_HOST: db
volumes:
db:
می توانید تمپلیت نهایی فایل را از این بخش دانلود کنید و بر اساس نیاز خودتان آن را تغییر دهید:
حال کافیست به منظور اعمال تغییرات در محیط ترمینال یا CMD از دستور زیر استفاده کنید:
docker compose up -d
در هر زمان که بخشی از کد را تغییر دادید میبایست به منظور اعمال از دستورات زیر استفاده کنید:
docker compose down
docker compose up -d
دسترسی به وبسایت
برای دسترسی و نصب سایت وردپرس کافیست به آدرس 127.0.0.1:3000 مراجعه کنید. اگر پورت را در بخش وردپرس در فایل کانفیگ داکر تغییر داده اید، به جای 3000 از پورت مورد نظر خودتان استفاده کنید.
127.0.0.1:3000
برای دسترسی به phpMyAdmin از آدرس 127.0.0.1:4000 استفاده کنید و یا همانطور که قبلا گفته شد، اگر پورت را تغییر دادهاید، به جای 4000 از پورت مشخص شده خود استفاده کنید.
127.0.0.1:4000
سؤالات متداول
داکر یک پلتفرم کانتینریزاسیون است که به توسعهدهندگان امکان میدهد برنامهها را در محیطهای ایزوله به نام کانتینرها اجرا کنند. استفاده از داکر برای وردپرس به شما کمک میکند تا محیطهای توسعه، آزمایش و تولید را به آسانی ایجاد، تکرار و مدیریت کنید، بدون آنکه نیاز به نصب وابستگیهای متعدد و تنظیمات پیچیده داشته باشید.
برای نصب داکر، به وبسایت رسمی داکر مراجعه کنید و نسخهای را که با سیستمعامل شما سازگار است دانلود کنید. پس از دانلود، داکر را نصب و اجرا کنید. برای ویندوز، ممکن است نیاز به فعالسازی WSL2 (سیستم لینوکس ویندوزی) باشد.
برای راهاندازی وردپرس در داکر، یک فایل `docker-compose.yml` ایجاد کنید که شامل تعاریف سرویسهایی مانند وردپرس، MySQL، و اختیاراً phpMyAdmin باشد. سپس با استفاده از دستور `docker-compose up`، محیط وردپرس خود را بالا ببرید.
برای حفظ اطلاعات، از قابلیت Volumes در داکر استفاده کنید. در فایل `docker-compose.yml`، حجمهایی را برای پایگاه داده MySQL و فولدرهای وردپرس (مانند `wp-content`) تعریف کنید تا اطلاعات شما بین راهاندازیها حفظ شود.
برای عیبیابی، میتوانید از ابزارهای داخلی وردپرس مانند WP_DEBUG استفاده کنید و یا با استفاده از دستور `docker-compose logs` خروجی لاگهای کانتینرهای خود را مشاهده کنید. همچنین، میتوانید یک سیستم لاگ خارجی را در محیط هاست خود تنظیم کنید تا خطاها را ثبت کند.
بله، داکر محیطی ایدهآل برای توسعه پلاگینها و تمها فراهم میکند. با استفاده از حجمها، میتوانید کدهای پلاگین یا تم خود را به طور مستقیم به کانتینر وردپرس متصل کنید تا تغییرات به صورت زنده اعمال شوند.
جمعبندی
استفاده از محیط توسعه داکر برای وردپرس، گزینهای نوآورانه و مؤثر در بهینهسازی منابع و افزایش کارایی توسعه وب است. این روش، با ارائه محیطهای ایزوله، سهولت در تنظیم و استقرار، قابلیت حمل بالا و تطابق با زیرساختهای مدرن، امکان مدیریت بهتر پروژهها و محصولات وردپرسی را فراهم میآورد. با پیادهسازی دقیق مراحل نصب، کانفیگ و بهینهسازیهای مورد نیاز، توسعهدهندگان قادر خواهند بود از مزایای فراوان داکر در محیطهای توسعه وردپرس بهرهمند شوند.
همچنین، با رعایت نکات ذکر شده در این مقاله و استفاده از ساختارها و تنظیمات پیشنهادی، میتوان اطمینان حاصل کرد که پروژهها با حداقل مشکلات و چالشهای فنی مواجه شده و بهرهوری در فرآیند توسعه به طور قابل توجهی افزایش یابد. استفاده از ابزارهای دیباگ و عیبیابی، افزایش قابلیتهای داکر از طریق افزونهها و تنظیمات خاص، و در نهایت، اطمینان از پایداری و امنیت پروژهها، از جمله عوامل کلیدی در موفقیت استفاده از داکر برای وردپرس است.
با توجه به محتوای این مقاله، امیدواریم توسعهدهندگان وردپرس تشویق شوند تا از داکر به عنوان یک راهکار مؤثر و بهینه برای محیطهای توسعه خود استفاده نمایند، و از مزایای آن در جهت بهبود کیفیت و کارایی پروژههای خود بهرهمند شوند.