1. 前言

最近帮一意大利客户做了一个Magento2的一个主题开发,开发工作我并没有过多的参与其中,更多的是由我另一同事完成,我更多的工作便是这程序的安装和部署。期间遇到了各种各样的奇葩问题和坑,这里做一个小总结,为以后的自己避坑,或为后人提供一点点参考和帮助。

2. 关于Magento2

百度百科介绍:

Magento 是一套专业开源的电子商务系统。Magento设计得非常灵活,具有模块化架构体系和丰富的功能。易于与第三方应用系统无缝集成。其面向企业级应用,可处理各方面的需求,以及建设一个多种用途和适用面的电子商务网站。 包括购物、航运、产品评论等等,充分利用开源的特性,提供代码库的开发,非常规范的标准,易于与第三方应用系统无缝集成。

这里简单引用了百度百科的介绍,就不再累赘了。此外需要注意的是,Magento2是一套对系统要求非常高的软件系统,一般配置的电脑跑起来非常吃力,推荐服务器基础配置能达到4核、8G内存,如果有能力,尽量分布式部署,将Redis服务器,数据库分开部署,这样对系统的性能将能达到最大程度的提升。

3. Windows10 本地安装

在国内用composer方式安装Magento2是一个痛苦的过程,而且必须要借助梯子(vpn)才能够勉强安装。
系统本地环境用的是wamp,magento版本选用的是2.1.7版本。

环境需求:
(1)Mysql:5.7版本(Magento2.1.2+)
(2)Apache:2.2或2.4,mod_rewrite模块必须开启
(3)PHP:7.0.2、7.0.4、7.0.6-7.0.x、5.6.5–5.6.x
(4)SSL:默认情况下,magento要求部署HTTPS,必须开启TLS,这在安装过程中的检测步骤会遇到,自签名的证书将不会被允许

