Docker部署php运行环境(php-fpm+nginx)

这篇具有很好参考价值的文章主要介绍了Docker部署php运行环境(php-fpm+nginx)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

如果使用docker去部署一套php的运行环境,我们需要构建出nginx、php-fpm两个容器,nginx通过fast_cgi协议去转发php-fpm中的端口,从而实现web server的搭建,接下来以php的laravel框架为演示例子。

部署php-fpm

第一步 编写php-fpm镜像的Dockerfile:

./Dockerfile

#根据你自身业务需求来选择官方的php基础镜像
FROM php:7.4-fpm-alpine

# 设置时区
ENV TZ Asia/Shanghai

# 创建supervisor进程管理器相关数据存在的文件夹
RUN mkdir -p "/var/log/supervisor" && mkdir -p "/var/run"

# 设置源,提高下载效率
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories

# 安装系统依赖
RUN apk update && apk --no-cache add \
    autoconf \
    g++ \
    make \
    openssl-dev \
    libzip-dev \
    unzip \
    tzdata \
    supervisor

# 安装Redis扩展
RUN pecl install redis && docker-php-ext-enable redis

# 安装PDO MySQL扩展
RUN docker-php-ext-install pdo_mysql && docker-php-ext-enable pdo_mysql

# 安装opcache扩展
RUN docker-php-ext-install opcache && docker-php-ext-enable opcache

# 安装Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

#工作目录
WORKDIR /app

# 定义容器启动时运行的命令
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]
第二步 配置Crontab定时任务:

./cronJob

* * * * * /usr/local/bin/php /app/www/laravel8/artisan schedule:run >> /var/log/laravel8-crontab-task.log 2>&1
第三步 配置supervisor进程管理器:

./supervisord/supervisord.conf

; supervisor config file

[unix_http_server]
file=/var/run/supervisor.sock   ; (the path to the socket file)
chmod=0700                       ; sockef file mode (default 0700)

