PHP 教程:Composer 最佳实践
概述
Composer 是 PHP 应用程序的依赖管理器,最初发布于大约 8 年前,2012 年 3 月。
在 php 中使用 Composer 可以提高代码的可重用性,并使你的项目能够轻松地集成来自Packagist(主要的 PHPComposer 库)的 PHP 库。今天,我们将重点介绍几个部署最佳实践。
Composer 可能会变慢
这篇文章将关注如何让 Composer 速度更快,并在每次部署应用程序时不再需要使用全新的 Composer 安装来安装软件包。
Magento 是一个需要大量内存的 composer 项目的例子。如果你需要为每个部署安装 Composer,你能想象需要多少内存吗?Composer 可能会因为内存不足而失败,如Stack Overflow 帖子所述。
尽管将包添加到你的项目中很容易,但在 Amezmo 这里,我们采用保守的方法添加新的项目依赖项,原因如下。
- 减慢初始 Composer 安装速度
- 每个 Composer 包都会增加新安全问题的可能性
最佳做法
--no-ansi
此标志禁用 ANSI 输出,这意味着彩色输出将被禁用。彩色输出,如绿色和红色字体颜色以及人眼喜欢的背景颜色。这对于我们手动运行 Composer 时非常有用,但是对于自动部署,我们不想用奇怪的字符扰乱我们的日志文件。
--no-interaction
同样,在自动化部署的环境中,我们不希望部署在等待输入时停滞不前。此标志阻止 Composer 要求用户输入。
--optimize-autoloader
此标志告诉 Composer 将生成的代码自动加载。autoloader 是当你的入口点确实需要 'vendor/autoload.php' 时调用的;
--no-progress
由于进度报告使用特殊的终端 ANSI 代码,因此我们不希望报告进度,因为它会使我们的日志文件混乱。在进行非交互式
部署和 composer 安装时,这是完全没有必要的。
--no-dev
这一点至关重要。我们从不希望将开发包安装到生产服务器上。像 phpunit 和其他不应让其投入生产的软件包被视为 “dev”软件包。它们在 composer.json 文件中的 “require-dev” 属性下具有特殊条目。
--profile
这个是可选的,但是我总是喜欢包含它,因为它显示了 Composer 用于安装单个依赖项的内存量。
如何在部署时缓存 Composer 程序包
现在,我们已经定义了生产级 composer 安装命令,让我们简单地介绍一下在部署时使 Composer 更快的方法。
步骤 1。
在你的 Webroot 之外的某个地方创建一个全局 Composer vendor 目录,当然该目录不能公开访问。
注意:Amezmo 使用如下所示的根目录布局,因此我们将在下面的 bash 命令中使用它。当然,你可以用自己的目录替换
这些目录,并且可以实现所需的结果。
/webroot
|----logs
|----vendor
|----storage
|----current -> /webroot/release/${TIMESTAMP}.${COMMIT_ID}
|----release
|-------${TIMESTAMP}.${COMMIT_ID}
|-------${TIMESTAMP}.${COMMIT_ID
/webroot/vendor 是我们的全局软件包目录,将从中为每个版本创建链接。
运行以下命令从 release 目录创建的 vendor 目录链接到全局 vendor 目录。每次部署时都必须执行此操作,并且在从发行目录运行 composer 安装之前。
ln -sT /webroot/vendor webroot/release/${TIMESTAMP}.${COMMIT_ID}/vendor
请注意,从 release 目录运行 composer install 之前,运行上述命令至关重要。以下是步骤:
- 应该创建 release 目录
- 运行 Git 获取源代码
- 执行以上命令
- 最后运行 composer install
按照上述顺序完成所有操作后,你的软件包将被 “缓存” 到 /webroot/vendor 目录中,并且每次部署应用程序时都不需要重新安装软件包。
结论
- 定义了一个 Composer 命令,该命令消除了所有不必要的功能。
- 重点介绍了在部署时缓存 Composer 软件包的最佳实践部署模式。
第 1 步。
在 Webroot 完全不在的地方创建一个全局 Composer 供应商目录,并(此段落重复,应删除)
PHP 教程:Composer 最佳实践的更多相关文章
- EffectiveTensorflow:Tensorflow 教程和最佳实践
Tensorflow和其他数字计算库(如numpy)之间最明显的区别在于Tensorflow中的操作是符号. 这是一个强大的概念,允许Tensorflow进行所有类型的事情(例如自动区分),这些命令式 ...
- CSS 布局:40个教程、技巧、例子和最佳实践
前言: 布局是WEB开发一个重要的课题,进入XHTML/CSS后,使用TABLE布局的方式逐渐淡出,CSS布局以众多优点成为主流,本文将介绍40个基于CSS的web布局的资源和教程.文章的出处在htt ...
- 听说你还不会用Dagger2?Dagger2 For Android最佳实践教程
前言 Dagger2是现在非常火的一个依赖注入框架,目前由Google维护,在Github上面已经有12K star了.Dagger2的入门门槛其实是比较高的,据了解,目前有很多Android工程师对 ...
- Sentry 后端监控 - 最佳实践(官方教程)
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- Python自动化运维 技术与最佳实践PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书
点击获取提取码:7bl4 一.内容简介 <python自动化运维:技术与最佳实践>一书在中国运维领域将有"划时代"的重要意义:一方面,这是国内第一本从纵.深和实践角度探 ...
- Ubuntu14.04+RabbitMQ3.6.3+Golang的最佳实践
目录 [TOC] 1.RabbitMQ介绍 1.1.什么是RabbitMQ? RabbitMQ 是由 LShift 提供的一个 Advanced Message Queuing Protocol ...
- 《开源安全运维平台OSSIM最佳实践》
<开源安全运维平台OSSIM最佳实践> 经多年潜心研究开源技术,历时三年创作的<开源安全运维平台OSSIM最佳实践>一书即将出版.该书用80多万字记录了,作者10多年的IT行业 ...
- 给JavaScript初学者的24条最佳实践
.fluid-width-video-wrapper { width: 100%; position: relative; padding: 0 } .fluid-width-video-wrapp ...
- fir.im Weekly - 2016 年 Android 最佳实践列表
2016 年已经过去一半,你在年初制定的成长计划都实现了吗? 学海无涯,技术成长不是一簇而就的事情.本期 fir.im Weekly 推荐 王下邀月熊_Chevalier的 我的编程之路--知识管理与 ...
随机推荐
- sqli-labs第二关 详解
学会了第一关,时隔多天来到了第二关,怎么说了没有看wp就给做出来了. 首先,我是自己先判断了下,这个是什么注入 ?id=1' 不行 ?id=1' or '1'='1--+ 也不行 然后又尝试了下 ?i ...
- Linux下彻底删除安装的rpm包
如何彻底Linux系统下安装的rpm包?现以mySQL为例进行介绍: 一.使用以下命令查看mysql安装情况 [root@xpq mysql]# rpm -qa|grep -i mysql MySQL ...
- TP5本地运行正常,线上运行某页面出现【模板文件不存在】问题的解决办法
相信许多小伙伴和我一样,明明在本地运行页面一切正常,而到线上(本人是用的虚拟主机)出现了如下图的问题: 其实这个问题出现的原因很简单,就是我们开发是在windows 系统下,windows系统对大小写 ...
- Springboot集成logback,控制台日志打印两次,并且是不同的线程打印的
背景 在搭建一个新项目的时候,从公司别的项目搞了个logback-spring.xml的配置过来,修改一下启动项目的时候发现 所有的日志都输出了两次 并且来自于不同的线程,猜测是配置重复了,但是仔细检 ...
- Docker笔记2:Docker 镜像仓库
Docker 镜像的官方仓库位于国外服务器上,在国内下载时比较慢,但是可以使用国内镜像市场的加速器(比如阿里云加速器)以提高拉取速度. Docker 官方的镜像市场,可以和 Gitlab 或 GitH ...
- DM9000网卡驱动分析(转)
s3c6410自带的DM9000网卡驱动也是基于platform设备模型. 其定义的设备资源在arch/arm/mach-s3c64xx/mach-smdk6410中.有网卡的resource res ...
- 空间视频和GIS
摘要. GIS的空间数据基本单位表示通常是根据 点,线和面.但是,另一种类型的空间数据正在变得越来越频繁 捕获的是视频,但在GIS中却被很大程度上忽略了.数字录像时 是现代社会中常见的一种媒介,包含多 ...
- 超好用的UnixLinux 命令技巧 大神为你详细解读
1.删除一个大文件 我在生产服务器上有一个很大的200GB的日志文件需要删除.我的rm和ls命令已经崩溃,我担心这是由于巨大的磁盘IO造成的,要删除这个大文件,输入: > /path/to/fi ...
- HTML语义化罗嗦罗嗦
CSS还未诞生之前,为了实现一些样式效果.设计师必须使用一些物理标签,例如font.b等.这样会造成页面中充满了为实现各种样式的标签,特别是使用table标签来实现一些特殊的布局,俗称为"标 ...
- 利用Docker搭建开发环境
一. 前言 随着平台的不断壮大,项目的研发对于开发人员而言,对于外部各类环境的依赖逐渐增加,特别是针对基础服务的依赖.这些现象导致开 发人员常常是为了简单从而直接使用公有的基础组件进行协同开发,在出现 ...