Personal Management System 项目 Docker 部署指南
2025-07-09 07:17:39作者:袁立春Spencer
项目概述
Personal Management System (PMS) 是一个基于容器的个人管理系统,采用现代化的技术栈构建,包括 PHP、Nginx、MariaDB 等组件。本文将详细解析其 Docker Compose 配置文件,帮助开发者理解系统架构并完成部署。
核心服务解析
1. 数据库服务 (MariaDB)
pms-database-mariadb:
image: mariadb:11.5.2
container_name: pms-database-mariadb
hostname: pms-database-mariadb
restart: always
tty: true
environment:
- MYSQL_DATABASE=pms
- MYSQL_ROOT_PASSWORD=password
volumes:
- database:/var/lib/mysql
技术要点:
- 使用 MariaDB 11.5.2 官方镜像
- 自动创建名为
pms
的数据库 - 数据持久化通过命名卷
database
实现 - 设置 root 密码为
password
(生产环境应修改为更安全的密码)
2. Web 服务 (Nginx + PHP-FPM)
Nginx 服务
pms-nginx:
image: yobasystems/alpine-nginx:stable
container_name: pms-nginx
hostname: pms-nginx
working_dir: /application
restart: always
tty: true
volumes:
- .:/application
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
ports:
- "8002:80"
技术要点:
- 基于 Alpine Linux 的轻量级 Nginx 镜像
- 映射主机 8002 端口到容器 80 端口
- 挂载自定义 Nginx 配置文件
- 项目代码挂载到
/application
目录
PHP-FPM 服务
pms-php-fpm:
build: ./docker/php-fpm
container_name: pms-php-fpm
hostname: pms-php-fpm
entrypoint: sh -c "/usr/local/bin/docker-php-entrypoint && php-fpm -D && ./docker/php-fpm/entrypoint.bash && nano /tmp/keep"
working_dir: /application
restart: always
tty: true
depends_on:
- pms-database-mariadb
volumes:
- .:/application
技术要点:
- 使用自定义构建的 PHP-FPM 镜像
- 复杂的 entrypoint 确保服务正确启动
- 显式依赖数据库服务
- 同样挂载项目代码到
/application
目录
3. 辅助服务
数据库管理工具 (Adminer)
pms-adminer:
container_name: pms-adminer
hostname: pms-adminer
image: adminer:4.8.0
restart: always
tty: true
ports:
- 8081:8080
技术要点:
- 提供 Web 界面的数据库管理工具
- 映射到主机 8081 端口
邮件测试服务 (Mailpit)
pms-mail:
container_name: pms-mail
hostname: pms-mail
restart: always
tty: true
command: >
mailpit
--smtp-auth-allow-insecure
--db-file=/mailpit/mail.db
build: ./docker/mailpit
ports:
- "8082:8025"
volumes:
- pms-mailpit-db:/mailpit/mail.db
技术要点:
- 使用 Mailpit 作为邮件测试服务器
- 数据持久化到命名卷
pms-mailpit-db
- 映射到主机 8082 端口
部署实践指南
1. 准备工作
确保已安装:
- Docker 20.10+
- Docker Compose 1.29+
2. 部署步骤
- 克隆项目代码到本地
- 进入项目目录
- 执行
docker-compose up -d
启动所有服务 - 等待容器启动完成
3. 服务访问
- 主应用:
http://localhost:8002
- 数据库管理:
http://localhost:8081
- 邮件测试界面:
http://localhost:8082
4. 自定义配置
-
修改数据库密码: 在
environment
部分修改MYSQL_ROOT_PASSWORD
值 -
调整端口映射: 根据需求修改
ports
配置 -
Nginx 配置: 修改
./docker/nginx/nginx.conf
文件调整 Web 服务器行为
架构设计分析
该 Docker Compose 文件展示了一个典型的三层 Web 应用架构:
- 数据层: MariaDB 数据库
- 应用层: PHP-FPM 处理业务逻辑
- 表现层: Nginx 作为 Web 服务器
辅助服务提供了开发和调试支持:
- Adminer 用于数据库管理
- Mailpit 用于邮件功能测试
常见问题解决
-
端口冲突:
- 检查并修改冲突的端口映射
-
容器启动失败:
- 查看日志:
docker-compose logs <服务名>
- 确保有足够的磁盘空间
- 查看日志:
-
数据库连接问题:
- 检查 PHP-FPM 是否成功连接到数据库容器
- 验证数据库凭据是否正确
安全建议
-
生产环境中:
- 修改默认的数据库密码
- 限制 Adminer 的访问权限
- 考虑添加 TLS 加密
-
定期备份:
- 数据库卷 (
database
) - 邮件数据卷 (
pms-mailpit-db
)
- 数据库卷 (
总结
Personal Management System 的 Docker Compose 配置展示了现代 Web 应用的容器化部署方式,通过合理的服务拆分和配置,实现了开发环境的快速搭建。理解这个配置文件有助于开发者根据实际需求进行调整和扩展。