Docker部署CRMEB多店版再优化

devtools/2025/2/21 15:27:41/

原部署方案在容器中包含了nginx,这个是不必须的,可以拿掉。现优化如下:

Dockerfile内容:

去掉了nginx内容。

# 使用官方的Ubuntu 24.04镜像作为基础镜像
FROM ubuntu:24.04# 设置环境变量以避免交互式配置工具
ENV DEBIAN_FRONTEND=noninteractive# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \echo "Asia/Shanghai" > /etc/timezoneRUN mkdir -p /usr/src/swoole
COPY swoole-src/swoole-src-4.8.13 /usr/src/swoole# 更新包列表并安装必要的软件包
RUN apt-get update && \apt-get install -y software-properties-common ca-certificates supervisor && \add-apt-repository ppa:ondrej/php && \apt-get update && \apt-get install -y \php7.4 \php7.4-cli \php7.4-fpm \php7.4-dev \php7.4-bcmath \php7.4-soap \php7.4-intl \php7.4-readline \php7.4-ldap \php7.4-msgpack \        php7.4-igbinary \php7.4-mysql \php7.4-pgsql \php7.4-gd \php7.4-imagick \php7.4-curl \php7.4-mbstring \php7.4-xml \php7.4-zip \php7.4-redis \php7.4-memcached \php7.4-amqp \git \unzip \curl \openssl \libssl-dev \libcurl4-openssl-dev \&& cd /usr/src/swoole \&& phpize \&& ./configure --enable-openssl --enable-sockets --enable-http2 --enable-swoole-json --enable-swoole-curl  \&& make -j$(nproc) \&& make install \&& echo "extension=swoole.so" > /etc/php/7.4/mods-available/swoole.ini \&& phpenmod swoole \&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \&& apt-get -y autoremove \&& apt-get clean \&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/src/swooleCOPY swoole_loader74.so /usr/lib/php/20190902
RUN echo "extension=swoole_loader74.so" > /etc/php/7.4/mods-available/swoole_loader.ini \&& phpenmod swoole_loader # 确保目录存在
RUN mkdir -p /run/php \&& chown -R www-data:www-data /run/php# 设置工作目录
WORKDIR /var/www/html# 设置权限
RUN chown -R www-data:www-data /var/www/html# 配置 Supervisor
COPY supervisord.conf /etc/supervisord.conf# 暴露CRMEB的端口
EXPOSE 20699# 启动 Supervisor
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]

supervisord.conf内容:

同样去掉了nginx的内容。

