Solidus电商平台Docker开发环境配置指南
2025-07-08 03:20:13作者:房伟宁
前言
Solidus是一个基于Ruby on Rails构建的开源电商平台,为开发者提供了完整的电商解决方案。本文将深入解析Solidus项目中的docker-compose.yml文件配置,帮助开发者快速搭建本地开发环境。
环境架构概述
Solidus的Docker开发环境采用了多容器架构,主要包含以下组件:
- MySQL数据库服务
- PostgreSQL数据库服务
- 主应用服务(包含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环境变量覆盖)
使用技巧
-
多数据库支持:环境配置了同时连接MySQL和PostgreSQL,便于测试不同数据库适配
-
开发效率优化:
- 使用delegated挂载模式提高文件系统性能
- 单独挂载bundle目录避免重复安装Gem
- 配置tmpfs提高临时文件访问速度
-
调试支持:
- 保持TTY和标准输入开启(tty/stidin_open)
- 记录shell和MySQL历史记录
-
自定义配置:
- 通过SANDBOX_PORT环境变量可修改暴露端口
- 通过RAILS_VERSION可指定Rails版本
总结
Solidus的Docker开发环境配置体现了现代Web应用开发的最佳实践:
- 隔离性:各服务运行在独立容器中
- 可重复性:通过Dockerfile确保环境一致
- 灵活性:支持多数据库和自定义配置
- 开发友好:优化了文件系统性能和调试体验
这套配置为Solidus开发者提供了开箱即用的开发环境,大大降低了环境搭建的复杂度,让开发者可以专注于业务逻辑的实现。