这是我们的重头戏。万事俱备,只欠东风。
我们将在目录var/www/magento2
中安装Magento。
对于Magento安装,我们需要PHP Composer
。
一,安装Composer
Composer是PHP的依赖管理器,你可以使用它来安装软件包。Composer将会为你的项目提供所需的所有库和依赖项。
转到根目录,使用curl下载composer安装程序文件并运行它以安装composer。
cd ~/
curl -sS https://getcomposer.org/installer | php
将文件'composer.phar'文件移动到服务器的bin目录,并将其重命名为composer,以便轻松执行
mv composer.phar /usr/bin/composer
现在验证composer命令是否正常工作:
composer -v
二,下载并提取Magento 2
特别强调下:
能用composer
方式安装就一定要用composer
安装。
以后M2升级的话 会方便很多。
用源码包
方式安装也可以,升级也很方便,跟上面是一样的。
用github
方式安装的话,以后升级会比较麻烦,仅供本地测试用,不宜上线用,因为github
里的是给开发者测试用的。
用composer
方式安装 (推荐)
如果你的服务器是在国外,比如AWS/DigitalOcean的话,可以直接用composer
下载最新版的M2,并且会自动帮你安装各种依赖库。
截止到目前最新版是2.3.0
参考:https://devdocs.magento.com/guides/v2.3/install-gde/composer.html
cd /var/www/
composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition magento2
用这种方式下载的话,会提示你输入Magento密钥,配置方法见下面的三,配置Magento密钥
。
Username
是Public Key
Password
是Private Key
用源码包
方式安装 (推荐)
去官网
https://magento.com/tech-resources/download
或者去
//bbs.mallol.cn/?thread-154.htm
下载对应版本的源码包。
解压到/var/www/magento2
目录下。
这个源码包的内容跟 用composer方式安装
下载的源码是一样的。
用github
方式安装 (不推荐)
注意:
这种方式仅供开发测试,不宜上线,因为这是给开发人员用的,以后升级会很麻烦。
其实这个跟上面2种方式的源码内容除了核心文件存放路径不一样外,其他都是一样的。
用国内服务器的话,composer下载太慢,经常超时,下载不完全,导致后续各种奇怪的问题。
所以国内服务器的话 直接下载github里的压缩包 解压后安装。
从Github存储库下载Magento,然后解压下载的tar.gz文件。
获取最新的稳定版本,在编写本教程的时候是Magento 2.2.4:
cd /var/www/
wget https://github.com/magento/magento2/archive/2.2.4.tar.gz
tar -xzvf 2.2.4.tar.gz
mv magento2-2.2.4/ magento2/
还有一点要注意下,
weget下载2.2.4.tar.gz的时候 也比较慢
2.2.4.tar.gz.1 [ <=> ] 18.05K 13.1KB/s
有时候因为网络原因,下载不完全,所以下载完成后要检查下文件大小,如果少于20M的话 就不行 得重新下载。
三,配置Magento密钥
在Magento网站 marketplace.magento.com 上注册一个帐户。这个账户需要使用Magento和Magento Composer商店。注册后,转到选项卡My Profile > My Access Keys > Magento 2,然后生成密钥。
这个地方经常搞错:
Public Key
是Username
Private Key
是Password
四,安装Magento的第三方组件
注意:
用github方式安装的话,需要下载第三方组件。
用composer和源码包方式安装的,不需要执行这一步,因为第三方组件都已经有了,在vendor
下面。当然你执行了也没事,不会怀孕。
转到Magento 2安装目录/var/www/magento2
并运行composer
命令:
cd /var/www/magento2/
composer install -v
如果要求进行Magento身份验证的话,使用配置Magento密钥
配置的公钥作为用户名,私钥作为密码。
耐心等待安装完成后,就做下一步。
五,命令行一键安装M2
我们将在命令行上安装M2。在M2目录/var/www/magento2/bin/
中,有一个名为magento
的二进制文件,用于安装和管理magento
。
在/var/www/magento2
下:
运行命令:
php bin/magento setup:install --backend-frontname="adminlogin" \
--key="65b07bf53f4d7ee8f4b884c102e5ee62" \
--base-url="http://magento2demo.texiaoyao.cn" \
--base-url-secure="https://magento2demo.texiaoyao.cn" \
--db-host=localhost \
--db-name=magento2 \
--db-user=magento_user \
--db-password='mi@$wEw*d8' \
--admin-firstname=Zou \
--admin-lastname=Last \
--admin-email=zouhongzhao@126.com \
--admin-user=admin \
--admin-password=123A_Zhz \
--language=en_US \
--currency=USD \
--timezone=America/Chicago \
--use-rewrites=1
注意:一定要复制到代码编辑器或者纯文本编辑器去修改,因为有些编辑器自动转换标点符号了,导致运行命令报错。
参数解释:
backend-frontname
=> 我们使用的magento网站的管理页面adminlogin
key
=> 我们的magento键,用来加密数据库的敏感数据, 默认自动生成,我们也可以手动填写,或者在http://randomkeygen.com/
上随机生成一个。注意:不能超过32个字符。base-url
=> 就是网站域名,确保它与nginx虚拟主机配置的域名相同db-name
=>m2的数据库名,在配置Mysql
的时候已创建db-user
=> 数据库用户名,在配置Mysql
的时候已创建db-password
=> 数据库密码,在配置Mysql
的时候已创建,注意这密码有前后单引号,如果密码有特殊字符的话,要加单引号,不然报错admin-user
=>后台admin用户名,没有就自动创建admin-password
=> 后台admin用户的密码language
=> 网店默认语言currency
=> 网店默认货币timezone
=>网店默认时区
如果你的数据库端口不是3306,而是别的(比如3308),那么你可以这样写:
--db-host=localhost:3308
在安装过程结束时,你应该看到以下这些行:
[SUCCESS]: Magento installation complete.
[SUCCESS]: Magento Admin URI: /adminlogin
给项目设置权限:
必须要设权限,不然会报各种权限错误!
cd /var/www/magento2/
find . -type f -exec chmod 644 {} \; && find . -type d -exec chmod 755 {} \; && chmod 777 var/ -R && find pub/media -type d -exec chmod 777 {} \; && find pub/static -type d -exec chmod 777 {} \; && chmod 777 app/etc && chmod 644 app/etc/*.xml && chmod u+x bin/magento
在测试Magento2之前,确保Web目录所有者是www-data
,然后重新启动nginx。
cd /var/www/magento2/
chown -R www-data:www-data .
systemctl restart nginx
现在在你的浏览器中打开Magento2域名:
就我而言,域名是:magento2demo.texiaoyao.cn。
尝试登录到Magento后台管理仪表板:
magento2demo.texiaoyao.cn/adminlogin
OK! 厉害了! 到现在为止,算是大功告成了。
现在安装了Ubuntu 16.04上的Nginx和PHP-FPM 7的Magento 2。
以后项目部署上线后,还会配置Redis和Varnish来提高速度。
这个我们后续再讲。
六,一些设置
后台Configuration -> ADVANCED -> Admin ->Security
这样设置的话,就不会强制性的提示你修改密码了。
同一个账号 可以多个人同时登录后台。
七,(非常重要) 服务器创建m2项目用户
下面的步骤都在root下执行
因为目前项目的用户是www-data,这是nginx默认用户。无法切换到该用户,是不可用的。
root@xxx:/var/www/magento2# su www-data
This account is currently not available.
并且我们一般不要直接用root账号来操作,避免误删,把系统搞坏。
所以我们必须创建个普通用户,比如我的普通用户是zou。
1,先创建用户zou,并设置密码
adduser zou
passwd zou
2,给zou添加sudo权限
vim /etc/sudoers
如果用上面的vim
编辑后保存不了的话 就用
visudo
添加
zou ALL=(ALL:ALL) ALL
这样的话,用zou用户登录后,可以直接
用sudo su
快速切换到root用户
3,把zou加入web服务器组,也就是拥有www-data的权限
//把zou用户加入www-data组
usermod -a -G www-data zou
//查看www-data组,看是否包含zou用户
groups www-data
//重启nginx
systemctl restart nginx
4,设置m2项目文件的所有权
root下执行
记得把里面的zou
改成你自己创建的普通用户
cd /var/www/magento2
find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} \;
find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} \;
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;
find ./var -type d -exec chmod 777 {} \;
chmod 777 var/ -R
find ./pub/media -type d -exec chmod 777 {} \;
find ./pub/static -type d -exec chmod 777 {} \;
chmod 777 ./app/etc
chmod 644 ./app/etc/*.xml
chown zou:zou . -hR
chmod u+x bin/magento
chmod -R g+rwxs .
ls -la
可以看到,m2文件权限变了。用用户zou登录可以直接管理m2源代码了。
以后直接用zou登录,不需要用root登录了。
还需要把/var/www整个目录权限给zou用户。如果有多个网站的话,便于修改网站代码。否则没权限修改。
chown zou:zou /var/www
然后还得改下php-fpm和nginx配置文件,把www-data改成zou。不改的话到时候一大堆权限错误,非常蛋疼。
PHP7.0版本是:
vim /etc/php/7.0/fpm/pool.d/www.conf
PHP7.1版本是:
vim /etc/php/7.1/fpm/pool.d/www.conf
PHP7.2版本是:
vim /etc/php/7.2/fpm/pool.d/www.conf
用;
号注释
;user = www-data
;group = www-data
user = zou
group = zou
;listen.owner = www-data
;listen.group = www-data
listen.owner = zou
listen.group = zou
保存。
Nginx配置文件是:
vim /etc/nginx/nginx.conf
把user www-data
改成user zou
;
注意这个后面有分号;
。
再重启下nginx和php-fpm
systemctl restart nginx
systemctl restart php7.0-fpm (php7.0版本)
systemctl restart php7.1-fpm (php7.1版本)
systemctl restart php7.2-fpm (php7.2版本)
科普下:
nginx 本身不能处理 PHP,它只是个 web 服务器。当接收到客户端请求后,如果是 php 请求,则转发给 php 解释器处理,并把结果返回给客户端。如果是静态页面的话,nginx 自己处理,然后把结果返回给客户端。
Nginx 下 php 解释器使用最多的就是 fastcgi 。一般情况 nginx 把 php 请求转发给 fastcgi 管理进程处理,fastcgi 管理进程选择 cgi 子进程进行处理,然后把处理结果返回给 nginx。
在这个过程中就牵涉到两个用户,一个是 nginx 运行的用户,一个是 php-fpm 运行的用户。如果访问的是一个静态文件的话,则只需要 nginx 运行的用户对文件具有读权限或者读写权限。
而如果访问的是一个 php 文件的话,则首先需要 nginx 运行的用户对文件有读取权限,读取到文件后发现是一个 php 文件,则转发给 php-fpm,此时则需要 php-fpm 用户对文件具有有读权限或者读写权限。
八,更新系统
安装完成后 最好更新下系统 以防万一
这一连串命令 要依次执行 缺一不可 是按顺序互相关联的。
一定要记住,用这一连串命令可以解决你99%的报错问题。
在zou
用户下执行
php bin/magento maintenance:enablerm -rf var/di/* && rm -rf var/generation/* && rm -rf var/cache/* && rm -rf var/page_cache/* && rm -rf var/view_preprocessed/* && rm -rf pub/static/* && rm -rf generated/* && mkdir var/diphp bin/magento setup:upgrade && php bin/magento setup:di:compilephp bin/magento setup:static-content:deploy -f && php bin/magento indexer:reindex && php bin/magento maintenance:disable && php bin/magento cache:clean && php bin/magento cache:flush
九,配置Cronjob
注意:如果你收到有关缺少Magento索引器cronjob的错误,则可以通过将以下cronjob添加到您的服务器来解决它:
注意:你的crontab
用户必须跟项目主用户一致,不然又会出现权限问题。
failed to open stream: Permission denied in /var/www/magento2/vendor/colinmollenhour/cache-backend-file/File.php on line 663
比如,本教程项目的主用户都是zou
。那么你crontab用户也必须是zou
。
也就是说:
- 切换到
zou
用户(su zou
)或者直接用zou
用户登录 - 在
zou
用户里输入命令crontab -e
crontab -e
如果是用composer下载安装的,添加以下行:
* * * * * /usr/bin/php /var/www/magento2/bin/magento cron:run | grep -v "Ran jobs by schedule" >> /var/www/magento2/var/log/magento.cron.log
* * * * * /usr/bin/php /var/www/magento2/update/cron.php >> /var/www/magento2/var/log/update.cron.log
* * * * * /usr/bin/php /var/www/magento2/bin/magento setup:cron:run >> /var/www/magento2/var/log/setup.cron.log
如果是用github下载安装的,只需添加以下行:
* * * * * /usr/bin/php /var/www/magento2/bin/magento cron:run | grep -v "Ran jobs by schedule" >> /var/www/magento2/var/log/magento.cron.log
也就是说github安装的缺少update/cron.php
和setup:cron:run
。
这2项是用来定时检测 升级M2版本
和更新组件
时并写入日志的,只有composer
安装才支持。
github安装的 需要手动升级M2版本和组件。
保存并退出。
设置完后,用crontab -l
命令查看是否设置成功。
如果你是在root用户,你可以直接指定crontab
用户进行设置。
crontab -u zou -e
注意,如果上线后,这个cron是必须要配置的,因为它能定时刷新索引(reindex)和定时升级依赖包/定时发送order邮件等等
参考 //bbs.mallol.cn/?thread-147.htm
也可以用m2的命令来自动配置cron,
php bin/magento cron:install
参考:https://devdocs.magento.com/guides/v2.3/config-guide/cli/config-cli-subcommands-cron.html
十,注意事项
在刚开始安装php的时候已经预装了git,所以无需再安装,直接使用即可。
如果没有的话,直接用命令行安装
sudo apt-get install git
十一,(非常重要)接下来的教程,若无特殊说明,都是用zou
用户登录。
记住,你也许不是创建的zou
用户,是其他名字的用户,用你自己创建的用户即可。
为了避免混乱,我都直接用zou
用户来讲解。
十二,一些常见报错
问题已转移到下一章使用Magento2
->常见问题
里。