اجرای وردپرس با داکر


سوال اصلی: چگونه وردپرس را بر روی اوبونتو 20.04 توسط داکر هاست کنیم؟

Source: How to install WordPress with Docker on Ubuntu 20.04?

  • این کار به پنج مرحله تقسیم میشود:
    نصب پیشنیاز ها
    مرحله اول: نصب داکر روی اوبونتو
    مرحله دوم: نصب MariaDB روی داکر
    مرحله سوم: نصب WordPress روی داکر
    مرحله چهارم: نصب Nginx روی داکر
    مرحله پنجم: کانفیگ Nginx و تمام


پیش از آغاز: نصب پیشنیاز ها

جهت تست این فرآیند به یک سیستم عامل اوبنتو 20.04 نیاز دارید. (سیستم شخصی یا VPS)

اجرای دستور زیر جهت نصب پیش نیازها (مانند mariadb-client)

ترمینال اوبونتو را بازکنید و شروع به اجرای دستورات زیر نمایید.

sudo apt-get install mariadb-client apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y

از نصب صحیح تمام پکیج ها اطمینان حاصل کنید و سپس به سراغ نصب داکر بروید.

مرحله اول: نصب داکر روی اوبونتو

فیلتر شکن خود را روشن کنید، سایت داکر اجازه دسترسی IP های ایرانی را نیمدهد

در قدم اول با دستور زیر GPGKey را توسط کامند زیر دانلود و ادد کنید.

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -

در قدم دوم ریپازیتوری داکر را با کاند زیر ادد کنید

sudo add-apt-repository &quotdeb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable&quot

بعد از اضافه شدن ریپازیتوری میتوانید داکر و داکر کمپوز رو با دستور زیر نصب کنید.

sudo apt-get install docker-ce docker-ce-cli containerd.io  -y

بعد از نصب هردو این پکیج ها ورژن داکر خود را با دستور زیر چک کنید.

docker --version

خروجی باشد شبیه ساختار زیر باشد، ورژن در طول زمان تغییر خواهد کرد.

Docker version 19.03.12, build 48a66213fe

مرحله دوم: نصب MariaDB روی داکر

دیتابیس mariaDb را با دستور زیر بر روی داکر نصب و راه اندازی میکنیم.

sudo docker pull mariadb

خروجی باشد شبیه ساختار زیر باشد

Using default tag: latest
latest: Pulling from library/mariadb
3ff22d22a855: Pull complete
e7cb79d19722: Pull complete
323d0d660b6a: Pull complete
b7f616834fd0: Pull complete
78ed0160f03e: Pull complete
a122e9306ac4: Pull complete
673e89352b19: Pull complete
caf1e694359b: Pull complete
04f5e4f6ead3: Pull complete
a41772aadb3d: Pull complete
c3811aa2fa0a: Pull complete
655ad574d3c7: Pull complete
90ae536d75f0: Pull complete
Digest: sha256:812d3a450addcfe416420c72311798f3f3109a11d9677716dc631c429221880c
Status: Downloaded newer image for mariadb:latest
docker.io/library/mariadb:latest

پوشه های مربوط به ورد پرس را در آدرس دلخواه ایجاد میکنیم:

mkdir ~/wordpress
mkdir -p ~/wordpress/database
mkdir -p ~/wordpress/html

یک کانتینر mariadb جهت تخصیص دیتابیس به وردپرس ایجاد میکنیم:

sudo docker run -e MYSQL_ROOT_PASSWORD=root-password -e MYSQL_USER=wpuser -e MYSQL_PASSWORD=password -e MYSQL_DATABASE=wpdb -v /root/wordpress/database:/var/lib/mysql --name wordpressdb -d mariadb

توجه توجه: آدرسی که برای پوشه در نظر گرفته اید باید با این آدرس کاملا برابر باشد /root/wordpress/database این پوشه ولوم شماست

خروجی باید برابر کدی به شکل زیر باشد

e8c780b34cdcb66db9278635b109debb1775d6a6b6785c4e74c8e0815e3ba5e3

بررسی دستور ایجاد کانتینر

  • MYSQL_ROOT_PASSWORD: پسورد روت برای دیتابیس که در دستور بالا برابر با مقدار زیر می باشد
  • MYSQL_ROOT_PASSWORD= root-password
  • MYSQL_USER: این دستور جهت ایجاد یک یوزر برای پایگاه داده می باشد، استفاده از یوزر روت پیشنهاد نمیشود، در این مثال یوزر ایجاد شده برابر مقدار زیر می باشد.
  • MYSQL_USER= wpuser
  • MYSQL_PASSWORD: جهت تنظیم پسوور برای یوزر ایجاد شده که در این مثال برابر مقدار زیر میباشد
  • MYSQL_PASSWORD= password
  • MYSQL_DATABASE: ایجاد یک دیتابیس جهت اتصال به سایت وردپرس که در این مثال برابر با مقدار زیر می باشد
  • MYSQL_DATABASE= wpdb
  • -v /root/wordpress/database:/varlib/mysql: پوشه جهت نگهداری مقادیر دیتابیس، با پوشته ساخته شده باید برابر باشد

آی پی کانتینر ایجاد شده را با دستور زیر بررسی کنید.

sudo docker inspect -f '{{ .NetworkSettings.IPAddress }}' wordpressdb

آیپی باید برابر مقدار 172.17.0.2 باشد.

اگر پیشناز ها را نصب کرده باشید میتوانید با دستور زیر به پایگاه داده متصل شوید:

