وب سایت عباس باقری

وب سایت شخصی عباس باقریوب سایت شخصی عباس باقری

داکرایز کردن پروژه آپاچی ، php ، mysql و phpmyadmin

داکرایز کردن پروژه آپاچی ، php ، mysql و phpmyadmin

زمان مطالعه : 3 دقیقه

در این پست به داکرایز کردن یک پروژه php به همراه پایگاه داده میپردازیم.

برای شروع ابتدا داکر را نصب میکنیم. فرض کنید ما پروژه خود را در پوشه php_project ذخیره کرده ایم.

اکنون یک پوشه جدید بنام php_docker_project میسازیم و پوشه php_project را به این پوشه منتقل میکنیم.

سپس پوشه php_docker_project یک فایل جدید بنام docker-compose.yaml اضافه میکنیم. سپس کدهای زیر را به آن اضافه میکنیم.


version: "3.8"

services: # adds 2 services: mysql and phpmyadmin to connect with
    website:
        container_name: php8.1-apache
        build:
            context: .
            dockerfile: Dockerfile
        environment:
            - MYSQL_DBHOST=mysql
            - MYSQL_DBPORT=3306
            - MYSQL_DBUSER=root
            - MYSQL_DBPASS=password
            - MYSQL_DBNAME=mydatabase
        ports:
            - 80:80
            - 443:443
        depends_on:
            - db
    db:
        image: mysql:latest # use latest version of mysql
        container_name: db # add a name for the container
        command: --default-authentication-plugin=mysql_native_password
        restart: unless-stopped
        environment: # add default values, see docs for more info.
            MYSQL_USER: user
            MYSQL_ROOT_PASSWORD: mypassword
            MYSQL_PASSWORD: mypassword
            #MYSQL_DATABASE: ohif # create this database on startup
        volumes:
            - my-db:/var/lib/mysql
        ports:
            - '3306:3306'

    phpmyadmin:
        container_name: phpmyadmin
        image: phpmyadmin/phpmyadmin:latest
        ports:
        - "8082:80"
        environment:
            MYSQL_ROOT_PASSWORD: mypassword #(Required) set the password for the root superuser account.
            PMA_HOST: db   # define the address/hostname of the mysql server eg mysql container name.
            PMA_USER: root # this is the root user to login on startup
            PMA_PASSWORD: mypassword # use the root password to login on startup.
            # Create a new user on startup (optional)
            # MYSQL_USER: newuser
            # MYSQL_PASSWORD: mypassword

volumes: # add persistent data even if container is removed.
        my-db:

در ابتدا نسخه docker-compose را انتخاب میکنیم. در حال حاضر آخرین نسخه 3.8 می باشد :


version: "3.8"

در خط بعدی سرویسهای خودمان را معرفی میکنیم. در حال حاضر ما سه سرویس php ، mysql و phpmyadmin داریم :


services: # adds 2 services: mysql and phpmyadmin to connect with
website:
    ...

db:
    ...

phpmyadmin:
    ...

برای سرویس php از image نسخه 8.1 بهمراه apache استفاده میکنیم. بجای این می توانیم یکی از سرویسهای دیگر از این صفحه را انتخاب کرد.


website:
    container_name: php8.1-apache
    build:
        context: .
        dockerfile: Dockerfile
    environment:
        - MYSQL_DBHOST=mysql
        - MYSQL_DBPORT=3306
        - MYSQL_DBUSER=root
        - MYSQL_DBPASS=password
        - MYSQL_DBNAME=
    ports:
        - 80:80
        - 443:443
    depends_on:
        - db

ما مشخص کردیم که از php 8.1 استفاد خواهیم کرد.

با build ادرس Dockerfile را مشخص میکنیم که در همین پوشه جاری است.

با environment تعدادی متغیر قابل استفاده در php تعریف میکنیم. اینجا ما مشخصات دیتا بیس را ذخیره کردیم.

با ports هم مشخص کردیم که سایت ما روی پورت 80 و 443 قابل نمایش شود.

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


  db:
  image: mysql:latest # use latest version of mysql
  container_name: db # add a name for the container
  command: --default-authentication-plugin=mysql_native_password
  restart: unless-stopped
  environment: # add default values, see docs for more info.
    MYSQL_USER: user
    MYSQL_ROOT_PASSWORD: password
    MYSQL_PASSWORD: password
    MYSQL_DATABASE: mydatabase # create this database on startup
  volumes:
    - my-db:/var/lib/mysql
  ports:
    - '3306:3306'

در این قسمت سرویس mysql را روی پورت 3306 تعریف کردیم.


    phpmyadmin:
        container_name: phpmyadmin
        image: phpmyadmin/phpmyadmin:latest
        ports:
        - "8082:80"
        environment:
            MYSQL_ROOT_PASSWORD: mypassword #(Required) set the password for the root superuser account.
            PMA_HOST: db   # define the address/hostname of the mysql server eg mysql container name.
            PMA_USER: root # this is the root user to login on startup
            PMA_PASSWORD: mypassword # use the root password to login on startup.
            # Create a new user on startup (optional)
            # MYSQL_USER: newuser
            # MYSQL_PASSWORD: password

در این قسمت هم ما پورت 8082 را به mysql اختصاص دادیم.

با توجه به تنظیمات بالا میتوانیم با مشخصات زیر از دیتابیس در php استفاده کنیم.


$db = new mysqli('db','root','password','password',3306);

نکته : بجای localhost نام سرویس دیتابیس را قرار میدهیم.

سپس در پوشه php_docker_project یک فایل جدید بنام Dockerfile ایجاد میکنیم و موارد زیر را در آن قرار میدهیم :


FROM php:8.1-apache


RUN apt-get update && apt-get install -y
RUN docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable pdo_mysql


COPY ./php_project
COPY ./.htaccess /var/www/html/

RUN chown -R www-data:www-data /var/www #this line after COPY

RUN a2enmod rewrite

EXPOSE 80
EXPOSE 443

توضیحات بیشتر

پس از اعمال تفییرات بالا در فایل Dockerfile میتوانید پروژه را روی داکر بالا بیاورید.


cd ~
cd php_docker_project
docker-compose up --build

پس از اجرای این دستورات پروژه روی ip شما در بستر وب قابل مشاهده خواهد بود.

برای غیرفعال کردن سایت دستورات زیر را اجرا میکنیم


cd ~
cd php_docker_project
docker-compose up --build

امیدوارم پست مفید بوده باشه

منابع بیشتر برای مطالعه :

docker mysql

docker phpmyadmin