اجرای دستور های composer و نصب لاراول در داکر

اجرای دستور های composer و نصب لاراول در داکر

تا کنون توانستیم سرویس های PHP، MySQL و nginx را راه اندازی کنیم اما هنوز فریم ورک لاراول را نصب نکردیم. اگر شما توسعه دهنده PHP هستید به احتمال زیاد composer در سیستم شما نصب است. پس می‌توانید داخل پوشه src دستور composer create-project laravel/laravel را اجرا کنید. اما در این قسمت می خواهیم این کار را توسط داکر انجام دهیم تا در سیستم یا سرور های دیگر که composer ندارند هم بتوانیم برنامه خود را اجرا کنیم. برای این کار به فایل docker compose یک سرویس جدید اضافه می کنیم.

version: '3.8'

services:
  nginx:
   build:
     context: .
     dockerfile: nginx.dockerfile
   ports:
      - 80:80
   volumes:
      - ./src:/var/www/html
   depends_on:
      - mysql
      - php
  mysql:
   image: mysql:5.7
   ports:
      - 3306:3306
   environment:
     MYSQL_DATABASE: sokanacademy
     MYSQL_USER: sokanacademy
     MYSQL_PASSWORD: secret
     MYSQL_ROOT_PASSWORD: secret
   volumes:
      - ./mysql:/var/lib/mysql
  php:
   build:
     context: .
     dockerfile: php.dockerfile
   volumes:
      - ./src:/var/www/html
 composer:
   image: composer:2
   volumes:
      - ./src:/var/www/html
   working_dir: /var/www/html

    برای این سرویس از برچسب working_dir استفاده کردیم تا مشخص شود دستور های composer در چه مسیری اجرا شوند.

اکنون که سرویس composer تعریف شده، چگونه از آن استفاده کنیم؟ بر خلاف سرویس های قبلی، composer را برای اجرا در پس زمینه نیاز نداریم. کافی است کانتینر های سرویس composer را برای اجرای یک دستور، فعال کنیم و بعد از اجرای آن دستور غیر فعال کنیم تا منابعی که توسط آن استفاده شده بود، آزاد شوند.

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

docker compose run --rm composer create-project laravel/laravel

با دستور docker compose run به داکر گفتیم که می خواهیم تنها یک دستور اجرا شود و نیاز نیست کانتینری که می سازد را فعال نگه دارد. گزینه rm-- هم همانطور که قبل تر دیدیم، کانتینر را به صورت کامل پاک می کند. بعد از گزینه rm-- نام سرویس را نوشتیم و جلوی آن دستوری که می خواهیم اجرا شود را آورده ایم.

اکنون اگر دستور docker ps را اجرا کنیم می بینیم که کانتینر composer در حال اجرا نیست و بعد از اجرای دستور غیر فعال شده  است.

 قبل از اجرای برنامه، لازم است به فایل تنظیمات nginx که با نام default.conf نوشتیم برویم و مسیر فایل index.php را در پوشه public تعیین کنیم. 

server {
	listen 80;
	index index.php index.html;
	server_name _;
	root /var/www/html/public;
	
	location / {
		try_files $uri $uri/ /index.php?$query_string;
	}
	
	location ~ \.php$ {
		try_files $uri =404;
		fastcgi_split_path_info ^(.+\.php)(/.+)$;
		fastcgi_pass php:9000;
		fastcgi_index index.php;
		include fastcgi_params;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		fastcgi_param PATH_INFO $fastcgi_path_info;
	}
}

دستور docker compose up nginx را اجرا می کنیم تا کانتینر های MySQL ،PHP و nginx دوباره فعال شوند و آدرس localhost:80 را در مروگر مشاهده می کنیم.

اکنون می توانیم هر دستور composer را اجرا کنیم. تنها کافی است قبل از دستور مورد نظر docker compose run composer را بنویسیم.  این کار در حالی که بقیه کانتینر ها فعال هستند هم قابل انجام است.

دوره در حال تکمیل است ... rocket