从Docker到宝塔:Magento2 2.3.5 安装全流程踩坑与成功实践

作者:Linux运维技术栈日期:2025/11/18

前言:Magento2 作为 Adobe 旗下的企业级开源电商平台,凭借强大的扩展性、多语言支持和精细化运营功能,成为全球众多电商企业的首选。但它的安装配置门槛较高,尤其对新手而言,环境兼容、依赖管理、静态资源部署等环节极易踩坑——我就曾因盲目尝试 Docker 容器部署,遭遇了版本冲突、权限隔离、内存溢出等一系列问题,耗费大量时间仍未成功。 后来转向操作更直观的宝塔面板,在反复调试中解决了 Composer 1.x 降级、内存限制解除、静态文件 404、CSS/JS 缺失等核心痛点,最终摸索出一套完整且可复现的安装流程。 本文将全程还原从 Docker 碰壁到宝塔成功部署的全过程,不仅包含环境配置、依赖安装、网页向导等基础步骤,还针对“静态资源缺失”“Composer 版本冲突”等高频报错提供了与实际操作完全对应的解决方案。无论你是初次接触 Magento2 的新手,还是曾被安装问题卡壳的开发者,都能通过本文避开坑点,高效完成 Magento2 2.3.5 的部署与配置。

一、Magento2 是什么?它能做什么?

Magento2 是 Adobe 旗下的企业级开源电商平台,以强大的可扩展性、灵活性和丰富的功能模块著称。无论是搭建 B2C 零售商城、B2B 批发平台,还是定制化电商解决方案,Magento2 都能满足需求。

其核心功能包括:

  • 多语言/多货币支持:适配全球市场,轻松切换语言和货币单位。
  • 扩展生态丰富:官方及第三方提供数万款插件,覆盖营销、物流、支付、数据分析等场景。
  • 精细化订单管理:从订单创建、支付、发货到售后,全流程可视化管控。
  • SEO 友好性:内置 SEO 工具,助力电商网站获取更好搜索引擎排名。
  • 自定义主题系统:支持个性化界面设计,打造独特品牌电商体验。
  • 高性能架构:支持缓存优化、数据库读写分离,应对高并发访问场景。

二、Docker 部署的“碰壁”经历

起初尝试通过 Docker 容器镜像 部署 Magento2,本以为能简化环境配置,却遭遇一系列问题:

  • 依赖版本冲突:容器内 PHP 扩展(如 intlsoap)与 Magento2 2.3.5 兼容性差,调试成本极高。
  • 网络与权限隔离:容器端口映射频繁失效,静态资源部署时因权限隔离无法正常读写文件。
  • 内存溢出频发:Composer 依赖安装时频繁触发内存溢出,即使调整容器内存限制也无济于事。

几番尝试后,决定改用 宝塔面板 安装——其可视化界面能快速配置 PHP 环境、权限和数据库,更适配 Magento2 这类复杂系统的安装需求。

三、宝塔面板安装 Magento2 2.3.5 完整流程

步骤 1:宝塔面板与基础环境安装

  1. 安装宝塔面板(以 CentOS 为例):
1yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
2

安装完成后,根据终端提示的“面板地址+账号密码”登录宝塔。

  1. 安装核心环境
    进入宝塔面板「软件商店」,安装:
  • PHP 7.3(Magento2 2.3.5 唯一兼容的稳定版本)
  • MySQL 5.7(避免高版本数据库兼容性问题)
  • Nginx 1.20+(或 Apache,本文以 Nginx 为例)

步骤 2:PHP 7.3 环境配置

  1. 安装必需扩展
    进入宝塔「PHP 管理」→ 选择「PHP 7.3」→「扩展」,安装:
    bcmathcurlgdintlmbstringmysqliopensslpdo_mysqlsimplexmlsoapxslzip
  2. 调整内存限制
    点击「配置文件」,将 memory_limit = 128M 改为 memory_limit = 2G,保存后重启 PHP 7.3

步骤 3:创建网站与数据库

  1. 创建网站
    宝塔面板「网站」→「添加站点」,填写域名(无域名填服务器 IP),设置根目录为 /www/wwwroot/magento2-2.3.5
  2. 创建数据库
    进入宝塔「数据库」→「添加数据库」,填写数据库名、用户名、密码(务必记录,后续安装需用到)。

步骤 4:上传并解压安装包

Magento 官网 下载 Magento2 2.3.5 压缩包,通过宝塔「文件」功能上传至网站根目录 /www/wwwroot/magento2-2.3.5 并解压。

