七 配置和使用Varnish
Varnish 解决方案概述
Varnish 缓存是一个开放源代码的Web应用程序加速器.
Magento 2 支持Varnish 3.0.5以上的版本.
magento 2 强烈建议使用Varnish 代替默认的. full-page 缓存,因为他比默认的缓存快很多。
Varnish 解析图
过程概述
本主题讨论如何使用 少的参数和测试来安装Varnish。然后你可以从Magento 2后台导出一个Varnish配置。
这个过程可以概括如下:
通过访问任何magento页面如果你得到HTTP响应头表明Varnish工作测试成功
安装magento 2 登录后台创建一个Varnish 配置文件.
覆盖原先的Varnish配置文件.
再次测试一切。
如过 <Magento 2 安装目录>/var/page_cache 目录下面什么都没有,表示Varnish 配置成功!
@安装Varnish
有关安装Varnish的更多信息,请网上搜索教程。
确认你的Varnish版本
输入下面的命令:
varnishd -V
示例:
varnishd (varnish-4.0.3 revision b8c4a34)
Copyright (c) 2006 Verdens Gang AS
Copyright (c) 2006-2014 Varnish Software AS
@配置Varnish 和 web服务器
配置您的web服务器
配置Web服务器监听默认端口80以外的端口,因为Varnish直接响应传入的HTTP请求,而不是web服务器。
在后面的章节中,我们使用端口8080作为一个例子.
改变Apache 2.2监听端口:
打开
/etc/httpd/conf/httpd.conf
在文本编辑器中.查找
Listen
指令.将端口的值更改为
8080
.保存更改
httpd.conf
.
修改Varnish系统配置
打开
/etc/sysconfig/varnish
(或/etc/default/varnish
在 Debian 和 Ubuntu) 在文本编辑器中.设置Varnish 端口为 80:
VARNISH_LISTEN_PORT=80
## Alternative 1, Minimal configuration, no VCL #DAEMON_OPTS="-a :6081 \ # -T localhost:6082 \ # -b localhost:8080 \ # -u varnish -g varnish \ # -s file,/var/lib/varnish/varnish_storage.bin,1G" ## Alternative 2, Configuration with VCL #DAEMON_OPTS="-a :6081 \ # -T localhost:6082 \ # -f /etc/varnish/default.vcl \ # -u varnish -g varnish \ # -S /etc/varnish/secret \ # -s file,/var/lib/varnish/varnish_storage.bin,1G"
保存更改
/etc/sysconfig/varnish
.
@配置Magento 2使用Varnish
配置Magento使用Varnish :
用管理员身份登录magento 2.
点击 STORES > Configuration > ADVANCED > System > Full Page Cache
从缓存应用列表中点击Varnish 缓存
点击 保存配置.
单击一个导出按钮以创建
default.vcl
你可以使用 Varnish.
如果使用Varnish 4, 点击 Export VCL for Varnish 4
如下图:代替之前的
default.vcl
@ 后的验证
验证HTTP响应头
当你访问magento页面时使用curl或其他工具查看HTTP响应头
确保你使用的magento 2 开发者模式; 否则,你将无法看到。
例如,
curl -I -v --location-trusted 'http://192.0.2.55/magento2'
X-Magento-Cache-Control: max-age=86400, public, s-maxage=86400 Age: 0 X-Magento-Cache-Debug: MISS
@503(Backend Fetch Failed后端获取失败)
如果Magento2缓存标签使用长度超过8192个字符,你可以看到HTTP 503(后台读取失败)在浏览器中的错误。这些错误可能显示如下:
Error 503 Backend fetch failed Backend fetch failed
为了解决这个问题,修改varnish配置文件如下:
用
root
用户打开:CentOS 6:
/etc/sysconfig/varnish
CentOS 7:
/etc/varnish/varnish.params
Ubuntu:
/etc/default/varnish
搜索
http_resp_hdr_len
参数.如果参数不存在增加
thread_pool_max
.设置
http_resp_hdr_len
示例:
-p http_resp_hdr_len=64000 \
代码片段:
# DAEMON_OPTS is used by the init script. DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \ -f ${VARNISH_VCL_CONF} \ -T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \ -p thread_pool_min=${VARNISH_MIN_THREADS} \ -p thread_pool_max=${VARNISH_MAX_THREADS} \ -p http_resp_hdr_len=64000 \ -S ${VARNISH_SECRET_FILE} \ -s ${VARNISH_STORAGE}"
八 Magento 2多个网站或商店
Magento 2多个网站或商店介绍
Magento 2安装一套程序可以让你启动多个网站或商店,使用不同的视图:
不同的语言
不同的域名
不同的产品分类
这种灵活的解决方案使一套Magento后台程序管理和显示不同的商店.
@后台设置多个网站,商店和商店视图
1: 创建产品根目录
登录到Magento 2后台.
点击 Products > Categories.
点击 Add Root Category.
在 Category Name 输入分类名称.
确保 Enable Category 设置 Yes.
如下图:
点击 Save.
2: 创建 websites(网站)
点击 Stores > 设置 > All Stores.
在商店页面, 点击 Create Website.
如下图:
Name 字段: 输入网站名称.
Code 字段: 输入唯一标识
Sort Order 字段: 设置一个数字网站排序.
点击 Save Web Site.
3: 创建商店
点击 Stores > 设置 > All Stores.
在商店页面, 点击 Create Store.
如下图:
点击 Save Store.
4: 创建商店视图
点击 Stores > 设置 > All Stores.
在商店页面, 点击 Create Store.
如下图:
点击 Save Store View.
5: 更改网站的基础网址
在管理页面, 点击 Stores > 设置 > Configuration > General > Web.
点击 Save Config.
6: 添加商店code
点击 Save Config.
九 设置自定义定时任务(cron)和计划组(cron group)
@配置自定义定时任务(cron )和计划组(cron group)教程
本教程教你一步一步的创建一个自定义的cron job(定时任务),任选一个cron group。
1: 获取示例模块
登录到magento服务器,切换到 Magento 2文件系统所有者.
克隆 magento2 样本库.
示例
cd ~ git clone git@github.com:magento/magento2-samples.git
创建一个目录来拷贝示例代码:
mkdir -p /var/www/html/magento2/app/code/Magento/SampleMinimal
复制示例模块代码:
cp -r ~/magento2-samples/sample-module-minimal/* /var/www/html/magento2/app/code/Magento/SampleMinimal
验证文件是否正确复制:
ls -al /var/www/html/magento2/app/code/Magento/SampleMinimal
You should see the following result:
drwxrwsr-x. 4 magento_user apache 4096 Oct 30 13:19 . drwxrwsr-x. 121 magento_user apache 4096 Oct 30 13:19 .. -rw-rw-r--. 1 magento_user apache 372 Oct 30 13:19 composer.json drwxrwsr-x. 2 magento_user apache 4096 Oct 30 13:19 etc -rw-rw-r--. 1 magento_user apache 10376 Oct 30 13:19 LICENSE_AFL.txt -rw-rw-r--. 1 magento_user apache 10364 Oct 30 13:19 LICENSE.txt -rw-rw-r--. 1 magento_user apache 1157 Oct 30 13:19 README.md -rw-rw-r--. 1 magento_user apache 270 Oct 30 13:19 registration.php drwxrwsr-x. 3 magento_user apache 4096 Oct 30 13:19 Test
更新Magento 2 数据库和schema:
php /var/www/html/magento2/bin/magento setup:upgrade
2: 验证样本模块
用管理员身份登录magento 2后台
点击 Stores > Configuration > ADVANCED > Advanced.
如下图:
3: 创建一个类来运行cron
为类创建目录并更改目录:
mkdir /var/www/html/magento2/app/code/Magento/SampleMinimal/Cron && cd /var/www/html/magento2/app/code/Magento/SampleMinimal/Cron
在目录中创建了一个名为
Test.php
的文件:
<?php namespace Magento\SampleMinimal\Cron; use \Psr\Log\LoggerInterface; class Test { protected $logger; public function __construct(LoggerInterface $logger) { $this->logger = $logger; } /** * Write to system.log * * @return void */ public function execute() { $this->logger->info('Cron Works'); } }
4: 创建 crontab.xml
在 /var/www/html/magento2/app/code/Magento/SampleMinimal/etc
目录创建 crontab.xml
:
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd"> <group id="default"> <job name="custom_cronjob" instance="Magento\SampleMinimal\Cron\Test" method="execute"> <schedule>* * * * *</schedule> </job> </group> </config>
5: 验证cron job
运行 Magento cron jobs:
php /var/www/html/magento2/bin/magento cron:run
输入
magento cron:run
命令运行查询sql
SELECT * from cron_schedule WHERE job_code like '%custom%'
如下:查询结果:
+-------------+----------------+---------+----------+---------------------+---------------------+---------------------+---------------------+ | schedule_id | job_code | status | messages | created_at | scheduled_at | executed_at | finished_at | +-------------+----------------+---------+----------+---------------------+---------------------+---------------------+---------------------+ | 3670 | custom_cronjob | success | NULL | 2016-11-02 09:38:03 | 2016-11-02 09:38:00 | 2016-11-02 09:39:03 | 2016-11-02 09:39:03 | | 3715 | custom_cronjob | success | NULL | 2016-11-02 09:53:03 | 2016-11-02 09:53:00 | 2016-11-02 09:54:04 | 2016-11-02 09:54:04 | | 3758 | custom_cronjob | success | NULL | 2016-11-02 10:09:03 | 2016-11-02 10:09:00 | 2016-11-02 10:10:03 | 2016-11-02 10:10:03 | | 3797 | custom_cronjob | success | NULL | 2016-11-02 10:24:03 | 2016-11-02 10:24:00 | 2016-11-02 10:25:03 | 2016-11-02 10:25:03 | +-------------+----------------+---------+----------+---------------------+---------------------+---------------------+---------------------+
输入
mysql -u magento -p
输入
use magento;
输入
SELECT * from cron_schedule WHERE job_code like '%custom%';
6: 设置自定义 cron group
打开
crontab.xml
在文本编辑器.更改
<group id="default">
为<group id="custom_crongroup">
保存.
创建
/var/www/html/magento2/app/code/Magento/SampleMinimal/etc/cron_groups.xml
具有以下内容:
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/cron_groups.xsd"> <group id="custom_crongroup"> <schedule_generate_every>1</schedule_generate_every> <schedule_ahead_for>4</schedule_ahead_for> <schedule_lifetime>2</schedule_lifetime> <history_cleanup_every>10</history_cleanup_every> <history_success_lifetime>60</history_success_lifetime> <history_failure_lifetime>600</history_failure_lifetime> </group> </config>
7: 验证 cron group
运行cron job 在Magento自定义组:
php /var/www/html/magento2/bin/magento cron:run --group="custom_crongroup"
至少运行两次命令。
清除magento 2缓存:
php /var/www/html/magento2/bin/magento cache:clean
用管理员身份登录到后台.
点击 Stores > Configuration > Advanced > System.
在右窗格中展开 Cron.
如下图:
十 配置数据库分析器(profiler)
关于数据库分析器(profiler)
Magento数据库分析器显示页面上执行的所有查询,包括每个查询的时间和什么样的参数被执行。
1: 修改部署配置
修改
<Magento 2 安装目录>/app/etc/env.php
将下列代码添加到 magento2/blob/2.0/lib/internal/Magento/Framework/DB/Profiler.php:'profiler' => [ 'class' => '\Magento\Framework\DB\Profiler', 'enabled' => true, ],
示例如下:
'db' => array ( 'table_prefix' => '', 'connection' => array ( 'default' => array ( 'host' => 'localhost', 'dbname' => 'magento', 'username' => 'magento', 'password' => 'magento', 'model' => 'mysql4', 'engine' => 'innodb', 'initStatements' => 'SET NAMES utf8;', 'active' => '1', 'profiler' => [ 'class' => '\Magento\Framework\DB\Profiler', 'enabled' => true, ], ), ), ),
2: 配置输出
/** @var \Magento\Framework\App\ResourceConnection $res */ $res = \Magento\Framework\AppObjectManager::getInstance()->get('Magento\Framework\App\ResourceConnection'); /** @var Magento\Framework\DB\Profiler $profiler */ $profiler = $res->getConnection('read')->getProfiler(); echo "<table cellpadding='0' cellspacing='0' border='1'>"; echo "<tr>"; echo "<th>Time <br/>[Total Time: ".$profiler->getTotalElapsedSecs()." secs]</th>"; echo "<th>SQL [Total: ".$profiler->getTotalNumQueries()." queries]</th>"; echo "<th>Query Params</th>"; echo "</tr>"; foreach ($profiler->getQueryProfiles() as $query) { /** @var Zend_Db_Profiler_Query $query*/ echo '<tr>'; echo '<td>', number_format(1000 * $query->getElapsedSecs(), 2), 'ms', '</td>'; echo '<td>', $query->getQuery(), '</td>'; echo '<td>', json_encode($query->getQueryParams()), '</td>'; echo '</tr>'; } echo "</table>";
3: 查看输出结果
访问magento 2 的任何页面,示例结果如下图:
十一 自定义日志
日志概述
日志提供可见性Magento系统过程;例如,调试信息,帮助您了解当发生错误或什么导致的误差。
本课题重点研究基于文件的记录,虽然Magento提供了灵活性,存储在数据库。
@Magento2日志的更多细节
Monolog
Magento 2 使用 PSR-3 标准. By default默认情况下, Magento 2 使用 Monolog. Monolog 实现 Psr\Log\LoggerInterface接口,在di.xml配置文件中.
开始使用日志
要开始使用日志,您必须得到 \Psr\Logger\LoggerInterface
示例 – 数据库日志活动
记录数据库日志,使用Magento\Framework\DB\LoggerInterface, 其中有两种实现方案:
Logs nothing (默认): Magento\Framework\DB\Logger\Quiet
日志保存在 var/log 目录: Magento\Framework\DB\Logger\File
添加下面的块以配置基于文件的日志:
<type name=”Magento\Framework\DB\Logger\File”>
<arguments>
<argument name=”logAllQueries” xsi:type=”boolean”>true</argument>
<argument name=”debugFile” xsi:type=”string”>log/db.log</argument>
</arguments>
</type>
另一种方式如下:
class SomeModel
{
private $logger;
public function __construct(\Psr\Logger\LoggerInterface $logger)
{
$this->logger = $logger;
}
public function doSomething()
{
try {
//do something
} catch (\Exception $e) {
$this->logger->critical(‘Error message’, [‘exception’ => $e]);
}
}
}
十二 如何定位session文件
定位你的Session 存储
本主题讨论如何定位会话文件的存储位置。Magento的应用程序使用以下逻辑存储会话文件:
如果你配置redis,会话存储在redis服务器;有关更多信息,参见 使用 Redis 在页面缓存或Session 存储.
如果使用的是默认的 file-based Session 存储,session文件存储如下:
目录定义在 env.php
目录定义在 php.ini
<Magento 2 安装目录>/var/session 目录
env.php 示例
<Magento 2 安装目录>/app/etc/env.php 示例代码片段:
‘session’ =>
array (
‘save’ => ‘files’,
‘save_path’ => ‘/var/www/session’,
),
前面的示例存储会话文件在 /var/www/session
php.ini 示例
打开php.ini 文件,查找 session.save_path.
十三 Magento 2的生产(上线)部署
本主题提供了在生产服务器上使用命令行部署更新Magento 2。
推荐使用系统升级在Magento 2系统管理中.
你安装Magento使用 Composer 或 compressed archive.
@部署步骤
登录到magento 2服务器,切换到Magento 2文件系统所有者.
改变目录到Magento安装目录:
cd <Magento安装目录>
使用命令启用维护(maintenance)模式:
php bin/magento maintenance:enable
更新magento 2:
composer require <package> <version> --no-update
示例:
magento/product-community-edition
magento/product-enterprise-edition
更新magento2 组件:
composer update
更新数据库结构和数据:
php bin/magento setup:upgrade
编译代码:
php bin/magento setup:di:compile
部署静态内容 :
php bin/magento setup:static-content:deploy
退出:
php bin/magento maintenance:disable