[supervisord]
nodaemon=true
logfile=/var/log/nginx/supervisord.log
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)[unix_http_server]
file=/var/run/supervisor.sock   ; (the path to the socket file)
chmod=0700                       ; sockef file mode (default 0700)[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface  [program:crmeb-queue]
command=/usr/bin/php7.4 /var/www/html/think queue:listen --tries=2
autostart=true
autorestart=true
stdout_logfile=/var/log/nginx/crmeb-queue.stdout.log
stderr_logfile=/var/log/nginx/crmeb-queue.stderr.log[program:crmeb-swoole]
command=/usr/bin/php7.4 /var/www/html/think swoole
autostart=true
autorestart=true
stdout_logfile=/var/log/nginx/crmeb-swoole.stdout.log
stderr_logfile=/var/log/nginx/crmeb-swoole.stderr.log

swoole的源代码需要准备好,解压到同级目录,注意调整目录结构。

swoole_loader74.so同样放在同级目录下。

编译镜像:

docker build -t crmeb_multi/PHP74:latest .

创建容器

docker run -itd --name=crmeb-multi  -v /var/www/CRMEB_MULTI_v3.1.1:/var/www/html -v /data/log/crmeb_multi:/var/log/nginx -p 20699:20699 crmeb_multi/PHP74:latest

下面配置宿主机的nginx,创建一个站点。

server {listen       80;server_name  test.myweb.net;root /data/www/crmeb_multi/public;index index.php;charset utf-8;add_header X-Frame-Options "SAMEORIGIN";add_header X-Content-Type-Options "nosniff";#access_log  /var/log/nginx/host.access.log  main;# 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;}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##PROXY-START/
location  ~* \.(php|jsp|cgi|asp|aspx)$
{proxy_pass http://127.0.0.1:20699;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header REMOTE-HOST $remote_addr;
}
location /
{if (!-e $request_filename) {proxy_pass http://127.0.0.1:20699;}proxy_http_version 1.1;proxy_read_timeout 360s;   proxy_redirect off; proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header REMOTE-HOST $remote_addr;add_header X-Cache $upstream_cache_status;#Set Nginx Cacheadd_header Cache-Control no-cache;expires 12h;
}
#PROXY-END/# deny access to .htaccess files, if Apache's document root# concurs with nginx's one#location ~ /\.(?!well-know).* {deny  all;}#HTTPS的默认访问端口443。#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。#listen 443 ssl;#填写证书文件绝对路径#ssl_certificate cert/test.myweb.net.pem;#填写证书私钥文件绝对路径#ssl_certificate_key cert/test.myweb.net.key;#ssl_session_cache shared:SSL:1m;#ssl_session_timeout 5m;#自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)#TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;#ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;#表示优先使用服务端加密套件。默认开启#ssl_prefer_server_ciphers on;}

最后讲两点:

1、容器中crmeb启动了两个服务,一个是swoole,一个是queue.

这里主要是用到了swoole的服务,端口是20699,crmeb版本不同端口号也不一样,需要注意看部署的文档。

容器端口暴露出来后就可以在nginx中做反向代理。

2、crmeb项目目录要挂载到容器中,那么nginx的主目录就应当是项目目录中的public目录,这一点不要搞错了。不然容器是找不到你传进来的文件路径的。

-结束-


http://www.ppmy.cn/devtools/160711.html

相关文章

【分布式理论16】分布式调度2:资源划分和调度策略

文章目录 一、资源划分:Linux容器的应用1. LXC 的 Namespace 机制:资源隔离2. LXC 的 CGroup 机制:资源管理 二、任务与资源如何匹配1. 任务队列与资源池2. 资源调度策略 在分布式系统中,资源的有效分配和调度是确保计算任务高效执…

分布式光纤声波振动技术在钻井泄漏检测中的应用

在石油天然气的钻井作业中,及时发现并定位泄漏点对于保障开采安全、降低环境污染以及避免经济损失至关重要。传统的泄漏检测方法往往存在局限性,而分布式光纤声波振动技术凭借其独特的优势,正逐渐成为钻井过程中寻找泄漏的有力工具。 技术原理…

深度学习工厂的蓝图:拆解CUDA驱动、PyTorch与OpenCV的依赖关系

想象一下,你正在建造一座 深度学习工厂,这座工厂专门用于高效处理深度学习任务(如训练神经网络)和计算机视觉任务(如图像处理)。为了让工厂顺利运转,你需要搭建基础设施、安装设备、设置生产线&…

FPGA与传统硬件开发:开发流程与效率对比

随着科技的不断进步,硬件开发已经不再是一个单一的领域。在众多硬件开发平台中,FPGA(现场可编程门阵列)因其灵活性、可重构性和高性能,逐渐成为电子工程师和硬件开发者的首选工具之一。然而,FPGA开发与传统…

Modbus协议基础

文章目录 1、Modbus协议基础知识1.1、Modbus存储范围1.2、Modbus协议功能码说明1.3、Modbus协议分类及测试 2、ModbusRTU通信报文分析2.1、modbusRTU通信格式 3、Modbus通信库开发4、通信库测试 1、Modbus协议基础知识 1.1、Modbus存储范围 modbus规定,每个存储区…

Xen Center虚拟机Centos 7.x磁盘扩容

文章目录 概要XenCenter虚拟机操作系统命令概览扩容步骤 概要 适用于Centos 7.x系统磁盘扩容,不区分是否虚拟机或者实体系统 XenCenter 使用Xen Center客户端给对应的虚拟机添加一块磁盘后,启动虚拟机系统在系统中进行扩容 虚拟机操作系统 Centos 7.…

智信BI:解决Power BI全面兼容问题的新选择

随着企业数据量的持续增长,数据可视化的重要性日益凸显。智信BI作为一套现代化的数据可视化平台,专注于帮助企业应对复杂的数据分析挑战。该平台支持多种报表形式,包括Power BI报表、格式化报表及Office报表,满足不同用户的多样化…

企业存储系统

一、概述 数字经济 人类通过大数据(数字化的知识与信息)的识别—选择—过滤—存储—使用,引导、实现资源的快速优化配置与再生,实现经济高质量发展的经济形态。 产业互联网推动发展 企业开始进行数字化转型,将传统…