• docker nginx镜像+phpfpm 镜像 组合配置 搭建 PHP+nginx 环境


    前言


    在以往的容器环境部署中 运行环境 我们通常把 类似 apache nginx php 等 打包在一个镜像中 起一个容器。 这样做的好处是 方便 简单。 不便的地方是 如果PHP 需要扩展新的 相关组件就麻烦了。例如笔者之前用的 apache+php 组合在一个镜像中 需要添加 php-redis 扩展,就很麻烦 因为这个扩展需要重新编译(常见的扩展只需要添加 或者安装 )。 如果编译的化 时间久依赖多 问题多。

    并且 nginx php-fpm 相关软件都是 独立开源软件 官方并不提供完整组合 套件 ; 放在一个容器中 拼凑起来 对新人 不太方便; 今天通过 摸索 可以实现 通过组合来搭建 php 运行环境。

    php

    php 官方镜像构建

    #使用国内网易镜像可以加快构建速度
    FROM hub.c.163.com/library/php:fpm-alpine
    #FROM php:fpm-alpine
    
    MAINTAINER Alu alu@xdreport.com
    
    #国内repo源,让本地构建速度更快。
    RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
    
    #安装GD依赖库
    RUN apk add --no-cache --virtual .build-deps 
                    freetype-dev 
                    libjpeg-turbo-dev 
                    libpng-dev 
                    libmcrypt-dev
    
    #添加php源码中的扩展,添加gd,mysqli,pdo-mysql,opcache,gettext,mcrypt等扩展
    RUN set -ex 
            && docker-php-ext-configure gd 
                    --with-freetype-dir=/usr/include/freetype2/freetype 
                    --with-jpeg-dir=/usr/include 
                    --with-png-dir=/usr/include 
            && docker-php-ext-install gd bcmath zip opcache iconv mcrypt pdo pdo_mysql mysqli
    
    #redis属于pecl扩展,需要使用pecl命令来安装,同时需要添加依赖的库
    RUN apk add --no-cache --virtual .phpize-deps $PHPIZE_DEPS 
            && pecl install redis-3.1.2 
            && docker-php-ext-enable redis 
            && apk del .phpize-deps
    
    

    安装redis 扩展

    curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/3.1.3.tar.gz
    tar xfz /tmp/redis.tar.gz
    rm -r /tmp/redis.tar.gz
    mkdir -p /usr/src/php/ext
    mv phpredis-3.1.3 /usr/src/php/ext/redis
    docker-php-ext-install redis
    
    
    nginx

    # 习惯nginx alpine 这个版本 因为小 7M
    docker pull nginx:alpine
    
    nginx 配置
    • /etc/nginx/conf.d/default.conf
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ .php$ {
            #root           /usr/share/nginx/html;
            root           /var/www/html;   # `这个配置 用 php-fmp 镜像 容器中的 PHP 根目录地址  切记这个不是 nginx web根目录地址 这个问题折腾了我好久`
            fastcgi_pass   phpfpm:9000;  # 修改这个地址为 phpfpm 容器的名称  我的容器名称就是 phpfmp
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    
    

    参考完整 default.conf

    server {
        listen       80;
        server_name  localhost;
    
        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
        client_max_body_size 4080m;
        send_timeout    6000;
        fastcgi_connect_timeout 6000;
        fastcgi_send_timeout 6000;
        fastcgi_read_timeout 6000;
    
        location / {
            #try_files $uri $uri/ /index.php$uri?$query_string;
            root   /usr/share/nginx/html;
            index  index.html index.php index.htm;
            if ( -f $request_filename) {
                   break;
                }
            if ( !-e $request_filename) {
                    rewrite ^(.*)$ /index.php/$1 last;
                    break;
            }
        }
    
        #error_page  404              /404.html;
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ .php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
    
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ .+.php($|/) {
            root           /var/www/html/public;
            fastcgi_pass   phpfmp:9000;
            fastcgi_index  index.php;
            #加载Nginx默认"服务器环境变量"配置
            include        fastcgi.conf;
    
            #设置PATH_INFO并改写SCRIPT_FILENAME,SCRIPT_NAME服务器环境变量
            set $fastcgi_script_name2 $fastcgi_script_name;
            if ($fastcgi_script_name ~ "^(.+.php)(/.+)$") {
                set $fastcgi_script_name2 $1;
                set $path_info $2;
            }
            fastcgi_param   PATH_INFO $path_info;
    
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /.ht {
        #    deny  all;
        #}
    }
    
    

    大文件配置参考

    nginx的修改        /etc/nginx/conf.d/default.conf  
            send_timeout    60;
            fastcgi_connect_timeout 300;
            fastcgi_send_timeout 300;
            fastcgi_read_timeout 300;
            client_max_body_size 30m;
    
        php的修改  /usr/local/etc/php/ 中的配置文件 复制 为php.ini
            upload_max_filesize
            post_max_size
            max_input_time
            max_execution_time
    
        php-fpm注意参数
            request_terminate_timeout
            request_slowlog_timeout
            这两个参数如果设置过小的话会导致文件传输了一部分后连接关闭。
    
    
    组合(rancher)
    phpfpm:
      tty: true
      image: hub.03in.com:5002/ranmufei/phpalpine-redis:v1
      volumes:
      - /home/www/nginx4/html:/var/www/html
      stdin_open: true
    nginx4:
      ports:
      - 7575:80/tcp
      tty: true
      image: nginx:alpine
      links:
      - phpfpm:phpfmp
      volumes:
      - /home/www/nginx4/html:/usr/share/nginx/html
      - /home/www/nginx4/conf/default.conf:/etc/nginx/conf.d/default.conf
      - /home/www/nginx4/conf/nginx.conf:/etc/nginx/nginx.conf
      stdin_open: true
    
    
  • 相关阅读:
    一种在【微服务体系】下的【参数配置神器】
    阅读源代码之“那是我的青春”
    我谈防御式编程
    博客开篇
    redis-sentinel-cluster-codis
    redis-复制
    redis-持久化
    redis-事件
    圆角矩形精度条
    小程序---canvas画图,生成分享图片,画图文字换行
  • 原文地址:https://www.cnblogs.com/freefei/p/7904165.html
Copyright © 2020-2023  润新知