在这里插入图片描述

步骤 5:进入项目根目录并配置 Composer(期间如果输出出现乱码就是有问题)

  1. 进入根目录
1cd /www/wwwroot/magento2-2.3.5
2
  1. 降级 Composer 到 1.x 版本(Magento2 2.3.5 仅兼容 Composer 1.x):
1composer self-update --1
2

验证版本:composer -V(需显示 1.x 版本,如 Composer version 1.10.26)。

  1. 临时解除内存限制,安装核心依赖
1COMPOSER_MEMORY_LIMIT=-1 composer install --no-dev
2

作用:解决“内存不足导致依赖安装失败”的报错,--no-dev 表示仅安装生产环境依赖。

  1. 更新依赖确保兼容性
1composer update
2

步骤 6:文件权限修复

1chown -R www:www /www/wwwroot/magento2-2.3.5
2chmod -R 775 var pub generated app/etc
3

步骤 7:网页端安装向导配置(核心流程)

浏览器访问 http://你的服务器IP/setup,按以下流程操作:

7.1 协议与环境检测
  • 同意服务协议,进入「准备情况检查」,确保所有项为绿色(若 PHP 扩展缺失,返回步骤 2 补充安装)。
7.2 数据库配置
  • 填写步骤 3创建的数据库信息:
    • 数据库名:(如 magento2_db
    • 用户名/密码:数据库账号密码
    • 主机:localhost
7.3 网站基础配置
  • 商店地址:http://你的服务器IP
  • 管理员路径:admin(可自定义,如 magentoadmin
  • 取消勾选「使用 Apache 重写」(Nginx 环境无需启用)。
7.4 商店参数设置
  • 时区:China Standard Time
  • 货币:人民币(CNY)美元(USD)
  • 语言:Chinese (simplified Han, China)
7.5 创建管理员账号
  • 填写用户名、邮箱、密码(需包含大小写字母+数字+特殊字符),牢记账号密码。
7.6 完成安装

点击「安装」,等待 5-10 分钟(视服务器配置而定),安装完成后显示「Success」提示。

步骤 8:启动内置服务器(开发环境专用)

1如果只有一个版本的php的话,就不用写全路径
2
  1. 进入 pub 目录:
1cd /www/wwwroot/magento2-2.3.5/pub
2
  1. 用 PHP 7.3 全路径启动服务器(指定本地 IP):
1/www/server/php/73/bin/php -S 192.168.0.116:8000
2

说明:192.168.0.116 替换为服务器内网 IP;若需外网访问,改为 0.0.0.0:8000

四、问题处理:缺少CSS/JS静态文件的解决方案

在这里插入图片描述

若安装后出现前端样式错乱(如页面无CSS、JS加载失败),按以下步骤处理(与图片操作完全对应):

  1. 执行SQL关闭静态文件签名
    登录宝塔「数据库」→ 选择 Magento 数据库 → 点击「phpMyAdmin」,执行以下SQL语句:
1INSERT INTO `core_config_data` (`config_id`, `scope`, `scope_id`, `path`, `value`) VALUES (NULL, 'default', '0', 'dev/static/sign', '0');
2
  1. 清理Magento缓存
1cd /www/wwwroot/magento2-2.3.5
2/www/server/php/73/bin/php bin/magento cache:clean
3/www/server/php/73/bin/php bin/magento cache:flush
4
  1. 部署中英文静态资源
1# 英文静态文件
2/www/server/php/73/bin/php bin/magento setup:static-content:deploy -f
3
4# 中文静态文件
5/www/server/php/73/bin/php bin/magento setup:static-content:deploy zh_Hans_CN -f
6
7# 同时部署英文+中文(可选)
8/www/server/php/73/bin/php bin/magento setup:static-content:deploy en_US zh_Hans_CN -f
9
  1. 重启Web服务
    先杀死旧的PHP内置服务器进程,再重新启动:
1ps aux | grep "/www/server/php/73/bin/php -S" | grep -v grep | awk '{print $2}' | xargs -r kill -9
2cd /www/wwwroot/magento2-2.3.5/pub
3/www/server/php/73/bin/php -S 192.168.0.116:8000
4

以下是补充到文章“4. 重启Web服务”部分的内容,已调整IP为通用表述并优化步骤可读性:

五. 如果页面一直无限转圈-可选步骤

在这里插入图片描述

若界面加载异常或持续转圈,按以下步骤重启服务(将你的服务器IP替换为实际服务器公网/内网IP):

  1. 杀死旧的PHP 7.3内置服务器进程(避免端口冲突)
1ps aux | grep "/www/server/php/73/bin/php -S" | grep -v grep | awk '{print $2}' | xargs -r kill -9
2
  1. 进入Magento根目录
1cd /www/wwwroot/magento2-2.3.5
2
  1. 用PHP 7.3全路径清理缓存
1/www/server/php/73/bin/php bin/magento cache:flush
2
  1. 删除缓存文件和生成文件(彻底清理)
1rm -rf var/cache/* var/page_cache/* generated/*
2
  1. 同时部署英文+中文静态资源(PHP 7.3全路径执行)
1/www/server/php/73/bin/php bin/magento setup:static-content:deploy en_US zh_Hans_CN -f
2
  1. 修复关键目录权限
1chmod -R 775 var pub generated
2
  1. 修复文件归属(适配宝塔www用户)
1chown -R www:www /www/wwwroot/magento2-2.3.5
2
  1. 进入pub目录(Magento官方访问入口)
1cd pub
2
  1. 用PHP 7.3全路径启动服务器(后台运行,日志单独记录)
1nohup /www/server/php/73/bin/php -S 0.0.0.0:8000 > ../magento_73.log 2>&1 &
2

执行完所有步骤后,访问 http://你的服务器IP:8000/admin 即可。若仍有问题,可查看日志排查:

1tail -30 /www/wwwroot/magento2-2.3.5/magento_73.log
2

在这里插入图片描述

六、关键问题与解决方案

  1. 静态文件部署报错:必须先执行 COMPOSER_MEMORY_LIMIT=-1 composer install --no-dev 解除内存限制。
  2. Composer 版本冲突:Magento2 2.3.5 仅兼容 Composer 1.x,需用 composer self-update --1 降级。
  3. 静态资源 404/样式错乱:按“问题处理”章节的SQL+缓存+静态部署+重启流程操作。
  4. 服务器启动后无法访问:执行 kill -9 $(lsof -t -i:8000) 释放端口后重新启动。
  5. 后台登录后操作无响应:执行 /www/server/php/73/bin/php bin/magento cache:clean 清理缓存,同时检查 var/session 目录权限(需设置为 775 且归属 www 用户)。

七、总结

从 Docker 到宝塔的部署尝试,验证了工具选择需适配系统复杂度的原则。宝塔面板的可视化操作简化了 PHP 环境、权限、数据库的配置流程,尤其适合 Magento2 这类复杂电商系统的新手安装。

核心步骤总结:

  • 环境:PHP 7.3 + MySQL 5.7 + Nginx + Composer 1.x。
  • 流程:先创建数据库,再通过网页向导配置,最后处理静态资源问题。
  • 问题:静态资源缺失需关闭 URL 签名、重新部署静态文件,属于报错时的标准修复流程。

希望这篇全流程指南能帮你避开安装坑,顺利开启 Magento2 电商之旅!
在这里插入图片描述


从Docker到宝塔:Magento2 2.3.5 安装全流程踩坑与成功实践》 是转载文章,点击查看原文


相关推荐


Python 的内置函数 set
IMPYLH2025/11/17

Python 内建函数列表 > Python 的内置函数 set Python 的内置函数 set() 是一个非常有用的数据结构,用于创建无序且不包含重复元素的集合。它提供了高效的成员检测和元素去重功能,是处理集合运算的理想选择。 基本用法 创建集合: # 使用花括号 fruits = {'apple', 'banana', 'orange'} # 使用set()函数 numbers = set([1, 2, 3, 2, 1]) # 结果为{1, 2, 3} 空集合创建: emp


Python 的内置函数 ord
IMPYLH2025/11/16

Python 内建函数列表 > Python 的内置函数 ord Python 的内置函数 ord() 是一个非常有用的字符串处理函数,它主要用于获取单个字符的 Unicode 码点值。具体来说,ord() 函数接受一个长度为 1 的字符串(即单个字符)作为参数,并返回该字符对应的 Unicode 码点的整数数值。 语法格式: ord(c) 其中 c 是一个表示单个字符的字符串。 主要特点: 只能处理单个字符,如果传入字符串长度超过1会抛出 TypeError对 ASCII 字符返


Redis(125)Redis在社交网络中的应用有哪些?
Victor3562025/11/15

在社交网络中,Redis 被广泛应用于以下场景: 用户会话管理 好友关系存储 消息队列 活动流 点赞和评论统计 排行榜 下面详细介绍这些应用场景,并结合 Java 代码示例进行讲解。 1. 用户会话管理 Redis 可以用于管理用户会话,通过 Redis 的高效性和持久化机制,能够快速读取和写入会话数据。 示例代码 import redis.clients.jedis.Jedis; public class SessionManagementExample { public sta


OkHttp网络框架设计
杨充2025/11/13

OkHttp网络框架设计 目录介绍 01.整体概述介绍 1.1 概述介绍 1.2 核心特性说明 1.3 技术架构概览 1.4 问题思考 02.核心架构设计 2.1 整体架构设计 2.2 整体设计思路 2.3 核心组件关系图 03.核心组件详解 3.1 OkHttpClient 3.2 Request请求封装 3.3 Call请求执行接口 3.4 Dispatcher调度器 3.5 拦截器机制 3.6 Response返回 04.核心流程分析 4.1 请求执行流程 4.2 连


PyTorch:AI深度学习开源框架
深圳蔓延科技2025/11/12

如果把构建一个AI模型比作搭建一个复杂的乐高城堡,那么 PyTorch 就是一个为你提供了各种基础积木,并且让你能非常自由、顺手地去拼接它们的工具箱。 它不像一些已经搭好的成品玩具(比如一些封装好的软件),你只能看不能改。PyTorch 的魅力在于它的 “动态” 和 “直观”。 1. 核心概念一:张量 - 其实就是“数据容器” 你可能听过一个词叫 “张量”(Tensor)。听起来很高深,但其实它就是 PyTorch 里最基本的数据容器。 你可以这样理解: 标量(一个数):就是一个零维张量。比如


Kotlin泛型位置规律与设计考量
风冷2025/11/10

Kotlin泛型位置规律与设计考量 1. 泛型出现的位置分类 在Kotlin中,泛型可以出现在以下几个主要位置: 1.1 类声明中的泛型 class ViewRef<T : DeclarativeBaseView<*, *>>( val pagerId: String, val nativeRef: Int ) { val view: T? get() = PagerManager.getPager(pagerId) .getVie


深入解析 processDefineExpose:Vue SFC 编译阶段的辅助函数
excel2025/11/8

在 Vue 单文件组件(SFC)的编译过程中,<script setup> 模块中的编译转换是一项重要工作。本文将深入剖析其中一个小但关键的函数——processDefineExpose,它用于检测并处理 defineExpose() 调用。 一、背景与概念 在 Vue 3 的 <script setup> 中,开发者可以通过: defineExpose({ foo: 1 }) 来显式暴露组件的部分内部变量,使得父组件在通过 ref 获取子组件实例时,可以访问这些变量。 编译器在解析脚本时,


LabVIEW工业零件尺寸测量
LabVIEW开发2025/11/6

在汽车零部件生产流水线中,轴类零件的台阶位移尺寸直接影响装配精度与产品寿命。传统人工测量依赖千分表,存在效率低、误差大、数据无法实时追溯等问题,难以满足现代化批量生产的质量管控需求。基于 LabVIEW 开发的位移检测系统,可结合高精度传感器实现自动化、高精度测量,解决传统测量痛点,提升生产过程的质量控制水平。 系统设计 系统以 LabVIEW为软件开发平台,硬件核心包括激光位移传感器、NI cDAQ 数据采集卡、工业计算机、电动平移台及报警模块。整体架构分为硬件层、数据采集层、软件


Iterable<Result<Item>>讲一下
Violet_YSWY2025/11/1

好的,Iterable<Result<Item>> 是 MinIO Java SDK 中用于处理列表结果的典型模式,我来详细解释: 1. 三层结构分解 Iterable<Result<Item>> results = minioClient.listObjects(...); 拆解理解: Iterable<> - 可遍历的容器Result<Item> - 包含实际结果的对象Item - 真正的对象信息 2. 逐层理解 第一层:Iterable - 可迭代对象 // 就像是一个装了很多东西的盒子


2025年,我为什么建议你先学React再学Vue?
良山有风来2025/10/30

你是不是刚准备入门前端开发,面对React和Vue两个热门框架却不知道如何选择? 看着招聘网站上React和Vue的职位要求,担心选错方向影响未来发展? 别担心,这篇文章就是为你准备的。我会用最直白的语言,带你快速体验两大框架的魅力,并告诉你为什么在2025年的今天,我强烈建议从React开始学起。 读完本文,你将获得两大框架的完整入门指南,还有可以直接复用的代码示例,帮你节省大量摸索时间。 先来看看React:简洁就是美 React的核心思想非常直接——用JavaScript构建用户界面。它不

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0