سلام! من بیژن هستم و این اولین مطلب در وبسایت شخصیام است که در آن به راهاندازی وردپرس با داکر (Docker) پرداختهام. هدف از ایجاد این وب سایت ثبت مسیر یادگیری، مستندسازی تجربه پروژههایی مثل همین یادداشت فنی و در نهایت ایجاد فضایی برای آرشیو این مطالب است.
چرا عنوان سایت رو iBijan Notes انتخاب کردم؟
چون این سایت فضایی است برای:
- ثبت جزئیات فنی پروژههایی که انجام میدهم.
- اشتراکگذاری چالشهایی که در دنیای نرمافزار یا سایر موضوعاتی که با آن ها روبرو میشم.
- ایجاد یک آرشیو برای خودم که ممکنه برای بقیه کاربردی باشه.
اولین قدم: راهاندازی وردپرس با Docker
برای شروع کار و راه اندازی وب سایت، ترجیح دادم به جای روشهای معمول، از قدرت داکر docker روی VPS استفاده کنم. این کار اجازه میده تا:
- مدیریت آسان: کل سایت را در قالب کانتینرها مدیریت کنم.
- پایداری بالا: با استفاده از داکر، سرویسها در محیطی ایزوله اجرا میشوند. به همین دلیل تداخل نرمافزاری به حداقل میرسد و حتی اگر کانتینری متوقف شود، داکر میتواند طوری تنظیم شود که بلافاصله آن را دوباره راهاندازی کند.
- توسعهپذیری: به راحتی ابزارهای دیگری (مثل پایگاه دادههای مختلف) را به ساختار فعلی اضافه کنم.
خوب برای شروع باید مراحل زیر رو طی کرد:
آپگرید کردن مخازن نرم افزاری VPS و نصب پیشنیازها
sudo apt update && sudo apt upgrade -y
sudo apt install curl git apt-transport-https ca-certificates gnupg lsb-release -y
چک کردن اشغال نبودن پورت های وب
sudo netstat -tunlp | grep -E : '80|:443'
اگر بعد از زدن دستور بالا هیچ خروجی ندیدید، یعنی پورتها کاملاً آزاد هستند. اگر خروجی داشتید، نام سرویسی که پورت را اشغال کرده نشان داده میشود. زمانی که من از این دستور برای چک کردن اشغال نبودن پورت های وب استفاده کردم که مشخص شد پورت ۸۰ توسط سرویس آپاچی اشغال شده است:
user@iBijancom:~# sudo netstat -tunlp | grep -E ':80|:443'
tcp6 0 0 :::80 :::* LISTEN 801/apache2
حال در این مرحله باید چک شود که آیا آپاچی در حال سرویس دهی به برنامه یا فایل خاصی است یا خیر؟ برای این منظور باید مراحل زیر طی شود:
- بررسی محتوای در حال اجرا
ls -l /var/www/html
در نهایت بعد از اجرای دستو مشخص شد فقط یک فایل index.html پیشفرض آپاچی در حال اجراست و توسط اسکریپت یا فایل های خاصی استفاده نمیشود.
- بررسی سایتهای فعال
apache2ctl -S
این دستور میگوید چه دامین یا پورت هایی به چه فایلهایی متصل هستند.
- بررسی لاگهای دسترسی
sudo tail -f /var/log/apache2/access.log
بهترین راه برای اینکه بفهمید آیا در حال حاضر از این آپاچی استفاده میشود یا خیر، چک کردن لاگ های آن است.
دستور بالا را در ترمینال بزنید و چند لحظه صبر کنید. در نهایت بعد از طی کردن مراحل بالا مشخص شد که سرویس آپاچی را میتوانم بدون هیچ مشکلی متوقف کنم تا راه برای داکر و نصب CMS وردپرس باز شود:
sudo systemctl stop apache2
sudo systemctl disable apache2
sudo apt remove apache2 (اختیاری)
نصب Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

