首页
/ Solidus电商平台Docker开发环境配置指南

Solidus电商平台Docker开发环境配置指南

2025-07-08 03:20:13作者:房伟宁

前言

Solidus是一个基于Ruby on Rails构建的开源电商平台,为开发者提供了完整的电商解决方案。本文将深入解析Solidus项目中的docker-compose.yml文件配置,帮助开发者快速搭建本地开发环境。

环境架构概述

Solidus的Docker开发环境采用了多容器架构,主要包含以下组件:

  1. MySQL数据库服务
  2. PostgreSQL数据库服务
  3. 主应用服务(包含Rails环境)

这种设计允许开发者同时测试应用在不同数据库中的表现,也便于进行数据库迁移等操作。

数据库服务配置

MySQL服务

mysql:
  image: mysql:8.0
  command: --default-authentication-plugin=mysql_native_password
  environment:
    MYSQL_ROOT_PASSWORD: password
  volumes:
    - mysql:/var/lib/mysql:cached
  • 使用MySQL 8.0官方镜像
  • 设置root用户密码为"password"
  • 通过volume持久化数据,避免容器重启后数据丢失
  • 指定使用mysql_native_password认证插件,确保兼容性

PostgreSQL服务

postgres:
  image: postgres:13.2
  environment:
    POSTGRES_USER: root
    POSTGRES_PASSWORD: password
  volumes:
    - postgres:/var/lib/postgresql/data:cached
  • 使用PostgreSQL 13.2官方镜像
  • 设置超级用户为root,密码为"password"
  • 同样使用volume持久化数据

主应用服务配置

构建配置

build:
  context: .dockerdev
  dockerfile: Dockerfile
  args:
    RUBY_VERSION: "3.1"
    PG_VERSION: 13
    NODE_VERSION: 20
    MYSQL_VERSION: "8.0"
    BUNDLER_VERSION: 2
  • 基于.dockerdev目录下的Dockerfile构建
  • 指定了Ruby 3.1、Node.js 20等关键组件的版本
  • 确保与数据库服务版本匹配(PG 13, MySQL 8.0)

运行时配置

command: bash -c "(bundle check || bundle) && bash -c 'echo Container initialized, see README.md for further steps.' && tail -f /dev/null"
  • 启动时自动检查并安装Gem依赖
  • 保持容器运行(tail -f /dev/null)

环境变量

environment:
  CAPYBARA_DRIVER: selenium_chrome_headless_docker_friendly
  DB_USERNAME: root
  DB_PASSWORD: password
  RAILS_VERSION: ${RAILS_VERSION:-~> 7.1.0}
  DB_ALL: "1"
  DB_MYSQL_HOST: mysql
  DB_POSTGRES_HOST: postgres
  RAILS_ENV: development
  ACTIVE_STORAGE_VARIANT_PROCESSOR: "vips"
  • 配置测试驱动为无头Chrome
  • 设置数据库连接参数
  • 默认使用Rails 7.1.x版本
  • 启用所有数据库(DB_ALL=1)
  • 指定使用vips作为图片处理器

存储与网络

volumes:
  - .:/home/solidus_user/app:delegated
  - bundle:/home/solidus_user/gems:cached
  - history:/home/solidus_user/history:cached

ports:
  - "${SANDBOX_PORT:-3000}:${SANDBOX_PORT:-3000}"
  • 将项目代码挂载到容器中(delegated模式提高性能)
  • 单独挂载bundle目录,避免重复安装Gem
  • 保存shell历史记录
  • 暴露3000端口(可通过SANDBOX_PORT环境变量覆盖)

使用技巧

  1. 多数据库支持:环境配置了同时连接MySQL和PostgreSQL,便于测试不同数据库适配

  2. 开发效率优化

    • 使用delegated挂载模式提高文件系统性能
    • 单独挂载bundle目录避免重复安装Gem
    • 配置tmpfs提高临时文件访问速度
  3. 调试支持

    • 保持TTY和标准输入开启(tty/stidin_open)
    • 记录shell和MySQL历史记录
  4. 自定义配置

    • 通过SANDBOX_PORT环境变量可修改暴露端口
    • 通过RAILS_VERSION可指定Rails版本

总结

Solidus的Docker开发环境配置体现了现代Web应用开发的最佳实践:

  1. 隔离性:各服务运行在独立容器中
  2. 可重复性:通过Dockerfile确保环境一致
  3. 灵活性:支持多数据库和自定义配置
  4. 开发友好:优化了文件系统性能和调试体验

这套配置为Solidus开发者提供了开箱即用的开发环境,大大降低了环境搭建的复杂度,让开发者可以专注于业务逻辑的实现。