k8s docker 中部署think php 并搭建php websocket
不得不说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'
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
3.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;
}
}
k8s docker 中部署think php 并搭建php websocket的更多相关文章
- 在docker中部署centos7镜像
本篇文章参考自: https://www.cnblogs.com/linjj/p/5606911.html https://blog.csdn.net/u012767761/article/detai ...
- docker 中部署一个springBoot项目
docker 中部署一个springBoot项目 (1)介绍 springBoot项目 1.项目结构 2.pom.xml <?xml version="1.0" encodi ...
- 如果在docker中部署tomcat,并且部署java应用程序
1.先说如何在docker中部署tomcat 第一步:root用户登录在系统根目录下创建文件夹tomcat7,命令如:mkdir tomcat7,并且切换到该目录下:cd tomcat7: 第二步:创 ...
- 在Docker中部署GreatSQL并构建MGR集群
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 为了方面社区用户体验GreatSQL,我们同时还提供Docker镜像,本文详细介绍如何在Docker中部署GreatSQL ...
- ubuntu18 docker中部署ELK
ELK是ElasticSearch.Logstash.Kibana的简称,一般用于日志系统,从日志收集,日志转储,日志展示等入手,用以提供简洁高效的日志处理机制. 鉴于没有额外的机器,这里就用dock ...
- 记一次Docker中部署Asp.Net Core 3.0的踩坑过程
最近公司打算重构目前直销报单系统到微信小程序中,目前的系统只能在PC上面使用,这两年也搞过App端,但是由于人员流动和公司架构调整最后都不了了之,只留下一堆写了一半的接口.以前的接口依然是使用Asp. ...
- docker中部署django项目~~Dockfile方式和compose方式
1. 背景: 本机win10上,后端django框架代码与前端vue框架代码联调通过. 2. 目的: 在centos7系统服务器上使用docker容器部署该项目. 3. 方案一:仅使用基 ...
- docker安装部署、fastDFS文件服务器搭建与springboot项目接口
一.docker安装部署 1.更新yum包:sudo yum update 2.安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动 ...
- Docker中部署Kubernetes
Kubernetes为Google开源的容器管理框架,提供了Docker容器的夸主机.集群管理.容器部署.高可用.弹性伸缩等一系列功能:Kubernetes的设计目标包括使容器集群任意时刻都处于用户期 ...
随机推荐
- DevEco Device Tool 3.0 Release 新版本发布,支持多人共享开发
DevEco Device Tool 是面向智能设备开发者提供的一站式集成开发环境,支持 HarmonyOS Connect 的组件按需定制,支持代码编辑.编译.烧录和调试.性能监测等功能,支持 C/ ...
- (stm32f103学习总结)—DS18B20
一. DS18B20简介 DS18B20数字温度传感器接线方便,封装后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式.主要根据应用场合的不同而改变其外观.封装后的DS18B20可用于电缆 ...
- PID参数整定
PID参数整定方法很多,常见的工程整定方法有临界比例度法.衰减曲线法和经验法.云南昌晖仪表制造有限公司以图文形式介绍以临界比例度法和衰减曲线法整定调节器PID参数方法.临界比例度法一个调节系统,在阶跃 ...
- 写了一个web os脚手架
预览地址在这里:http://thx.github.io/magix-os/项目地址在这里:https://github.com/thx/magix-os 介绍下目录结构 核心目录cores主要是构成 ...
- WordPress 网站开发“微信小程序“实战(三)
本文是"WordPress 开发微信小程序"系列的第三篇,本文记录的是开发"DeveWork+"小程序1.2 版本的过程.建议先看完第一篇.第二篇再来阅读本文. ...
- PC端免费高效的同声翻译
疫情期间上网课,对于英语听力较差或者需要观看英文视频,但实际上并没有双语字幕的这种情况下需要找一个实时的翻译工具.虽然说手机上此类软件比较多,但电脑上没有特别合适的应用可以做为一个免费实时翻译.哪怕是 ...
- ccf颁奖晚会
感想: 首先,十分感谢学校给我们参加比赛的机会,给予我们这次难能可贵的学习机会,第一次在这么大型的赛场中展现自己,我们也不免有些紧张.从最开始在线上进行模型训练,到我们不远千里在江苏进行场地的勘察,到 ...
- RestTemplate-HTTP工具
RestTemplate 是由 Spring 提供的一个 HTTP 请求工具.在上文的案例中,开发者也可以不使用 RestTemplate ,使用 Java 自带的 HttpUrlConnection ...
- java中的排序除了冒泡以来, 再给出一种方法, 举例说明
9.5 排序: 有一种排序的方法,非常好理解,详见本题的步骤,先找出最大值和最小值,把最小值打印出来后,把它存在另一个数组b当中,再删除此最小值,之后再来一次找出最小值,打印出最小值以后,再把它存 ...
- Taro下拉刷新,上拉加载更多
1.引入插件 import Taro, { Component } from '@tarojs/taro' import { View, Text, ScrollView } from '@taroj ...