نصب Docker Compose
sudo apt install docker-compose-plugin -y
بعد از نصب داکر docker باید یک پوشه به نام دلخوا ساخت، مثلا iBijan و وارد آن میشویم، سپس یک فایل به نام docker-compose.yml ایجاد و محتوای زیر را در آن قرار میدهیم.
mkdir ~/iBijan && cd ~/iBijan
nano docker-compose.yml
سپس دستورات زیر را در آن کپی میکنیم:
ساخت فایل تنظیمات (docker-compose.yml)
services:
db:
image: mariadb:10.11
restart: always
volumes:
- ./db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: YourStrongRootPassword
MYSQL_DATABASE: wordpress
MYSQL_USER: wp_user
MYSQL_PASSWORD: YourWPUserPassword
wordpress:
depends_on:
- db
image: wordpress:latest
restart: always
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wp_user
WORDPRESS_DB_PASSWORD: YourWPUserPassword
WORDPRESS_DB_NAME: wordpress
volumes:
- ./wp_content:/var/www/html
در بالا رمزهای عبور دلخواه و یوزرنیم را بهجای your_password و wp_user وارد میکنیم .
در صورت تمایل موارد زیر را بسته به نیاز میتوانید در فایل docker-compose.yml اعمال کنید تا پایداری سایت تان بهتر شود:
- مدیریت لاگ ها
به صورت پیشفرض، داکر تمام لاگ ها را بدون محدودیت ذخیره میکند که در دراز مدت میتواند باعث پر شدن فضای دیسک و کرش کردن دیتابیس شود. برای کنترل این وضعیت، میتوانید بخش logging را با آپشنهای زیر مدیریت کنید. محدود کردن حجم و تعداد فایل لاگ ها، با استفاده از آپشن های زیر حجم هر فایل لاگ را به ۱۰ مگابایت و تعداد حداکثر ۳ فایل لاگ قدیمی محدود می کنیم با این تنظیم، کل فضای اشغال شده توسط لاگهای هر سرویس ( مثل وردپرس یا دیتابیس) هرگز از ۳۰ مگابایت فراتر نمیرود.:
max-size: "10m"
max-file: "3"
- تثبیت نسخهی ایمیجها:
بسته به نیاز میتوانید به جای استفاده از برچسب latest ( که همیشه آخرین نسخه را میگیرد و ممکن است باعث ناسازگاری ناگهانی شود) از نسخههای مشخص و پایدار (LTS) استفاده کنید.
mariadb:10.11
wordpress:6.9-php8.2-apache
در نهایت اگر بخواهید تغییرات بالا را اعمال کنید فایل تنظیمات (docker-compose.yml) به صورت زیر خواهد بود:
services:
db:
image: mariadb:10.11
restart: always
volumes:
- ./db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 'YourStrongRootPassword'
MYSQL_DATABASE: wordpress
MYSQL_USER: wp_user
MYSQL_PASSWORD: 'YourWPUserPassword'
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
wordpress:
depends_on:
- db
image: wordpress:6.9-php8.2-apache
restart: always
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wp_user
WORDPRESS_DB_PASSWORD: 'YourWPUserPassword'
WORDPRESS_DB_NAME: wordpress
volumes:
- ./wp_content:/var/www/html
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
حالا با دستور زیر، داکر تمام پیشنیازها را دانلود و سایت را بالا میآورد.
راهاندازی نهایی با Docker Compose
docker compose up -d
ورود به محیط گرافیکی وردپرس:
وارد مرورگر میشویم و آدرس ip سرور را مینویسیم که باید صفحه نصب وردپرس را مشاهده کنید.
چند نکته امنیتی و فنی
بک آپ گرفتن
با این کانفیگ، تمام فایلهای سایت در پوشهای که ساختهاید (مثلاً ~/my_blog) ذخیره میشوند. برای تهیه نسخه پشتیبان، مراحل زیر را به ترتیب انجام دهید:
۱. ابتدا وارد پوشه مورد نظر شوید.
۲. سپس سرویسهای Docker را متوقف کنید.
۳. از فایلهای مورد نظر نسخه پشتیبان تهیه کنید (دستور زیر یک مثال است؛ با توجه به محتویات پوشه خود، فایلهای لازم را مشخص کنید).
۴. پس از اتمام پشتیبانگیری، سرویسها را دوباره فعال کنید.
مراحل به همراه دستورات:
- متوقف کردن سرویسها
# First step
docker compose down
- ایجاد فایل پشتیبان
# Second step
tar -czvf "my_blog_$(date +%Y%m%d_%H%M%S).tar.gz" \
docker-compose.yml \
cert.pem \
key.pem \
wp_content \
db_data
- راهاندازی مجدد سرویسها
# Third step
docker compose up -d
چرا Docker را قبل از بک آپ متوقف میکنیم؟
متوقف کردن سرویسها قبل از بک آپ، از خراب شدن فایل ها و دیتابیس جلوگیری میکند. زمانی که کانتینر ها در حال اجرا هستند، فایل ها ممکن است در حال نوشته شدن باشند و بکآپ گرفتن در این حالت منجر به فایل های پشتیبان ناقص یا خراب میشود. با متوقف کردن سرویسها، از یکپارچگی و ثبات داده ها اطمینان حاصل میکنیم.
نکته: این روش برای سایت های شخصی و کوچک که downtime چند دقیقه ای مشکلی ایجاد نمیکند، کاملاً مناسب و مطمئن است. برای سایتهای پربازدید و تجاری، روشهای پیشرفته تری مانند بکآپ زنده (بدون توقف) توصیه میشود.
نکته: اگر صفحه وردپرس باز نشد، مطمئن شوید که فایروال پورت ۸۰ را نبسته باشد:
sudo ufw allow 80/tcp
سخن پایانی:
برای مشاهده سایر یادداشتها به صفحه اصلی iBijan مراجعه کنید اگر به مطالب با این سبک علاقه دارید، میتونید من رو در شبکه های اجتماعی ایکس (توییتر) و اینستاگرام دنبال کنید:
X: @iBijan_com Instagram: iBijancom
سلام
با این روش میشه سایت فروشگاهی راه اندازی کرد؟
درگاه پرداخت گرفت و اینماد رو واسش فعال کرد ؟
سلام. وی پی اس فقط یک محیط میزبانی هستش که اختیاراتت برای مدیریت سرور خیلی بیشتره و محدودیتی از نظر نوع سایت یا سایر چیزا نداره پس از نظر فنی مشکلی نداره. شاید برای فعالسازی درگاه و اینماد لازم باشه وی پی اس ایران رو بخری، قوانینشون رو بخون دقیق اطلاع ندارم