多版本共存的好处是:在nginx的配置~/goserver/conf/nginx/conf.d/ 目录内加一个demo.conf 就可以直接跑起来项目了。
server { listen 80; server_name demo.test; index index.php index.html index.htm; root /var/www/demo; location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php/$1 last; break; } } location ~ .php { # try_files $uri =404; fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass php74:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; include fastcgi_params; } }
注意:仅修改版本号即可实现版本任意切换
fastcgi_pass php74:9000; 这一行修改指定使用php7.4版本的。
fastcgi_pass php80:9000; 这一行修改指定使用php8.0版本的。
先上图,真实可用可靠。
Linux安装多版本PHP共存,和多版本MySQL共存,和多版本Go共存
一:先安装Docker,如果不知道可以论坛点击搜索,有其他人帖子
二:使用我给的docker-compose和命令
创建目录:
创建docker-compose.yaml #version: '3' services: redis: image: redis:6.0.2 container_name: redis restart: always ports: - "6379:6379" volumes: - ~/goserver/data/redis/data:/data - ~/goserver/data/redis/conf/:/usr/local/etc/redis/ - ~/goserver/data/redis/logs:/var/log/redis.log/ command: ["redis-server", "/usr/local/etc/redis/redis.conf"] environment: - TZ=Asia/Shanghai networks: - lnmp mysql57: image: mysql:5.7 container_name: mysql57 build: context: ~/goserver/data/mysql57 dockerfile: Dockerfile restart: always ports: - "3307:3307" privileged: true command: ["mysqld", "--default-authentication-plugin=mysql_native_password", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"] volumes: - ~/goserver/data/mysql57/logs/:/var/log/mysql/ - ~/goserver/data/mysql57/data/:/var/lib/mysql/ - ~/goserver/data/mysql57/conf/my.cnf:/etc/mysql/conf.d/my.cnf environment: - TZ=Asia/Shanghai - MYSQL_ROOT_PASSWORD=root networks: - lnmp mysql80: image: mysql:8.0 container_name: mysql80 build: context: ~/goserver/data/mysql80 dockerfile: Dockerfile restart: always ports: - "3308:3308" privileged: true volumes: - ~/goserver/data/mysql80/logs/:/var/log/mysql/ - ~/goserver/data/mysql80/data/:/var/lib/mysql/ - ~/goserver/data/mysql80/conf/my.cnf:/etc/mysql/conf.d/my.cnf command: ["mysqld", "--default-authentication-plugin=mysql_native_password", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"] environment: - TZ=Asia/Shanghai - MYSQL_ROOT_PASSWORD=root networks: - lnmp php74: image: php:7.4 container_name: php74 build: context: ~/goserver/conf/php74 dockerfile: Dockerfile restart: always cap_add: - SYS_PTRACE ports: - "9074:9000" user: "1000:1000" privileged: true volumes: - ~/www:/var/www/ - ~/goserver/conf/php74/php.ini:/usr/local/etc/php/php.ini-development - ~/goserver/conf/php74/php-fpm.conf:/usr/local/etc/php-fpm.d/www.conf environment: - TZ=Asia/Shanghai networks: - lnmp php80: image: php:8.0 container_name: php80 build: context: ~/goserver/conf/php80 dockerfile: Dockerfile restart: always cap_add: - SYS_PTRACE ports: - "9080:9000" user: "1000:1000" privileged: true volumes: - ~/www:/var/www/ - ~/goserver/conf/php80/php.ini:/usr/local/etc/php/php.ini-development - ~/goserver/conf/php80/php-fpm.conf:/usr/local/etc/php-fpm.d/www.conf environment: - TZ=Asia/Shanghai networks: - lnmp nginx: image: nginx:latest container_name: nginx restart: always ports: - "80:80" - "443:443" privileged: true volumes: - ~/www:/var/www/ - ~/goserver/conf/nginx/nginx.conf:/etc/nginx/nginx.conf - ~/goserver/conf/nginx/conf.d:/etc/nginx/conf.d - ~/goserver/conf/nginx/logs:/var/log/nginx depends_on: - php74 - php80 environment: - TZ=Asia/Shanghai networks: - lnmp networks: lnmp:
#version: '3' services: redis: image: redis:6.0.2 container_name: redis restart: always ports: - "6379:6379" volumes: - ~/goserver/data/redis/data:/data - ~/goserver/data/redis/conf/:/usr/local/etc/redis/ - ~/goserver/data/redis/logs:/var/log/redis.log/ command: ["redis-server", "/usr/local/etc/redis/redis.conf"] environment: - TZ=Asia/Shanghai networks: - lnmp mysql57: image: mysql:5.7 container_name: mysql57 build: context: ~/goserver/data/mysql57 dockerfile: Dockerfile restart: always ports: - "3307:3307" privileged: true command: ["mysqld", "--default-authentication-plugin=mysql_native_password", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"] volumes: - ~/goserver/data/mysql57/logs/:/var/log/mysql/ - ~/goserver/data/mysql57/data/:/var/lib/mysql/ - ~/goserver/data/mysql57/conf/my.cnf:/etc/mysql/conf.d/my.cnf environment: - TZ=Asia/Shanghai - MYSQL_ROOT_PASSWORD=root networks: - lnmp mysql80: image: mysql:8.0 container_name: mysql80 build: context: ~/goserver/data/mysql80 dockerfile: Dockerfile restart: always ports: - "3308:3308" privileged: true volumes: - ~/goserver/data/mysql80/logs/:/var/log/mysql/ - ~/goserver/data/mysql80/data/:/var/lib/mysql/ - ~/goserver/data/mysql80/conf/my.cnf:/etc/mysql/conf.d/my.cnf command: ["mysqld", "--default-authentication-plugin=mysql_native_password", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"] environment: - TZ=Asia/Shanghai - MYSQL_ROOT_PASSWORD=root networks: - lnmp php74: image: php:7.4 container_name: php74 build: context: ~/goserver/conf/php74 dockerfile: Dockerfile restart: always cap_add: - SYS_PTRACE ports: - "9074:9000" user: "1000:1000" privileged: true volumes: - ~/www:/var/www/ - ~/goserver/conf/php74/php.ini:/usr/local/etc/php/php.ini-development - ~/goserver/conf/php74/php-fpm.conf:/usr/local/etc/php-fpm.d/www.conf environment: - TZ=Asia/Shanghai networks: - lnmp php80: image: php:8.0 container_name: php80 build: context: ~/goserver/conf/php80 dockerfile: Dockerfile restart: always cap_add: - SYS_PTRACE ports: - "9080:9000" user: "1000:1000" privileged: true volumes: - ~/www:/var/www/ - ~/goserver/conf/php80/php.ini:/usr/local/etc/php/php.ini-development - ~/goserver/conf/php80/php-fpm.conf:/usr/local/etc/php-fpm.d/www.conf environment: - TZ=Asia/Shanghai networks: - lnmp nginx: image: nginx:latest container_name: nginx restart: always ports: - "80:80" - "443:443" privileged: true volumes: - ~/www:/var/www/ - ~/goserver/conf/nginx/nginx.conf:/etc/nginx/nginx.conf - ~/goserver/conf/nginx/conf.d:/etc/nginx/conf.d - ~/goserver/conf/nginx/logs:/var/log/nginx depends_on: - php74 - php80 environment: - TZ=Asia/Shanghai networks: - lnmp networks: lnmp:
创建php7.4的Dockerfile
# PHP 7.4 Dockerfile FROM php:7.4-fpm # 设置容器的时区为"Asia/Shanghai"-` ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone RUN echo "deb https://mirrors.aliyun.com/debian/ bullseye main non-free contrib" > /etc/apt/sources.list \ && echo "deb-src https://mirrors.aliyun.com/debian/ bullseye main non-free contrib" >> /etc/apt/sources.list \ && echo "deb https://mirrors.aliyun.com/debian-security/ bullseye-security main" >> /etc/apt/sources.list \ && echo "deb-src https://mirrors.aliyun.com/debian-security/ bullseye-security main" >> /etc/apt/sources.list \ && echo "deb https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib" >> /etc/apt/sources.list \ && echo "deb-src https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib" >> /etc/apt/sources.list \ && echo "deb https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib" >> /etc/apt/sources.list \ && echo "deb-src https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib" >> /etc/apt/sources.list \ && rm -f /etc/apt/sources.list.d/* # 安装依赖包 RUN apt-get update && apt-get install -y \ build-essential \ imagemagick \ libmagickcore-dev \ libmagickwand-dev \ libfreetype6-dev \ libmcrypt-dev \ libjpeg-dev \ libpng-dev \ libzip-dev \ libwebp-dev \ libjpeg62-turbo-dev \ zlib1g-dev \ # 配置GD扩展 && docker-php-ext-configure gd --with-webp=/usr/include/webp --with-jpeg=/usr/include --with-freetype=/usr/include/freetype2/ \ # 安装PHP扩展 && docker-php-ext-install -j$(nproc) gd iconv pdo_mysql mysqli bcmath calendar exif gettext sockets dba pcntl shmop sysvmsg sysvsem sysvshm zip \ && pecl install imagick \ && pecl install mcrypt \ && docker-php-ext-enable imagick mcrypt #opcache 开发暂时不加 #7.4添加可变版本扩展 -- 单独加 ENV PHPREDIS_VERSION 6.0.2 ENV PHPXDEBUG_VERSION 3.1.6 ENV PHPSWOOLE_VERSION 4.8.13 RUN pecl install redis-$PHPREDIS_VERSION \ && pecl install xdebug-$PHPXDEBUG_VERSION \ && pecl install swoole-$PHPSWOOLE_VERSION \ && docker-php-ext-enable redis xdebug swoole # 安装 Composer ENV COMPOSER_HOME /root/composer RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer ENV PATH $COMPOSER_HOME/vendor/bin:$PATH # 安装composer并允许root用户运行 ENV COMPOSER_ALLOW_SUPERUSER=1 ENV COMPOSER_NO_INTERACTION=1 # 这句很重要,如果和你的nginx用户不同会导致你的服务起不来 RUN groupadd www && useradd -g www www CMD ["php-fpm"] WORKDIR /var/www/html
创建php8.0的Dockerfile # PHP 8.0 Dockerfile FROM php:8.0-fpm # 设置容器的时区为"Asia/Shanghai"-` ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone RUN echo "deb http://mirrors.aliyun.com/debian/ buster main non-free contrib" > /etc/apt/sources.list.d/buster.list \ && echo "deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib" >> /etc/apt/sources.list.d/buster.list \ && echo "deb http://mirrors.aliyun.com/debian-security buster/updates main non-free contrib" > /etc/apt/sources.list.d/buster-security.list \ && echo "deb-src http://mirrors.aliyun.com/debian-security buster/updates main non-free contrib" >> /etc/apt/sources.list.d/buster-security.list \ && echo "deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib" > /etc/apt/sources.list.d/buster-updates.list \ && echo "deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib" >> /etc/apt/sources.list.d/buster-updates.list \ && rm -f /etc/apt/sources.list.d/* # 依赖库和扩展 RUN apt-get update && apt-get install -y \ build-essential \ libmagickcore-dev \ libmagickwand-dev \ imagemagick \ libfreetype6-dev \ libmcrypt-dev \ libpng-dev \ libzip-dev \ libwebp-dev \ libjpeg62-turbo-dev \ zlib1g-dev \ && docker-php-ext-configure gd --with-webp=/usr/include/webp --with-jpeg=/usr/include --with-freetype=/usr/include/freetype2/ \ && docker-php-ext-install -j$(nproc) gd iconv pdo_mysql mysqli bcmath calendar exif gettext sockets dba pcntl shmop sysvmsg sysvsem sysvshm zip \ && pecl install imagick \ && pecl install mcrypt \ && docker-php-ext-enable imagick mcrypt #7.4添加可变版本扩展 -- 单独加 ENV PHPREDIS_VERSION 6.0.2 ENV PHPXDEBUG_VERSION 3.3.2 ENV PHPSWOOLE_VERSION 5.1.1 RUN pecl install redis-$PHPREDIS_VERSION \ && pecl install xdebug-$PHPXDEBUG_VERSION \ && pecl install swoole-$PHPSWOOLE_VERSION \ && docker-php-ext-enable redis xdebug swoole # 安装 Composer ENV COMPOSER_HOME /root/composer RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer ENV PATH $COMPOSER_HOME/vendor/bin:$PATH # 安装composer并允许root用户运行 ENV COMPOSER_ALLOW_SUPERUSER=1 ENV COMPOSER_NO_INTERACTION=1 # 这句很重要,如果和你的nginx用户不同会导致你的服务起不来 RUN groupadd www && useradd -g www www CMD ["php-fpm"] WORKDIR /var/www/html 创建MySQL5.7的Dockerfile FROM mysql:5.7 ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone #设置环境变量(root密码) #设置免密登录 ENV MYSQL_ROOT_PASSWORD=root ENV MYSQL_ALLOW_EMPTY_PASSWORD yes ENV LANG=C.UTF-8 EXPOSE 3307 COPY ./conf/my.cnf /etc/mysql/conf.d/ RUN chmod 644 /etc/mysql/conf.d/my.cnf RUN chmod 644 /home/kentrl/goserver/data/mysql80/conf/my.cnf 创建MySQL8.0的Dockerfile FROM mysql:8.0 ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ENV MYSQL_ROOT_PASSWORD=root ENV MYSQL_ALLOW_EMPTY_PASSWORD yes ENV LANG=C.UTF-8 EXPOSE 3308 COPY ./conf/my.cnf /etc/mysql/conf.d/ RUN chmod 644 /etc/mysql/conf.d/my.cnf RUN chmod 644 /home/kentrl/goserver/data/mysql80/conf/my.cnf 执行docker compose命令安装服务: docker-compose up redis docker-compose up msyql57 docker-compose up msyql80 docker-compose up php74 docker-compose up php80 docker-compose up nginx 有什么问题再问我。
创建php8.0的Dockerfile
# PHP 8.0 Dockerfile FROM php:8.0-fpm # 设置容器的时区为"Asia/Shanghai"-` ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone RUN echo "deb http://mirrors.aliyun.com/debian/ buster main non-free contrib" > /etc/apt/sources.list.d/buster.list \ && echo "deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib" >> /etc/apt/sources.list.d/buster.list \ && echo "deb http://mirrors.aliyun.com/debian-security buster/updates main non-free contrib" > /etc/apt/sources.list.d/buster-security.list \ && echo "deb-src http://mirrors.aliyun.com/debian-security buster/updates main non-free contrib" >> /etc/apt/sources.list.d/buster-security.list \ && echo "deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib" > /etc/apt/sources.list.d/buster-updates.list \ && echo "deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib" >> /etc/apt/sources.list.d/buster-updates.list \ && rm -f /etc/apt/sources.list.d/* # 依赖库和扩展 RUN apt-get update && apt-get install -y \ build-essential \ libmagickcore-dev \ libmagickwand-dev \ imagemagick \ libfreetype6-dev \ libmcrypt-dev \ libpng-dev \ libzip-dev \ libwebp-dev \ libjpeg62-turbo-dev \ zlib1g-dev \ && docker-php-ext-configure gd --with-webp=/usr/include/webp --with-jpeg=/usr/include --with-freetype=/usr/include/freetype2/ \ && docker-php-ext-install -j$(nproc) gd iconv pdo_mysql mysqli bcmath calendar exif gettext sockets dba pcntl shmop sysvmsg sysvsem sysvshm zip \ && pecl install imagick \ && pecl install mcrypt \ && docker-php-ext-enable imagick mcrypt #7.4添加可变版本扩展 -- 单独加 ENV PHPREDIS_VERSION 6.0.2 ENV PHPXDEBUG_VERSION 3.3.2 ENV PHPSWOOLE_VERSION 5.1.1 RUN pecl install redis-$PHPREDIS_VERSION \ && pecl install xdebug-$PHPXDEBUG_VERSION \ && pecl install swoole-$PHPSWOOLE_VERSION \ && docker-php-ext-enable redis xdebug swoole # 安装 Composer ENV COMPOSER_HOME /root/composer RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer ENV PATH $COMPOSER_HOME/vendor/bin:$PATH # 安装composer并允许root用户运行 ENV COMPOSER_ALLOW_SUPERUSER=1 ENV COMPOSER_NO_INTERACTION=1 # 这句很重要,如果和你的nginx用户不同会导致你的服务起不来 RUN groupadd www && useradd -g www www CMD ["php-fpm"] WORKDIR /var/www/html
创建MySQL5.7的Dockerfile
FROM mysql:5.7 ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone #设置环境变量(root密码) #设置免密登录 ENV MYSQL_ROOT_PASSWORD=root ENV MYSQL_ALLOW_EMPTY_PASSWORD yes ENV LANG=C.UTF-8 EXPOSE 3307 COPY ./conf/my.cnf /etc/mysql/conf.d/ RUN chmod 644 /etc/mysql/conf.d/my.cnf RUN chmod 644 /home/kentrl/goserver/data/mysql80/conf/my.cnf
创建MySQL8.0的Dockerfile
FROM mysql:8.0 ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ENV MYSQL_ROOT_PASSWORD=root ENV MYSQL_ALLOW_EMPTY_PASSWORD yes ENV LANG=C.UTF-8 EXPOSE 3308 COPY ./conf/my.cnf /etc/mysql/conf.d/ RUN chmod 644 /etc/mysql/conf.d/my.cnf RUN chmod 644 /home/kentrl/goserver/data/mysql80/conf/my.cnf
执行docker compose命令安装服务:
docker-compose up redis docker-compose up msyql57 docker-compose up msyql80 docker-compose up php74 docker-compose up php80 docker-compose up nginx
有什么问题再问我。
测试成功:论坛相当扯淡,这个截图还提示识别到非法,没办法只得打码图片了........擦,辣鸡
个人搭建服务器,可以参考这个教程
感谢分享.
谢谢
Popular Ranking
Popular Events
多版本共存的好处是:在nginx的配置~/goserver/conf/nginx/conf.d/ 目录内加一个demo.conf 就可以直接跑起来项目了。
注意:仅修改版本号即可实现版本任意切换
先上图,真实可用可靠。
Linux安装多版本PHP共存,和多版本MySQL共存,和多版本Go共存
一:先安装Docker,如果不知道可以论坛点击搜索,有其他人帖子
二:使用我给的docker-compose和命令
测试成功:论坛相当扯淡,这个截图还提示识别到非法,没办法只得打码图片了........擦,辣鸡