محمدرضا فلکی
2 سال پیش توسط محمدرضا فلکی مطرح شد
3 پاسخ

چجوری php رو ران کنم بعد از up کردن با docker

سلام چیکار کنم php رو ران کنم؟
این یه تصویر از دایرکتوری ها و فایل ها
 تصویر

docker-compose.yml

version: "3.8"

services:

  nginx:
    container_name: nginx
    build: ./docker/nginx
    command: nginx -g "daemon off;"
    links:
      - php
    ports:
      - "8080:80"
    volumes:
      -  ./logs/nginx:/var/log/nginx
      - ./src:/var/www/html

  php:
    container_name: php
    build: ./docker/php
    ports:
      - "9000:9000"
    volumes:
      - ./src:/var/www/html
    working_dir: /var/www/html

nginx Dockerfile

FROM nginx:1.20
ADD helloworld.nginx.conf /etc/nginx/conf.d/default.conf

helloworld.nginx.conf

server {
    listen 8080;
    index index.php index.htm index.html;

    root /var/www/html;

    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    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;
    }
}

php Dockerfile

FROM php:8.1-fpm

index.php

<?php
echo phpinfo();

چی توی url بنویسم که php بیاد بالا؟


ثبت پرسش جدید
رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 2 سال پیش مطرح شد
1

سلام وقتتون بخیر!

وقتی شما دارید nginx یا apache نصب می‌کنید دیگه نیاز نیست فایل هارو اجرا کنید
در واقع شما دارید یک سروری ایجاد می‌کنید که وقتی توسط مرورگر بهش درخواست داده میشه
اون میاد بسته به تنظیماتی که بهش دادید عمل می‌کنه و script php رو اجرا می‌کنه
شما نباید دنبال راهی باشید که کد php رو اجرا کنه

مگر زمانی که یه اسکریپت عادی دارید مثل چک کردن هر دقیقه یک سایت و ...
که این هم به nginx و apache نیاز نداره.


محمدرضا فلکی
تخصص : Learning Laravel
@m.reza6920 2 سال پیش مطرح شد
0

ممنون @Rp76 پس اینجوری که من متوجه شدم اونجایی که توی nginx.config تعریف میکنیم location برای php رو
همون میاد اون فایل index.php مارو اجرا میکنه پس نیازی به ادرس دهی اضافی توی url نیست برای مثال اگر nginx رو روی پورت ۸۰۸۰ آورده باشیم بالا توی کروم میزنیم localhost:8080؟
پس چرا وقتی من php و nginx رو به یه شبکه وصل میکنم و لینک میکنم و تنظیمات مورد نیاز رو توی config انجام میدم بازم وقتی همون localhost:8080 رو میزنم خوش امد گویی nginx رو نشون میده ولی خروجی کد من رو نشون نمیده؟


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 2 سال پیش مطرح شد
1

خب باید config nginx و فایل docker compose رو می‌ذاشتی.

ولی خب نکته‌اش اینه که باید فایل های php و nginx توی یه مسیر باشه یعنی

اگر به nginx گفتی php بود برو از فلان جا fpm رو بیاد و fpm توی docker image هستی که اسمش رو گذاشتی phpimage، هردو docker image باید به فایل های php دسترسی داشته باشند.

نمونه : default.conf

server {
    listen 80;
    listen [::]:80;
    server_name _;
    root /var/www/html/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    index index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass web:9000;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}
 nginx:
    image: nginx
    restart: always
    working_dir: /var/www/html
    ports:
      - "8000:80"
    volumes:
      - .:/var/www/html
      - ./.docker/nginx:/etc/nginx/conf.d

  web:
    build:
      context: .
      dockerfile: .docker/php/Dockerfile
    restart: always
    working_dir: /var/www/html
    volumes:
      - .:/var/www/html

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام