文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-09-15 05:51

关注

前言

如果使用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# 安装ComposerRUN 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 -Fautostart=trueautorestart=truestartretries=3priority=1stdout_logfile=/var/log/php-fpm.logredirect_stderr=true[program:crond]command=/usr/sbin/crond -fautostart=trueautorestart=truestdout_logfile=/var/log/crond.logredirect_stderr=truepriority=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.dnetworks:  default:    external: true    name: frontend
第五步 构建镜像和容器:
docker pull php:7.4-fpm-alpine
docker network create frontend
docker-compose up -d --build

#同步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

部署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/localtimeEXPOSE 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

 验证

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

大功告成!

来源地址:https://blog.csdn.net/Enjun97/article/details/132364290

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