Shopware 6 部署指南:本地跑通到生产上线
【免费下载链接】shopwareShopware 6 is an open commerce platform based on Symfony Framework and Vue and supported by a worldwide community and more than 3.100 community extensions项目地址: https://gitcode.com/GitHub_Trending/sh/shopware
Shopware 6 是基于 Symfony 7.4 和 Vue.js 3 的开源电商平台(见 composer.json 中的依赖声明)。部署完成后你会得到三样东西:一个面向买家的 storefront 商城(商品列表、购物车、结算)、位于/admin路由下的 Vue 后台(订单、商品、CMS 页面管理),以及一套 REST API。本文带你从空机器开始,先在本机跑通,再整理出可直接上线的清单。
📋 先盘点依赖:版本、扩展与硬件
装之前先对号入座。以下要求来自仓库内composer.json与compose.yaml的实际声明,不是估算值:
| 依赖 | 版本要求 | 说明 |
|---|---|---|
| PHP | 8.2 / 8.3 / 8.4 / 8.5 | composer.json中写死为~8.2.0 \|\| ~8.3.0 \|\| ~8.4.0 \|\| ~8.5.0 |
| PHP 扩展 | pdo_mysql、intl、gd、zip、sodium等 | 缺任何一个composer install都会直接报错 |
| 数据库 | MariaDB 10.11+ 或 MySQL 8.0+ | compose 默认使用mariadb:latest |
| Node.js | LTS(仓库.nvmrc为lts/*,官方镜像用 Node 24) | 只在前端构建时需要 |
| Composer | 2.x | 依赖管理 |
| Docker + Compose | 任意新版 | 最短路径方案必需 |
| 内存 / 磁盘 | 建议 4 GB RAM、5 GB 可用空间 | composer install+ 两份 node_modules + 构建产物会先吃掉 3 GB 左右 |
硬件和版本都就位后,最短路径只需要三条命令。
🐳 用 Docker Compose 起全套环境
仓库根目录的 compose.yaml 已经配好全部五个服务:web(PHP 8.4 + Node 24 + Caddy)、database(MariaDB)、opensearch、mailer(Mailpit 邮件收件箱)、valkey(缓存)。克隆仓库并启动:
git clone https://gitcode.com/GitHub_Trending/sh/shopware && cd shopware # 拉取平台代码 docker compose up -d # 后台启动全部五个服务 docker compose exec web composer setup # 一条命令完成初始化,耗时数分钟composer setup是官方脚本的聚合入口,内部依次执行:composer install -o装 PHP 依赖、system:install --drop-database --basic-setup建库并创建销售渠道和管理员、init:js装前端依赖、build:js构建管理界面与 storefront、最后激活默认Storefront主题。
跑完后打开浏览器验证:
| 入口 | 地址 | 说明 |
|---|---|---|
| 商店前台 | http://localhost:8000 | 商品列表、购物车 |
| 后台管理 | http://localhost:8000/admin | 默认账号admin/ 密码shopware |
| Adminer 数据库管理 | http://localhost:9080 | 账号root/root,库名shopware |
| Mailpit 邮件 | http://localhost:8025 | 所有发件在这里可见 |
前台能看到带示例销售渠道的默认商城就算成功。想脱离容器手动掌控每个环节,就往下拆。
手动拆解:从取代码到启服务
不依赖 Docker 时(例如装到自己的 VPS),整条链路是:取代码、配.env、装 PHP 依赖、装 JS 依赖、初始化数据库、构建前端、起服务。按顺序执行:
1. 取代码。
git clone https://gitcode.com/GitHub_Trending/sh/shopware shopware && cd shopware失败信号:composer.json解析阶段报require php版本不匹配,说明系统 PHP 低于 8.2,先换 PHP。
2. 配环境变量。仓库不携带.env,按 CONTRIBUTING.md 的说法,你自己创建的.env会覆盖默认值:
cat > .env <<'EOF' APP_ENV=dev APP_URL=http://localhost:8000 DATABASE_URL="mysql://root:root@127.0.0.1:3306/shopware" # 数据库连接串 MAILER_DSN=smtp://127.0.0.1:1025 # 本地 Mailpit EOF失败信号:后续任何命令报SQLSTATE[HY000]连接错误,先回来核对这条连接串。
3. 装 PHP 依赖。
composer install -o # -o 优化 autoloader;post-install 会连带装 vendor-bin 工具链失败信号:Your requirements could not be resolved且提示扩展缺失,用php -m对照上一节的扩展清单。
4. 装前端依赖并构建。
composer init:js # 安装 admin + storefront 两套 node_modules composer build:js # 构建 Administration 与 Storefront 的 JS 产物失败信号:node 报版本过低,把 Node 升到 18+(仓库镜像实际用 24)。
5. 初始化数据库。--basic-setup会创建 storefront 销售渠道和管理员账号,参数在SystemInstallCommand中均已确认:
bin/console system:install --basic-setup --create-database --force \ --shop-name "My Shop" --shop-currency EUR --shop-locale de-DE # 店名/货币/语言失败信号:install.lock相关报错时加--force重试;数据库不存在时加--create-database。
6. 激活主题并起服务。
bin/console theme:change --sync --all Storefront # 激活默认主题 php -S localhost:8000 -t public # 内置服务器仅供开发验证打开http://localhost:8000和/admin验证。失败信号:页面结构在但样式全丢,说明 JS 产物没装进 public 目录,补跑bin/console assets:install。
开发阶段改前端代码想即时看到效果,可以换用热重载而不是反复 build:
composer watch:admin # 后台热重载,端口 5173 composer storefront:dev-server # 前台 Vite 开发服务器,默认端口 5175服务能跑起来之后,剩下的是把三类最常问到的配置讲清楚。
配置三板斧:数据库、前端构建与外部服务
数据库连接是第一个变量。本地用 MariaDB 10.11+,生产环境建议直接参考 compose 文件里给database服务调过的参数(innodb_buffer_pool_size=1024M、sql_mode=STRICT_TRANS_TABLES等,见 compose.yaml),迁移到 MySQL 8 时保持相同sql_mode可避免迁移报错。
前端构建按产物粒度拆成三个命令,按需选用:
composer build:js:admin # 只构建 Administration composer build:js:storefront # 只构建 Storefront,含 theme:compile bin/console assets:install # 把构建产物同步进 public/外部服务只有两个开关真正影响可用性。邮件走MAILER_DSN(smtp://user:pass@host:587或sendmail://default),发不出去就去 Mailpit(容器环境 8025 端口)确认有没有收到。搜索走OPENSEARCH_URL与ADMIN_OPENSEARCH_URL,本地不装 OpenSearch 时商城和后台都能跑,只是站内搜索与部分列表筛选不可用。异步消息队列的传输地址由MESSENGER_TRANSPORT_DSN控制(定义在src/Core/Framework/Resources/config/packages/framework.yaml),本地默认落库即可,生产必须常驻消费者,见下一节。
配置层面理清后,对照这份清单把环境切到生产。
生产环境上线前必做的几件事
- 环境变量切换:
APP_ENV=prod、APP_DEBUG=0,APP_SECRET换成 32 位以上随机字符串(签名和会话都依赖它)。 - 依赖瘦身:
composer install -o --no-dev,去掉 phpunit、phpstan 等开发依赖。 - 生产构建:
composer build:js && bin/console assets:install && bin/console theme:compile --sync,再跑一次bin/console cache:clear --env=prod预热缓存。 - 消息队列常驻:
bin/console messenger:consume async low_priority --time-limit=3600用 systemd 或 supervisor 托管,支付回调、邮件、索引刷新都靠它投递;定期用messenger:failed查看失败消息。 - Web 层换成 Nginx 1.18+ 或 Apache 2.4+ 反代到 PHP-FPM,站点根指到
public/,启用 OPcache 并把memory_limit提到 256M 以上。 - 全站 HTTPS;如果前面还压了一层反向代理,按 Symfony 惯例配置可信代理,避免
APP_URL与实际访问域名不一致导致跳转死循环。
上线后如果响应时间不及预期,参考上图这种组件级基准视图定位热点(仓库tests/performance/bench/内置 phpbench 用例,composer phpbench可跑)。跑稳之后,把最容易卡住的五个点存下来备用。
卡住时先查这 5 个高频点
症状:composer install报require php (~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0)不满足。原因:系统 PHP 版本低于 8.2 或扩展未装齐。解法:升级 PHP 并用php -m核对pdo_mysql、intl、gd、zip、sodium是否齐全。
症状:system:install报SQLSTATE[HY000] [2002] Connection refused。原因:.env里DATABASE_URL指向的地址未监听,或数据库服务未启动。解法:mysql -h <host> -u <user> -p手动验证连通性,再核对库名大小写。
症状:页面骨架能打开,但样式、JS 全部 404。原因:前端产物没有构建或未同步进public/。解法:依次执行composer build:js和bin/console assets:install。
症状:商城可逛但站内搜索无结果,后台商品搜索也慢。原因:OPENSEARCH_URL未配置或 OpenSearch 未启动。解法:本地起一个opensearchproject/opensearch:2单节点并写入该环境变量,或临时接受无搜索的降级状态。
症状:下单、改价都正常,但确认邮件永远收不到。原因:MAILER_DSN指向不可达的 SMTP,或端口未放行。解法:开发环境先指到 Mailpit(smtp://127.0.0.1:1025)验证链路,再切真实 SMTP。
环境跑稳后,下面三件事能把它变成一个可持续迭代的开发环境。
值得接着做的 3 件事
- 按 CONTRIBUTING.md 中的 watcher 章节挂上
watch:admin(5173)和storefront:dev-server(5175),把"改代码即见效果"的循环跑起来。 - 在
custom/plugins/下写第一个插件——composer.json已把该目录注册为 path 仓库,放进来即被识别,用来验证插件系统而不是复制核心代码。 - 给
messenger:consume和cache:clear配置 cron 或 systemd 定时任务,并把失败消息队列纳入你的告警,这是生产环境唯一会静默堆积的环节。
【免费下载链接】shopwareShopware 6 is an open commerce platform based on Symfony Framework and Vue and supported by a worldwide community and more than 3.100 community extensions项目地址: https://gitcode.com/GitHub_Trending/sh/shopware
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考