magento据说是一个很强大很成熟的电商系统,只不过我安装的过程中遇到的坑兼职太多了,而且网上几乎很难搜到什么资料。
1.下载安装包后进入目录,提示:
Vendor autoload is not found.
Please run ‘composer install’ under application root directory.
好吧,根据提示到网站根目录里面去composer install,结果提示:
Loading composer repositories with package informationInstalling dependencies (including require-dev) from lock filePackage operations: 175 installs, 0 updates, 0 removals
Installing magento/magento-composer-installer (0.1.13): Loading from cache
Plugin installation failed, rolling backRemoving magento/magento-composer-installer (0.1.13)
[RuntimeException]Could not delete /home/magento/site/vendor/magento/magento-composer-installer/src/MagentoHackathon:
install [–prefer-source] [–prefer-dist] [–dry-run] [–dev] [–no-dev] [–no-custom-installers] [–no-autoloader] [–no-scripts] [–no-progress] [–no-suggest] [-v|vv|vvv|–verbose] [-o|–optimize-autoloader] [-a|–classmap-authoritative] [–apcu-autoloader] [–ignore-platform-reqs] [–] []…
这个提示大致意思是说安装某个插件失败了,系统需要回滚,毕竟composer在墙内用速度实在太慢,经常断线,没点耐心的话安装失败也很正常,系统回滚时无法删除已建立的文件导致该错误
手动删除文件依然失败,猜测是不是有别的进程正在占用,lsof之后发现了git,于是
ps ax|grep git
kill掉所有git进程,再次运行composer install即可
但是由于需要安装的插件太多,composer install的过程中肯定还会失败,所以可能需要反复执行上面的操作
2.composer install执行完毕,进入/setup目录,页面无法正常载入,打开控制台,提示:
/setup/index.php/navigation
/setup/index.php/navigation/side-menu
/setup/index.php/navigation/header-bar
/setup/index.php/session/prolong
这几个文件404 not found
一开始看到index.php后面还接了路径,以为是路由解析的问题,搜了半天也没找到答案,后来看到这个帖子:https://github.com/magento/magento2/issues/2504,说是配置nginx.conf解决,但是我配置之后也没什么用,最后在日志里发现404是因为upstream配置错误,没有找到sock文件,学习了一下关于upstream的概念之后,果断把它改成127.0.0.1:9000,再次访问则恢复正常
也不知道为什么网上有人说要把upstream配置成php-fpm.sock,我搜了根本就没找到这个文件,或许是php的版本和安装方式的问题?
3.系统检车过程中提示mysql版本太低,这个直接更新版本不解释
4.系统检测完毕,开始安装时提示安装失败,打开控制台一看,提示POST的地址404 not found,可是这个地址直接访问又没问题。打开nginx错误日志发现问题源头:client_body_temp/000000001" failed (13: Permission denied),搜了搜,大概意思是nginx对于post的数据过大时,会将其临时存放在一个文件里,这里的意思就是说临时文件不可写导致安装失败。网上搜到的答案都是给nginx用root的权限来执行,可是这样的话风险也太大了,后来找了找,发现一个稍微安全也算是靠谱的方法:在nginx.conf中加上这句:
client_body_temp_path /spool/nginx/client_temp 3 2;
意思是手动指定临时文件存放位置,当然要记得新建这个目录并且更改所有者为nginx,保证nginx的写权限
5.安装过程大约一半时,提示
magento\eav\model\entity\attribute\exception: warning: sessionhandler::read(): open(/var/opt/remi/php73/lib/php/session/sess_nnj7n1nqqpgu5t27ss1prg98i4, o_rdwr) failed: permission denied
根据github的提示,更改/var/opt/remi/php73/lib/php/session的写权限
6.安装完毕进入首页后,发现页面载入不全,打开控制台发现几乎所有的静态文件(js,css,woff2)全部载入失败404,根据路径查看,中间有个version1589*******的文件夹,而本地根本没有搜到。
网上查了查,这是nginx配置中的rewrite项配置不正确造成的,根据magento提供的nginx.conf.sample,把里面的配置抄过来也不行,查看nginx日志发现:
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
嗯,这是一个非常著名的错误,检查了conf文件,发现magento自带的sample里面已经包含了php的解析,而我自己又多写了一个,所以把自己的全部注释掉,再次运行,发现访问的文件仍然出错,但是上面的错误消失了,新出现的错误是No such file or directory
打开sample文件仔细研究,以我小白的眼光看来,感觉里面对于目录的管理非常乱,例如root定义为$MAGE_ROOT/pub,那么我直接访问域名,竟然进入的是pub文件夹中的index.php?又例如/pub/和/static/明明是嵌套关系,但却写成了平级。耐着性子把root改为magento的根目录,又把像static,media这类的文件夹解析路径和rewrite统统加上/pub/,再次访问提示access forbidden by rule
本来觉得应该还是路径匹配的问题,网上搜了搜,找到此贴:
https://stackoverrun.com/cn/q/9382389
根据贴中提示进行操作:
php bin/magento setup:static-content:deploy
之后再pub/static目录中能找到各种静态文件,但前端仍然无法加载,直接根据路径访问静态文件提示404,但是把路径中的pub去掉则顺利访问,所以为什么首页会请求pub路径的文件而不是直接请求static目录呢?
再次搜索找到页面:
根据文章内容,对数据库执行命令:
insert core_config_data (config_id, scope, scope_id, path, value) values (null, 'default', 0, 'dev/static/sign', 0);
再次运行
php bin/magento setup:static-content:deploy
php bin/magento indexer:reindex
删除/var/cache目录下的所有文件
访问主页,一切正常
7.访问速度慢
不能说是慢,而应该说是极慢极慢,超级无敌宇宙级霹雳无比的慢,刚刚安装好的网站,加载个首页、后台登陆页,要近一分钟???谁会有这样的耐心?并且CPU占用极高,弄得我本本都发烫。
说是要关闭js 和 css 的 merge 功能,原文说的是要disable merging,可是这里选项的默认值就是no,干嘛还需要disable,还是说我的英文太差了没理解这个意思,反正我不管设置为No,还是Yes,都没有明显效果,并且当js的几项选为yes之后,页面开始报错,刷新居然加载不出来了!!!OH MY GOD
算了先不管了,明天继续弄