【问题标题】:Running a different version of php per project directory on a LAMP stack enviroment在 LAMP 堆栈环境中为每个项目目录运行不同版本的 php
【发布时间】:2022-01-26 22:23:04
【问题描述】:
是否有一种配置方法或程序允许我根据我的项目目录运行不同版本的 php,例如在 php 5 上运行的 /project1 和在 php 7 上运行的 /project2?我需要同时运行这两个项目。
我按照使用 xampp 的指南进行操作,但它总是加载 xampp 安装程序附带的 php 版本。
我愿意接受安装该堆栈并允许这种配置的其他程序的建议,或者指出使用我没有经验的 docker 设置它的指南。
【问题讨论】:
-
我不会费心尝试同时安装多个本地版本,这总是令人头疼。一定要走Docker 路线。
标签:
php
docker
apache
xampp
lamp
【解决方案1】:
您可以使用简单的 docker-compose 同时运行它们
version: '3'
services:
#PHP5 Service
app1:
build:
context: .
dockerfile: Dockerfile-php5
container_name: app1
restart: unless-stopped
tty: true
env_file:
- ./.env/php5.env
- ./.env/.env
working_dir: /var/www/project1
networks:
- app-network
volumes:
- ./project1:/var/www/project1
#PHP7 Service
app2:
build:
context: .
dockerfile: Dockerfile-php7
container_name: app2
restart: unless-stopped
tty: true
env_file:
- ./.env/php7.env
- ./.env/.env
working_dir: /var/www/project2
networks:
- app-network
volumes:
- ./project2:/var/www/project2
#Nginx Service
webserver:
image: nginx:alpine
container_name: webserver
restart: unless-stopped
tty: true
ports:
- "8081:8081" #For Project1
- "8082:8082" #For Project2
networks:
- app-network
volumes:
- ./project1:/var/www/project1
- ./project2:/var/www/project2
- ./nginx/conf.d:/etc/nginx/conf.d/
- ./nginx/log:/var/log/nginx
networks:
app-network:
driver: bridge
您应该使用 fastcgi 在您的不同应用程序上传递请求,如下所示:
#Project1
server {
listen 8081;
index index.php index.html;
error_log /var/log/nginx/api-error-php5.log;
access_log /var/log/nginx/api-access-php5.log;
root /var/www/project1/public;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}
对于项目2
#Project2
server {
listen 8082;
index index.php index.html;
error_log /var/log/nginx/api-error-php7.log;
access_log /var/log/nginx/api-access-php7.log;
root /var/www/project2/public;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app2:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}