首页
/ 使用Docker Compose部署php-crud-api项目的完整指南

使用Docker Compose部署php-crud-api项目的完整指南

2025-07-09 05:05:05作者:范垣楠Rhoda

项目概述

php-crud-api是一个基于PHP的轻量级RESTful API框架,能够自动为MySQL数据库生成CRUD(创建、读取、更新、删除)API接口。它特别适合快速构建后端服务,无需编写大量重复的CRUD代码。

Docker Compose配置解析

下面我们将深入分析这个Docker Compose配置文件,它定义了两个服务:数据库服务和Web服务器服务。

1. 数据库服务配置

database:
    image: mysql:8.0
    container_name: database
    restart: always
    environment:
        - MYSQL_ROOT_PASSWORD=php-crud-api
        - MYSQL_DATABASE=php-crud-api
        - MYSQL_USER=php-crud-api
        - MYSQL_PASSWORD=php-crud-api
    volumes:
        - ./tests/fixtures/blog_mysql.sql:/docker-entrypoint-initdb.d/blog_mysql.sql

关键点解析:

  1. MySQL 8.0镜像:使用官方MySQL 8.0镜像,确保数据库服务的稳定性和兼容性。

  2. 自动重启策略:设置restart: always确保数据库服务在意外停止后自动重启。

  3. 安全配置

    • 设置了root密码
    • 创建了专用数据库和用户
    • 所有凭证都使用"php-crud-api"作为密码(生产环境应使用更复杂的密码)
  4. 数据初始化

    • 通过挂载SQL脚本到/docker-entrypoint-initdb.d/目录,容器启动时会自动执行该脚本初始化数据库结构
    • 这里使用的是项目自带的测试用博客数据库结构

生产环境建议

  • 注释掉的端口映射(33066:3306)在开发时可用于外部连接调试
  • 考虑使用命名卷持久化数据库数据,避免容器删除后数据丢失

2. Web服务器服务配置

webserver:
    container_name: webserver
    build:
        context: ./
    environment:
        - PHP_CRUD_API_ADDRESS=database
        - PHP_CRUD_API_MAPPING=abc_posts.abc_id=posts.id,abc_posts.abc_user_id=posts.user_id,abc_posts.abc_category_id=posts.category_id,abc_posts.abc_content=posts.content
    ports:
        - "8080:80"
    depends_on:
        - database

关键点解析:

  1. 构建方式:使用当前目录下的Dockerfile构建镜像,而不是使用预构建镜像,这允许自定义Web服务器配置。

  2. 环境变量配置

    • PHP_CRUD_API_ADDRESS:指定数据库服务地址,这里使用服务名"database",Docker内部网络会自动解析
    • PHP_CRUD_API_MAPPING:定义了表字段的映射关系,这在处理遗留数据库或需要重命名字段时非常有用
  3. 端口映射:将容器内的80端口映射到主机的8080端口,可通过http://localhost:8080访问API

  4. 依赖关系:通过depends_on确保数据库服务先启动

高级配置选项

  • 注释掉的配置项展示了更多可配置参数,如:
    • 指定数据库驱动类型
    • 设置数据库端口
    • 配置数据库名称、用户名和密码
    • 开启调试模式
  • 在生产环境中,可能需要挂载代码卷实现热更新

部署流程

  1. 准备环境

    • 确保已安装Docker和Docker Compose
    • 克隆项目代码到本地
  2. 启动服务

    docker-compose up -d
    
  3. 验证服务

    • 访问http://localhost:8080应该能看到API响应
    • 检查数据库是否初始化成功:
      docker exec -it database mysql -u php-crud-api -p
      
  4. 停止服务

    docker-compose down
    

常见问题解决

  1. 端口冲突:如果8080端口被占用,修改ports配置中的主机端口号

  2. 数据库连接问题:检查数据库容器是否正常启动,环境变量配置是否正确

  3. 初始化脚本执行失败:确认SQL文件路径正确,文件格式无误

最佳实践建议

  1. 安全加固

    • 修改默认密码
    • 限制数据库外部访问
    • 考虑添加API认证层
  2. 性能优化

    • 为MySQL容器配置适当资源限制
    • 启用PHP OPcache
    • 考虑添加Redis缓存层
  3. 监控与日志

    • 配置日志收集
    • 添加健康检查端点
    • 设置资源使用监控

通过这个Docker Compose配置,php-crud-api项目可以快速部署并运行,为开发者提供了一个功能完整的RESTful API后端服务。这种容器化的部署方式不仅简化了环境配置,也提高了应用的可移植性和可维护性。