侧边栏壁纸
博主头像
往事随风博主等级

当你感到悲哀痛苦时,最好是去学些什么东西。学习会使你永远立于不败之地!

  • 累计撰写 20 篇文章
  • 累计创建 6 个标签
  • 累计收到 2 条评论
标签搜索

目 录CONTENT

文章目录

k8s docker 中部署think php 并搭建php websocket

往事随风
2024-01-25 / 0 评论 / 0 点赞 / 1,353 阅读 / 899 字 / 正在检测是否收录...

不得不说php 对云原生有点不够友好,之前用java .net打包docker镜像 一下就ok了,php倒腾了好久才算部署成功。

场景:使用阿里云ack(k8s) 部署采用thinkPHP框架的php项目,并执行php think worker:server -d 开启websocket 服务 ,可以使用一个docker 镜像就能部署好。

php 主要使用webdevops/php-nginx:7.4镜像 部署,这个镜像自带nginx和php环境

dokerfile 放在php项目根目录下,dokerfile 文件内容

FROM webdevops/php-nginx:7.4
EXPOSE 2346
 
ADD  ./containerConfig/install-php-extensions /usr/local/bin/
RUN chmod +x /usr/local/bin/install-php-extensions && sync && \
    install-php-extensions bz2 bcmath \
        calendar \
        dba \
        exif \
        gettext gd \
        imagick \
        mysqli mcrypt \
        opcache \
        pcntl pdo_mysql \
        redis \
        shmop sysvmsg sysvsem sysvshm sockets soap \
        xdebug \
        zip
 
COPY . /app
RUN /bin/bash -c 'cp /app/containerConfig/vhost.conf /opt/docker/etc/nginx/vhost.conf'
RUN /bin/bash -c 'cp /app/containerConfig/10-init.sh /opt/docker/bin/service.d/supervisor.d//10-init.sh'

命令注解

  1. ADD ./containerConfig/install-php-extensions /usr/local/bin/ 是把根目录下的containerConfig(自己添加的文件夹放一些容器配置文件) 文件夹下的install-php-extensions(从 install-php-extensions 下载到本地的) 文件添加到容器中的/usr/local/bin/ 目录下

  2. 以下的命令是添加php用到的扩展

RUN chmod +x /usr/local/bin/install-php-extensions && sync && \
    install-php-extensions bz2 bcmath \
        calendar \
        dba \
        exif \
        gettext gd \
        imagick \
        mysqli mcrypt \
        opcache \
        pcntl pdo_mysql \
        redis \
        shmop sysvmsg sysvsem sysvshm sockets soap \
        xdebug \
        zip
  1. COPY . /app 把php项目拷贝到容器的/app 文件夹下

4.RUN /bin/bash -c ‘cp /app/containerConfig/vhost.conf /opt/docker/etc/nginx/vhost.conf’ 运行容器时将容器内的/app/containerConfig/vhost.conf 覆盖到容器中/opt/docker/etc/nginx/vhost.conf 文件,这个vhost.conf主要是容器内的nginx 配置,后面会放vhost.conf的内容

5.RUN /bin/bash -c ‘cp /app/containerConfig/10-init.sh /opt/docker/bin/service.d/supervisor.d//10-init.sh’ 运行容器时将容器内的/app/containerConfig/10-init.sh 覆盖到容器中/opt/docker/bin/service.d/supervisor.d//10-init.sh 文件,这一步主要时配置容器启动后要执行的命令,单独启动websocket 服务时 需要用到的,启动websocket这个地方被坑了好久才找到解决方法。

打包镜像并启动容器

运行 docker build -t phpDemo:v1 . 命令打包成镜像,运行 docker run -p 8086:80 -p 2346:2346 --name phpDemo -d phpDemo:v1 命令启动容器 ,2346 端口即为websocket 对外暴露的端口

containerConfig 文件夹内容

containerConfig文件夹下包含 10-init.sh,install-php-extensions,vhost.conf 3个文件。

-----10-init.sh 文件内容: 主要作用是等容器启动成功后,执行一些自定义命令

# placeholder
cd /app && php think worker:server -d
-----install-php-extensions 文件可以从 https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions 处下载到本地保存到 containerConfig 文件夹下

-----vhost.conf 主要用来配置nginx, 可以自行配置,一下是我的配置 fastcgi_pass php 这个地方是写死的不能更改

server {
    listen 80 default_server;
    server_name  _ *.vm docker;
    root "/app/public";
    index index.php index.html;
        location / {
            if (!-e $request_filename){
                rewrite  ^(.*)$  /index.php?s=/$1  last;
            }
        }
 
       add_header Access-Control-Allow-Origin *;
       add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS,PUT,DELETE,HEAD';
       add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization'; 
        location ~ \.php(.*)$ {
            fastcgi_pass   php;
            fastcgi_index  index.php;
            fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  PATH_INFO  $fastcgi_path_info;
            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
            include        fastcgi_params;
        }
}

原文链接:https://www.cnblogs.com/lkd3063601/p/16293319.html

0

评论区