(1)用git或直接下载zip的方式从GitHub(https://github.com/magento/magento2)上把源码下载到本地,放在网站的根目录,并配置好 apache VirtualHost

<VirtualHost 192.168.2.222:80>
DocumentRoot "D:/wwwroot/mymgt2.cn"
ServerName www.mymgt2.cn
ServerAlias *.mymgt2.cn
</VirtualHost>

(2)安装composer,从 https://getcomposer.org/download/ 中下载对应的composer安装程序,并按提示完成安装。然后在网站根目录执行如下命令,进行依赖包的下载:

composer install

下载过程中可能会遇到php扩展报错的问题,将对应的extention打开就好,然后就是一个漫长的等待过程(可能会持续好几个小时)。magento2对php的版本要求很高,如果没选使用要求的版本的话,将会报出各种莫名的错误,此外,在windows环境下,就算选对了php版本,也会有各种莫名其妙的扩展错误,你会发现,明明已经开启了扩展,然而还是会检测不到,安装进行不下去。
建议找关于magento2的相关问题,不要用百度,而用google,而且直接用英文方式搜索。为什么要这么做呢?答案是:

  • magento2在国内应用的比较少,不太适合天朝环境,自然国内的提问会比较少
  • 你会发现百度搜出来的结果千篇一律,都是你抄我我抄你
  • 用Google带中文搜索,结果跟百度差不多,但是会比百度好
  • 用Google全英搜索,你将得到你想知道的所有答案,对,是你在使用magento过程中遇到的所有答案,但前提是要基本能看得懂这些鸡肠(English)
    (3)打开浏览器,输入http://www.mymgt2.com/ 便会看到安装界面,按提示完成安装即可。
    (4)更新缓存和索引,在命令行下运行以下命令
php bin/magento cache:clean
php bin/magento cache:flush
php bin/magento indexer:reindex

(5)若发现前后台样式文件加载不成功的话,可以执行如下命令,让系统重新生成静态文件

php bin/magento setup:static-content:deploy

(6)安装汉化包,到 https://github.com/benheart/magento2_zh_hans_cn 中下载汉化包,解压放到 /app/i18n/benheart/magento2_zh_hans_cn 目录下,在根目录下执行如下命令

php bin/magento cache:clean && php bin/magento setup:static-content:deploy zh_Hans_CN

中文语言包安装成功了,其它语言,如意大利文安装过程也如此。
(7)管理后台设置为中文:Stores -> Configuration -> General > General -> Locale options -> Chinese (China)
(8)配置计划任务,定时执行如下命令

php bin/magento cron:run

由于是开发环境,在此并没有真正为这配置定时任务。
至此,Magento2就安装完成了。
当然,在安装过程并不会如此一帆风顺,so 这是考验搜索能力和耐力的时候了。
还有就是想吐槽一下,magento2在这环境下,运行真慢得让人受不了,我的I5+8G内存的自己,打开一个网页都要几十秒甚至更长的时间,内存经常占满,所以说,单机并不太适合Magento2的运行。

3. Windows Server 2012 r2 安装

由于公司买的阿里云服务器用的是windows系统,自然服务器环境用的是IIS,但是此环境对Magento2非常之不友好,安装各种报错,各种问题,最后受不了,在服务器上由单独安装了一个wamp,运行时为了不占用IIS的80端口,所以另外开了一个8088端口给apache,访问网站时,域名后必须带上端口号8088。除此之外,安装过程基本与本机安装没太多区别。安装除了composer过程比本机还慢之外,其它都好算顺利。

4. Ubuntu 安装

服务器客户用的是亚马逊AWS,由于客户对这方面不太了解,所以就托给我来搞啦。

外话,亚马逊服务器购买
由于使用的地方是意大利,所以亚马逊账号必须为国外版,国内的账号是用不了,而且必须在注册的时候绑定信用卡,你在亚马逊购买服务器或服务的时候,钱会直接从信用卡里面扣,你会发现这个扣费过程非常简单,很多连一个确认框都没有就已经发钱花出去了,这都是白花花的美元哪。
亚马逊在服务器领域提供的服务比阿里云还丰富,各种琳琅满目的服务期都有,我这里开始选用的是EC2虚拟云主机,它是以小时为单位,按需付费,当关闭了实例以后,将会停止计费。这里需要特别注意的是,这里的计费周期是1小时,如果你没满完整的一个小时,中途关闭了实例,然后又启动的话,此时将会重新开始以个新的计费周期,也就是说,之前未满一小时的按一小时算,从这一时刻开始计算下一周期的时间和费用。所以需要重启实例的话,可以使用“重启”操作,不要先关闭,然后开启,这将产生不比较的费用。
在此过程中,我选用的是m4.xlarge型的主机,配置还算比较高,所以按需付费方式计算下来,一年也要2000多美刀,折合人民币16000左右。这笔费用真挺高。后来了解到,可以购买EC2预留实例的方式来获得主机费用的折扣,EC2预留实例与按需实例的定价相比,Amazon EC2 预留实例 (RI) 可提供大幅折扣 (最高可达 75%),并且在特定可用区中使用时还可提供容量预留。也就是说,你买了一个EC2预留实例,比方说我这里购买的是m4.xlarge型的预留实例,然后去开启一个满足这预留实例要求的m4.xlarge实例的话,将不用付额外的费用,除了硬盘、IP等之外。这样一年下来可以省个40%左右的费用,也不少了!不过这里要特别注意的是,开启的实例一定要符合预留实例的要求,不然一样会扣费,所以要多留意一下账单的扣费内容,必要时找亚马逊客服交涉,不过前提是,你的鸡肠(English)很牛逼,因为客服都是讲鸡肠的,而我就是沟通不了的,客服给我打电话时,我:“Can you speak in Chinese?”,客服:“No. I'm sorry.”,我内心是奔溃的T.T~~

言归正传。
(1)为了方便,我用的是LNMP一键安装包,安装过程可以参考 https://lnmp.org/install.html 。需要注意的是,mysql选择5.7+版本,php选用7+版本
(2)如果php版本没有符合magento2的要求的话,可以更换php版本。进入lnmp解压的目录,执行如下命令

sudo ./upgrade_php.sh phpa

然后输入对应php版本的版本号,即可自动安装,这点对LNMP一键安装包还是挺喜欢的。
(3)添加vhost

// 按提示完成vhost的创建
sudo lnmp vhost add

(4)安装ftp,进入lnmp解压的目录,执行如下命令

// 按提示添加ftp用户
./pureftpd.sh

(5)将Magento2安装包通过ftp上传到网站根目录,解压缩

sudo unzip magento2.zip ./ 

(6)其它步骤,在命令行下,跟windows一样,只是基本都要用root权限来执行,即在命令前加sudo。此外要注意php的版本,若系统已经自带了php的话,用 php -v来查看php版本,若是magento2不支持的版本,会报错。
(7)在浏览器中进行安装时,有可能会报如下错误

PHP Version Check Your PHP version is . The required PHP version is . Hide detail
Download and install PHP from www.php.net using this PHP Documentation.
For additional assistance, contact your hosting provider.

这是因为没启动https引起的,若要跳过的话,可以打开网址根目录下的composer.json文件,找到

"use-include-path": true,
// 在这句后面加上下面的这句话,注意上面这句话结尾要加“,”
"disable-tls": true

再检测就能通过了。


全力以赴,勇往直前 ..