My Blog

Just do it.

文章

16

标签

34

评论

2

文章目录

数据统计

成立

470天

文章

16篇

评论

2条

标签

34个

最近文章

Debian托管MES系统-总结篇

已跑通的“混合栈(Apache/Nginx)”整理

一,目录结构(示例)

mes/
├─ docker-compose.yml              # 编排入口:定义 c1/c2 的 DB、Web、网络、端口映射
├─ .env                            # 可选:集中放密码/端口等(compose 会自动读取)
│
├─ php-apache/                     # 客户1(Apache系)自建镜像
│  └─ Dockerfile                   # 基于 php:8.2-apache,安装 pdo_mysql、apcu、opcache 等
│
├─ php/                            # 客户2(Nginx+FPM系)自建镜像
│  └─ Dockerfile                   # 基于 php:8.2-fpm,安装 pdo_mysql、apcu、opcache 等
│
├─ nginx/
│  └─ default.conf                 # 客户2的 Nginx 站点配置(fastcgi_pass c2_php:9000)
│
└─ customers/
   ├─ customer1/
   │  └─ app/                      # 客户1代码目录(Apache)
   │     └─ index1.php             # 你的测试页(连 c1_db)
   └─ customer2/
      └─ app/                      # 客户2代码目录(Nginx+FPM)
         └─ index2.php             # 你的测试页(连 c2_db)

二,关键文件作用

docker-compose.yml

三,定义两套环境:

c1_apache + c1_db(Apache 栈)→ 对外 8081:80

c2_nginx + c2_php + c2_db(Nginx+FPM 栈)→ 对外 8082:80

volumes:(如 c1_db_data/c2_db_data)持久化 MariaDB 数据。

networks:(如 c1_net/c2_net)隔离各客户的内部通信

三,关于Dockerfile文件

php-apache/Dockerfile

基于 php:8.2-apache,安装 pdo_mysql mysqli zip intl gd apcu opcache,启用 rewrite 模块,国内镜像加速。

解决 Apache 项目 could not find driver 的问题。

php/Dockerfile

基于 php:8.2-fpm,安装同上扩展,国内镜像加速,给 Nginx + FPM 用。

三,default.conf配置文件

nginx/default.conf

指向客户2的 PHP-FPM:fastcgi_pass c2_php:9000;

root /var/www/html; 与 compose 挂载路径一致。

默认首页 index.php index.html,含基础安全规则(隐藏文件 deny)。

customers/customerX/app/放客户代码;

四,.htaccess配置文件

Apache 项目支持 .htaccess;Nginx 项目需在 default.conf 写好 rewrite。

五,关于.evn

.env(可选但推荐)

把密码、端口等环境变量集中管理(配合 compose 的 ${VAR} 用法)。

示例见下文。

建议的 .env 示例

端口

C1_HTTP_PORT=8081
C2_HTTP_PORT=8082

客户1数据库

C1_DB_ROOT=rootpass_c1
C1_DB_NAME=mesdb_c1
C1_DB_USER=mesuser_c1
C1_DB_PASS=mespass_c1

客户2数据库

C2_DB_ROOT=rootpass_c2
C2_DB_NAME=mesdb_c2
C2_DB_USER=mesuser_c2
C2_DB_PASS=mespass_c2

随后把 docker-compose.yml 中对应值换成 ${变量名} 即可(最小替换,不影响结构)。

常用命令速查

启动整套

docker compose up -d

只启/重启某个服务

docker compose up -d c2_nginx
docker compose restart c2_nginx

查看状态/端口

docker compose ps
docker ps --format 'table {{.Names}}\t{{.Ports}}'

查看日志

docker logs -f c2_nginx
docker logs -f c2_php
docker logs -f c1_apache
docker logs -f c1_db

进入容器

docker exec -it c2_php bash
docker exec -it c1_apache bash

六,关于新增客户3(最小步骤)

复制块:在 docker-compose.yml 里复制一套 c2_ 或 c1_ 服务块,改名为 c3_*(栈可自选 Apache 或 Nginx+FPM)。

改端口:如 8083:80。

改卷/网络名:新增 c3_db_data、c3_net。

建代码目录:customers/customer3/app/。

启动:

docker compose up -d c3_db c3_php c3_nginx # 或 c3_apache

七,备份与还原(数据库)

备份

docker exec c1_db mysqldump -uroot -p"$C1_DB_ROOT" --databases "$C1_DB_NAME" > c1_backup.sql

还原

docker exec -i c1_db mysql -uroot -p"$C1_DB_ROOT" < c1_backup.sql

c1_db_data/c2_db_data 是持久卷;也可以用 docker run --rm -v 卷名:/var/lib/mysql 做物理级打包。

八,轻量健康检查

MariaDB:在服务里加 healthcheck,比如 mysqladmin ping -h localhost。

Nginx/PHP:用 curl -f http://localhost/health 或 FPM ping。

小贴士与故障清单

8082 连接拒绝 → 多半是 c2_nginx 未启动或 fastcgi_pass 目标错(应为 c2_php:9000)。

PDO 驱动缺失 → Apache 项目务必使用 php-apache/Dockerfile 自建镜像(安装 pdo_mysql)。

拉取慢/失败 → Docker Hub 配镜像加速器;构建时已将 apt 源切到国内。

时区/时间 → 已统一 Asia/Shanghai,不要再用 PRC。

Debian托管MES系统-总结篇

发布于

September 18, 2025

分类

教程记录

版权协议

MIT

#教程
评论
😀

感谢支持!

微信二维码

请使用微信扫描二维码打赏。

支付宝二维码

请使用支付宝扫描二维码打赏。