mysql -u wpuser -h 172.17.0.2 -p
Enter password:

در مثال بالا برای wpuser باید پسوردی که تایین کرده بودیم را بزنید که برابر password می باشد.

خروجی باید برابر مقدار زیر باشد.

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.5.4-MariaDB-1:10.5.4+maria~focal mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

با دستور show databases می توانید دیتا بیس های موجود را چک کنید. و با دستور Exit از فضای کامند نویسی mysql خارج شوید.

مرحله سوم: نصب WordPress روی داکر

با اجرای دستور زیر ایمیج وردپرس را دانلود و نصب میکنیم

sudo docker pull wordpress:latest

که خروجی باید برابر مقدار زیر باشد.

latest: Pulling from library/wordpress
bf5952930446: Pull complete
a409b57eb464: Pull complete
3192e6c84ad0: Pull complete
43553740162b: Pull complete
d8b8bba42dea: Pull complete
eb10907c0110: Pull complete
10568906f34e: Pull complete
03fe17709781: Pull complete
98171b7166c8: Pull complete
3978c2fb05b8: Pull complete
71bf21524fa8: Pull complete
24fe81782f1c: Pull complete
7a2dfd067aa5: Pull complete
a04586f4f8fe: Pull complete
b8059b10e448: Pull complete
e5b4db4a14b4: Pull complete
48018c17c4e9: Pull complete
d09f106f9e16: Pull complete
2ce4312168ba: Pull complete
01f0fe2819ef: Pull complete
Digest: sha256:19c6a3a796b1db1e6ee8bd3e8d5d69510885fa62255ce8bd07ee34d3878d0312
Status: Downloaded newer image for wordpress:latest
docker.io/library/wordpress:latest

حدود 500 مگابایت دانلود خواهد شد.

با اجرای دستور زیر یک کانتینر از ایمیج وردپرس ایجاد میکنیم

sudo docker run -e WORDPRESS_DB_USER=wpuser -e WORDPRESS_DB_PASSWORD=password -e WORDPRESS_DB_NAME=wpdb -p 8081:80 -v /root/wordpress/html:/var/www/html --link wordpressdb:mysql --name wpcontainer -d wordpress

توجه داشته باشید که آدرس پوشه بندی ها اشتباه نباشد، پورت 8081 آزاد باشد و دسترسی های دیتابیس به درستی تنظیم شده باشد.

اگر همچنان اررو داشتید از دستور زیر جهت ریستارت کردن داکر استفاده کنید

$ sudo systemctl restart docker

توجه داشته باشید بعد از ریستارد کردن داکر، باید کانتینر wordpressdb را دوباره راه اندازی کنید و سپس برای ایجاد کانتینر وردپرس اقدام کنید

با دستور sudo docker start wordpressdb کانتینر را اجرا کنید.

توجه کنید بعد از اجرای دستور ایجاد کانتینر وردپرس اگر اروری داشته باشید یا نداشته باشید، کانتینر در هر صورت ایجاد شده است و برای دفعات بعد به شما اجازه ایجاد کانتینر با همین نام را نخواهد داد.

در صورت وجود اررور با دستور Docker rm wpcontainer کانتینر را پاک کنید.

با دستور زیر بررسی کنید که آیا وردپرس به درستی نصب و راه ندازه شده است یا خیر.

curl -I localhost:8081

خروجی باید برابر مقدار زیر باشد:

HTTP/1.1 302 Found
Date: Fri, 07 Aug 2020 04:44:36 GMT
Server: Apache/2.4.38 (Debian)
X-Powered-By: PHP/7.4.9
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
X-Redirect-By: WordPress
Location: http://localhost:8081/wp-admin/install.php
Content-Type: text/html; charset=UTF-8

مرحله چهارم: نصب Nginx روی داکر

حال میرسیم به مرحله راه اندازی ngnix که در این مثال از نصب مستقیم بر روی اوبونتو استفاده کرده ایم.

با دستور زیر ngnix را نصب میکنیم:

sudo apt-get install nginx -y

در حال حاضر nginx نصب شده است و با چک کردن آدرس http://localhost قابل بررسی می باشد.

مرحله پنجم: کانفیگ Nginx و تمام

با ادیتور نانو و یا هر ادیتور دیگری که برای شما راحت باشد فایلی به نام wordpress در آدرس زیر ایجاد کنید. و نقدار مشخص شده را در آن کپی کنید.

sudo nano /etc/nginx/sites-available/wordpress

مقدار مورد نظر جهت بارگذاری:

server {
  listen 80;
  server_name wp.example.com;
  location / {
    proxy_pass http://localhost:8081;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

فایل را ذخیره کنید.

دستور زیر را اجرا کنید

ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/

برای قدم آخر ngnix را restart کنید.

systemctl restart nginx

وبسایت وردپرسی شما در آدرس localhost:8081 قابل مشاهده می باشد. و همچنین اگر دامنه برای آن ست کرده باشید در دامنه قابل مشاهده است.

در ادامه مراحل نصب وردپرس را طی کنید و وارد پنل میدیریت شوید.

اگر سوالی داشتین در این رابطه به من ایمیل بزنید. فورا جواب میدم.

SaberMotamed@gmail.com

منابع مورد استفاده:

https://www.atlantic.net/vps-hosting/install-wordpress-with-docker-on-ubuntu-20-04/

https://stackoverflow.com/questions/31667160/running-docker-container-iptables-no-chain-target-match-by-that-name