سلام چیکار کنم 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 بیاد بالا؟
سلام وقتتون بخیر!
وقتی شما دارید nginx یا apache نصب میکنید دیگه نیاز نیست فایل هارو اجرا کنید
در واقع شما دارید یک سروری ایجاد میکنید که وقتی توسط مرورگر بهش درخواست داده میشه
اون میاد بسته به تنظیماتی که بهش دادید عمل میکنه و script php رو اجرا میکنه
شما نباید دنبال راهی باشید که کد php رو اجرا کنه
مگر زمانی که یه اسکریپت عادی دارید مثل چک کردن هر دقیقه یک سایت و ...
که این هم به nginx و apache نیاز نداره.
ممنون @Rp76 پس اینجوری که من متوجه شدم اونجایی که توی nginx.config تعریف میکنیم location برای php رو
همون میاد اون فایل index.php مارو اجرا میکنه پس نیازی به ادرس دهی اضافی توی url نیست برای مثال اگر nginx رو روی پورت ۸۰۸۰ آورده باشیم بالا توی کروم میزنیم localhost:8080
؟
پس چرا وقتی من php و nginx رو به یه شبکه وصل میکنم و لینک میکنم و تنظیمات مورد نیاز رو توی config انجام میدم بازم وقتی همون localhost:8080 رو میزنم خوش امد گویی nginx رو نشون میده ولی خروجی کد من رو نشون نمیده؟
خب باید 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
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