【问题标题】: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;
    }
}

【讨论】:

    猜你喜欢
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 2020-09-04
    • 2011-01-26
    相关资源
    最近更新 更多