[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor            ; ('AUTO' child log dir, default $TEMP)

; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket

; The [include] section can just contain the "files" setting.  This
; setting can list multiple files (separated by whitespace or
; newlines).  It can also contain wildcards.  The filenames are
; interpreted as relative to this file.  Included files *cannot*
; include files themselves.

[include]
files = /etc/supervisor/conf.d/*.conf

supervisord/conf.d/supervisord.conf

[supervisord]
nodaemon=true

[program:php-fpm]
command=/usr/local/sbin/php-fpm -F
autostart=true
autorestart=true
startretries=3
priority=1
stdout_logfile=/var/log/php-fpm.log
redirect_stderr=true

[program:crond]
command=/usr/sbin/crond -f
autostart=true
autorestart=true
stdout_logfile=/var/log/crond.log
redirect_stderr=true
priority=2
第四步 编写docker-compose.yml:

docker-compose.yml

version: '3.8'

services:
  php7.4fpm:
    build:
      dockerfile: Dockerfile
    image: php7.4fpm
    container_name: php7.4fpm
    restart: always
    volumes:

      # 映射应用程序目录
      - /Users/king/Code/laravel8:/app/www/laravel8

      # 映射Crontab定时任务配置
      - ./cronJob:/etc/crontabs/root

      # 映射supervisor配置文件
      - ./supervisord:/etc/supervisor

      # 映射php扩展配置 ps:首次构建时需要注释,否则容器内该目录会为空
      #- ./extensions:/usr/local/etc/php/conf.d


      # 映射fpm配置文件 ps:首次构建时需要注释,否则容器内该目录会为空
      #- ./fpm-conf:/usr/local/etc/php-fpm.d
networks:
  default:
    external: true
    name: frontend
第五步 构建镜像和容器:
  • 拉去基础镜像
docker pull php:7.4-fpm-alpine
  • 创建网络
docker network create frontend
  • 容器编排
docker-compose up -d --build
  • 查看容器状态

docker安装php运行环境,php,docker,docker,php,nginx,php-fpm

  • 同步文件

#同步php扩展配置文件夹,后续可以直接在宿主机变更相关参数配置
docker cp php7.4fpm:/usr/local/etc/php/conf.d ./extensions

#同步fpm配置文件夹,后续可以直接在宿主机变更相关参数配置
docker cp php7.4fpm:/usr/local/etc/php-fpm.d ./fpm-conf
  • 查看当前目录结构

docker安装php运行环境,php,docker,docker,php,nginx,php-fpm

部署nginx

第一步 编写Dockerfile:

./Dockerfile

FROM nginx:alpine

# 安装时区工具
RUN set -ex \
    && sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
    && apk --update add tzdata \
    && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

EXPOSE 80 443

# 定义容器启动时运行的命令
CMD ["nginx", "-g", "daemon off;"]
第二步 编写配置文件以及站点vhost:

./nginx.conf

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}


http {

    include       /etc/nginx/mime.types;

    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    keepalive_timeout  65;

    #压缩配置
    gzip on;
    gzip_comp_level 5;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_proxied any;
    gzip_vary on;
    gzip_types
      application/javascript
      application/x-javascript
      text/javascript
      text/css
      text/xml
      application/xhtml+xml
      application/xml
      application/atom+xml
      application/rdf+xml
      application/rss+xml
      application/geo+json
      application/json
      application/ld+json
      application/manifest+json
      application/x-web-app-manifest+json
      image/svg+xml
      text/x-cross-domain-policy;
    gzip_static on;  
    gzip_disable "MSIE [1-6]\.";

    include /etc/nginx/conf.d/*.conf;
}

./conf.d/default.conf

server {

    listen 80;

    server_name localhost;

    root /app/www/laravel8/public;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass php7.4fpm:9000;  # PHP-FPM 容器的地址和端口
        fastcgi_index index.php;
    }

    location ~ /\.ht {
        deny all;
    }

    error_log  /var/log/nginx/error-php7.4fpm.log;
    access_log /var/log/nginx/access-php7.4fpm.log;
}
第三步 编写docker-compose.yml:

./docker-compose.yml

version: '3.8'

services:
  nginx:
    build:
      dockerfile: Dockerfile
    image: nginx
    container_name: nginx
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./conf.d:/etc/nginx/conf.d
      - ./log:/var/log/nginx
    restart: always
    ports:
      - "80:80"
networks:
  default:
    external: true
    name: frontend
第四步 构建镜像和容器:
  • 拉去基础镜像
docker pull nginx:alpine
  • 容器编排
docker-compose up -d --build
  •  查看容器状态

docker安装php运行环境,php,docker,docker,php,nginx,php-fpm

  • 目录结构

docker安装php运行环境,php,docker,docker,php,nginx,php-fpm

 验证

如果以上步骤顺利操作,浏览器访问 http://127.0.0.1或http://localhost看响应结果。

大功告成!文章来源地址https://www.toymoban.com/news/detail-739387.html

到了这里,关于Docker部署php运行环境(php-fpm+nginx)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux系统下配置Nginx使部分URL使用多套自定义的PHP-FPM配置

    1. Tcp默认的9000端口通信: php-fpm配置:listen = 127.0.0.1 与nginx进程通信:fastcgi_pass 127.0.0.1:9000; 优点: 使用网络传输,可以跨服务器。 TCP通信有一些校验机制,具有更高的稳定性。 缺点: 性能略微比socket差。 2. Unix Socket(套接字)通信: php-fpm配置 :listen = /tmp/php-cgi.sock 与

    2024年02月08日
    浏览(18)
  • PHP-FPM与Nginx通信报 502 Bad Gateway或504 Gateway Timeout终极解决方案(适用于PHP执行耗时任务情况下的报错)

    适用于常规请求都没问题,但是执行某些php脚本需要超过一分钟的情况下的502/504,并不是任何请求都502/504的情况(这说明php-fpm或者nginx配置错误)。 执行脚本时间太长,期间php没有返回任何的数据。 php-fpm超时,nginx没超时 。nginx认为php-fpm罢工了,然后抛出了异常。 执行脚

    2024年02月08日
    浏览(12)
  • docker 部署 nginx+php+mysql 环境

    记录一下docker部署web服务器流程。nginx,mysql,php不同的版本配置内容可能会不同。 docker常用命令 目录结构 创建目录 运行PHP容器 php容器内容目录结构如下: PHP5.4升级后,php.ini-dist不见了,出现了php.ini-developmen和php.ini-production。 php.ini-development 对应于 php.ini-dist,适合开发测

    2024年04月24日
    浏览(14)
  • Docker部署nginx+php环境,简单可用!

    第一步: 安装Docker 访问下面地址,根据你的需要下载安装docker运行环境。 下载docker desktop https://www.docker.com/ 如果你是Windows、macOS(Intel/M1)、Linux桌面OS,都可以下载到对应版本进行安装,相对命令行方式,更加简单方便。 安装完成后,运行docker desktop,显示如下界面: 在任

    2024年02月07日
    浏览(14)
  • Docker的配置和部署,并搭建php和nginx环境

    服务器环境:CentOS 7.6 说下体验: 通过安装进度还是有些报错出现的,但是一向“兼容不错的宝塔”还是对他抱有一线希望。 最后还是安装成功了。  装好了,如何使用? Docker 是基于命令行使用的,那现在通过一些实际问题去使用一些命令! 1.首先查看是否安装成功。通过

    2024年02月09日
    浏览(17)
  • php-fpm设置开机启动

    看了nginx和redis的shell启动脚本,发现服务的开启和关闭其实就是操作服务进程号,那么给php服务也写个shell脚本,也能实现service start 和 stop   进入Linux服务的初始化目录 创建phpfpmd进程脚本(进程控制脚本规范上默认都加后缀d)  第一行,说明shell的运行环境,有些服务器默

    2023年04月18日
    浏览(15)
  • php-fpm未授权访问漏洞

    目录 一、产生原因 二、利用条件 三、过程原理 四、复现过程 php-fpm配置不当,fastcgi_pass这里配置了0.0.0.0,将fastcgi接口暴露在公网,任何人都可以利用接口对php-fpm发送fastcgi协议数据,更改php.ini配置文件,导致远程代码执行 此漏洞属于配置不当,因此影响所有php版本 php-f

    2024年02月09日
    浏览(12)
  • Docker Ubuntu php nginx mysql redis 开发环境部署教程

    点击: ubuntu 22.04 配置多版本 php nginx mysql redis 超简单教程

    2024年02月08日
    浏览(17)
  • linux下查看php进程,开启php-fpm&杀死php进程

    1、查看php进程 出现如图结果说明未开启 2、查看php安装路径 3、开启php-fpm 再次查看ps -ef |grep php 以树状图的方式展现php进程 4、关闭php-fpm

    2024年02月11日
    浏览(15)
  • 【PHP面试题81】php-fpm是什么?它和PHP有什么关系

    本文已收录于PHP全栈系列专栏:PHP面试专区。做全网最全最有营养的PHP面试大全。 计划将全覆盖PHP开发领域所有的面试题, 对标资深工程师/架构师序列 ,欢迎大家提前关注锁定。 php-fpm(PHP FastCGI Process Manager)是PHP的一个进程管理器,它作为FastCGI进程管理器来运行,负责管

    2024年02月11日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包