Linux环境下搭建composer私服及memory_limit问题

news2024/11/25 14:21:20

请添加图片描述

Composer是 PHP项目中用来管理依赖(dependency)关系的工具,允许声明项目所依赖的代码库 ,然后在项目的某个目录中(默认是vendor目录) 中安装相关的依赖包。

在介绍如何安装私服之前,我们先熟悉下 composer 相关

composer 安装

下载地址 https://getcomposer.org/download/


# download 这里是下载 1.10.26 版本
# 当然你可以修改版本号,现在想要的版本
wget https://getcomposer.org/download/1.10.26/composer.phar

# rename
mv composer.phar /usr/local/bin/composer1.10.26
ln -s /usr/local/bin/composer1.10.26 /usr/local/bin/composer

# verify
# 这里需要注意,服务器上要安装有 PHP 程序,且有 php 命令才行
# 有时候安装PHP时候,会生成 类似 php-5.6 这样的命令, 没有默认的php命令
# 那么 做个软连接即可
# ln -s /bin/php5.6 /bin/php
/usr/local/bin/composer --version
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Composer version 1.10.26 2022-04-13 16:39:56

常见的用法有:

  • composer init 初始化安装 composer.json 文件

  • composer install 安装 composer.json 中关联的依赖

  • composer update 强更新,无视 composer.lock 锁文件,把 composer.json 里面的依赖更新一遍,然后生产新的锁文件

  • composer self-update version-number 更新composer 本身的版本

  • composer create-project 依赖包/依赖包 路径 版本

    比如

    composer create-project vendor/project target-directory 1.0
    
  • composer config

    主要是用来配置composer相关,比如仓库源地址

    composer config -g secure-http false
    composer config -g repo.my_repo composer https://mirrors.aliyun.com/composer/
    
  • composer help command-name 查询指定command的用法 ,很有用

composer私服搭建

推荐的私服搭建有两种方案

  • Satis https://getcomposer.org/doc/articles/handling-private-packages.md
  • toran proxy https://toranproxy.com/

这里介绍Satis的安装部署

1、创建项目

[php@test-liuchao-01-vm /data/project/temp Mon Apr 17 16:40:36]$ /usr/local/bin/composer create-project composer/satis --stability=dev --keep-vcs
Creating a "composer/satis" project at "./satis"
Warning from https://repo.packagist.org: Support for Composer 1 is deprecated and some packages will not be available. You should upgrade to Composer 2. See https://blog.packagist.com/deprecating-composer-1-support/
Info from https://repo.packagist.org: #StandWithUkraine



Installing composer/satis (1.0.0)
  - Installing composer/satis (1.0.0): Cloning f66ff72ce4
Created project in /data/project/temp/satis
Deprecation warning: require-dev.mikey179/vfsStream is invalid, it should not contain uppercase characters. Please use mikey179/vfsstream instead. Make sure you fix this as Composer 2.0 will error.
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 42 installs, 0 updates, 0 removals
  - Installing symfony/process (v3.2.8): Downloading (100%)
  - Installing symfony/finder (v3.2.8): Downloading (100%)
  - Installing symfony/filesystem (v3.2.8): Downloading (100%)
  - Installing symfony/polyfill-mbstring (v1.3.0): Downloading (100%)
  - Installing psr/log (1.0.2): Downloading (100%)
  - Installing symfony/debug (v3.2.8): Downloading (100%)
  - Installing symfony/console (v3.2.8): Downloading (100%)
  - Installing seld/phar-utils (1.0.1): Downloading (100%)
  - Installing seld/jsonlint (1.6.0): Downloading (100%)
  - Installing seld/cli-prompt (1.0.3): Downloading (100%)
  - Installing justinrainbow/json-schema (5.2.1): Downloading (100%)
  - Installing composer/spdx-licenses (1.1.6): Downloading (100%)
  - Installing composer/semver (1.4.2): Downloading (100%)
  - Installing composer/ca-bundle (1.0.7): Downloading (100%)
  - Installing composer/composer (1.4.2): Downloading (100%)
  - Installing twig/twig (v1.33.2): Downloading (100%)
  - Installing mikey179/vfsstream (v1.6.4): Downloading (100%)
  - Installing webmozart/assert (1.2.0): Downloading (100%)
  - Installing phpdocumentor/reflection-common (1.0): Downloading (100%)
  - Installing phpdocumentor/type-resolver (0.2.1): Downloading (100%)
  - Installing phpdocumentor/reflection-docblock (3.1.1): Downloading (100%)
  - Installing phpunit/php-token-stream (1.4.11): Downloading (100%)
  - Installing symfony/yaml (v3.2.8): Downloading (100%)
  - Installing sebastian/version (2.0.1): Downloading (100%)
  - Installing sebastian/resource-operations (1.0.0): Downloading (100%)
  - Installing sebastian/recursion-context (2.0.0): Downloading (100%)
  - Installing sebastian/object-enumerator (2.0.1): Downloading (100%)
  - Installing sebastian/global-state (1.1.1): Downloading (100%)
  - Installing sebastian/exporter (2.0.0): Downloading (100%)
  - Installing sebastian/environment (2.0.0): Downloading (100%)
  - Installing sebastian/diff (1.4.3): Downloading (100%)
  - Installing sebastian/comparator (1.2.4): Downloading (100%)
  - Installing phpunit/php-text-template (1.2.1): Downloading (100%)
  - Installing doctrine/instantiator (1.0.5): Downloading (100%)
  - Installing phpunit/phpunit-mock-objects (3.4.3): Downloading (100%)
  - Installing phpunit/php-timer (1.0.9): Downloading (100%)
  - Installing phpunit/php-file-iterator (1.4.2): Downloading (100%)
  - Installing sebastian/code-unit-reverse-lookup (1.0.1): Downloading (100%)
  - Installing phpunit/php-code-coverage (4.0.8): Downloading (100%)
  - Installing phpspec/prophecy (v1.7.0): Downloading (100%)
  - Installing myclabs/deep-copy (1.6.1): Downloading (100%)
  - Installing phpunit/phpunit (5.7.20): Downloading (100%)
symfony/console suggests installing symfony/event-dispatcher
sebastian/global-state suggests installing ext-uopz (*)
phpunit/phpunit-mock-objects suggests installing ext-soap (*)
phpunit/php-code-coverage suggests installing ext-xdebug (^2.5.1)
phpunit/phpunit suggests installing ext-xdebug (*)
phpunit/phpunit suggests installing phpunit/php-invoker (~1.1)
Generating autoload files

2、配置 satis.json

{
    "name": "demo/repository",
    "homepage": "http://www.colinspace.com",
    "repositories": [
        {"type": "git", "url": "ssh://git@gitlab.xxxx.com:22/module/staff.git"}
    ],
    "require-all": true,
    "require-dependencies": true,
    "require-dev-dependencies": true
}

3、进行build


[php@test-liuchao-01-vm /data/project/temp/satis Mon Apr 17 17:26:07]$ php bin/satis build satis.json dist
Scanning packages
wrote packages to dist/include/all$83d09112b76234b329306152ed4f1f88a9f98baf.json
Writing packages.json
Pruning include directories
Writing web view

4、配置NGINX

配置NGINX之前,确保对应的主机安装了PHP和 php-fpm ,然后启动 php-fpm

server {
        include local_port.conf;
        server_name composer.xxx.com ;

        location / {
                proxy_redirect off;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass http://192.168.3.17:80;

        }

        access_log     /data/logs/nginx/access/curr/composer.xxxx.com.log;
        error_log      /data/logs/nginx/nginx_error_composer.xxxx.com.log;
}

然后就可以就可以通过 http://composer.xxx.com 来访问和使用

image-20230417173158968

5、在项目中配置使用

在PHP项目的更目录下的 composer.json中

{
	"name": "project-name",
	... ...
	"repositories": [{
    	"type": "composer",
    	"url": "http://composer.kongfz.com"
  	}],
  	....
}

然后在项目发布的过程中,执行

/usr/local/bin/composer install || exit 1
/usr/local/bin/composer dump-autoload --optimize || exit 1

遇到的问题

上次搭建了公司内部的私有 composer源,但是除了私有的项目依赖之外,项目开发过程中势必会遇到依赖公有的第三方源。

所以为了标准化方便管理, 运维人员会在发布主机对应的用户家目录下做如下配置

[xxx]$ ls  -l ~/.composer/config.json
-rw-rw-r-- 1 jenkins jenkins 253 Apr 17 15:03 /var/lib/jenkins/.composer/config.json
[xxx]$ cat ~/.composer/config.json
{
    "config": {
        "secure-http": false
    },
    "repositories": [
        {
            "packagist": false
        },
        {
            "type": "composer",
            "url": "https://mirrors.cloud.tencent.com/composer/"
        }
    ]
}

然后项目中配置 私有的composer 源即可。


但是遇到个问题:

1、开发人员本地没有在 电脑个人用户家目录下配置公共的composer配置, 类似上面的Jenkins家目录下的配置

2、开发人员直接在 项目中配置了 第三方的公共源和私有源

3、然后在项目发布过程中执行 composer install 报错如下

Updating dependencies (including require-dev)
PHP Fatal error:  Allowed memory size of 1610612736 bytes exhausted (tried to allocate 32 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52

Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 32 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52

Check https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors for more info on how to handle out of memory errors.

从报错信息来看和内存有关系,但是执行的过程中同步观察服务器内存是足够的。

然后进行调试验证,两个解决方案

1、composer install的之后,命令修改为 php -d memory_limit=-1 /usr/local/bin/composer install

memory_limit为-1 表示不限制内存使用

2、把开发人员添加到 composer.json 中的第三方公共源配置删除,公共源只保留在运维配置的服务器对应用户的家目录下,执行安装是没有问题

所以上面两种方案的对比:感觉核心问题不在于内存限制,而是 第三方源的重复依赖。

但是呢,项目配置中如果配置了源(不管是第三方的还是私有的)不应该是优先使用,不用再去找本地的配置的默认源吗?

所以这里最终的核心问题未到找到根源,如果有人知道为啥,请不吝赐教哈

附加

1、composer升级或者1版本和2版本共存

2版本快速安装

# download
wget https://raw.githubusercontent.com/composer/getcomposer.org/76a7060ccb93902cd7576b67264ad91c8a2700e2/web/installer -O - -q | php -- --quiet

# rename
mv composer.phar /usr/local/bin/composer2

文章刚开始安装了 composer 1版本,如果想让那个版本为默认的

直接设置软连接即可。

ln -s /usr/local/bin/composer1.10.26 /usr/local/bin/composer1
# 默认1版本 
ln -s /usr/local/bin/composer1 /usr/local/bin/composer

或者直接使用

/usr/local/bin/composer1 --version

/usr/local/bin/composer2 --version 

欢迎关注个人公众号

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/424259.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

对话框与子窗口控件(写给大忙人看的快速复习掌握)

对话框与子窗口控件(写给大忙人看的快速复习掌握)1、对话框的概念2、控件的概念我更喜欢称控件为预定义的窗口类3、我们一步一步写代码熟悉常用的预定义的窗口类3.1 什么叫模板呢?3.2 什么是资源文件4、消息处理函数(有这么几个消…

护眼灯哪些牌子好?2023护眼灯品牌推荐

护眼灯就是保护眼睛的,很多人长时间工作和学习,主要还是光的刺激和错误的坐姿,会引起眼睛的近视,导致视觉疲劳的主要原因就是灯光的频闪,而护眼灯就能很好减少频闪。 特别是青少年们的视力发育为成熟,视力…

使用Sentieon加速甲基化WGBS数据分析

全基因组甲基化测序(WGBS)是一种研究DNA甲基化的方法,以全面了解在基因组水平上的表观遗传变化。在进行WGBS数据分析时,通常需要使用专门的比对工具,因为这些工具需要能够处理亚硫酸盐转化后的数据。 以下是四个不同的WGBS比对分析流程&…

ADIDAS阿里纳斯励志广告语

系列文章目录 精选优美英文短文1——Dear Basketball(亲爱的篮球)精选优美英文短文2——Here’s to the Crazy Ones(致疯狂的人)“我祝你不幸并痛苦”——约翰罗伯茨毕业致辞“亲爱的波特兰——CJ麦科勒姆告别信” Hi, I’m Gilb…

七、Django进阶:第三方库Django-extensions的开发使用技巧详解(附源码)

Django-extensions是 Django 的扩展应用,给django开发者提供了许多便捷的扩展工具(extensions),它提供了许多有用的工具和命令行工具,帮助 Django 开发者更高效地进行开发和调试。它的作用包括: - 提供了更多的Django命令&#x…

循环依赖详解及解决方案

介绍 上图就是循环依赖的三种情况,虽然方式不同,但是循环依赖的本质是一样的,就A的完整创建要依赖与B,B的完整创建要依赖于A,相互依赖导致没办法完整创建造成失败. 循环依赖代码演示 public class Demo {public static void main(String[] args) {new Demo1();} }class Demo1…

电子信息工程有哪些SCI期刊推荐? - 易智编译EaseEditing

以下是电子信息工程领域的一些SCI期刊推荐: IEEE Transactions on Information Theory: 该期刊由IEEE出版,专注于信息理论领域的研究,包括编码理论、信道编码、信息传输、信息论应用等方面的研究。 IEEE Transactions on Signal…

Apache网页与安全优化

系列文章目录 文章目录系列文章目录一、1.构建虚拟web主机2.一、基于域名的虚拟主机二、Apache 日志分割1.三、Apache的网页优化总结一、 1.构建虚拟web主机 虚拟Web主机指的是在同一台服务器中运行多个Web站点,其中每一个站点实际上并不独立占用整个服务器&#…

天选姬 - 桌面宠物

天选姬 - 桌面宠物前言下载使用更新设置右键菜单人机交互系统状态闹钟壁纸前言 桌面宠物顾名思义指在电脑桌面的宠物,可以是各种动物或Q版人物。可以进行交互并拥有各种各样的功能,本文介绍一款适用于各种电脑的桌面宠物,天选姬,…

【Redis-面试题及持久化方案】Redis相关面试题(缓存穿透、缓存击穿、缓存血崩) Redis两种持久化方案详情对比(RDB、AOF)

【Redis-面试题及持久化方案】Redis相关面试题(缓存穿透、缓存击穿、缓存血崩) & Redis两种持久化方案详情对比(RDB、AOF)1)Redis 面试题1.1.高频面试题:缓存穿透、缓存击穿、缓存血崩1.2.低频面试题&a…

电脑0X000000D1蓝屏错误U盘重新安装系统教学

电脑0X000000D1蓝屏错误U盘重新安装系统教学。最近有用户遇到了电脑桌面变成了0X000000D1错误代码的蓝屏界面了,无法继续操作使用。那么这个问题怎么去进行系统U盘重装呢?来看看以下的详细解决方法吧。 准备工作: 1、U盘一个(尽量…

智慧城市我国发展现状怎样?

智慧城市从概念提出到落地实践,历经十多年的建设与发展,我国智慧城市建设数量持续增长。我国智慧城市整体建设和发展情况总结如下。 北京智汇云舟科技有限公司成立于2012年,专注于创新性的“视频孪生(实时实景数字孪生)”技术研发与应用。目前…

江南爱窗帘十大品牌,怎么合理的搭配窗帘配色

窗帘行业圈:窗帘行业内部交流圈,窗帘从业者的交流内部圈。 当阳光照进房间的那一刻, 光线给空间带来了无限的可能。 窗边的帘帐既是美丽的风景 又是可爱的魔术师。 在光影变幻的时空里 让你的生活布满温馨和奇幻。 1.窗帘材质怎么选 窗帘的材…

DataSecurity Plus如何阻止数据泄露

随着互联网的发展,数据泄露事件时有发生,给个人和企业造成了巨大的损失。为了保护数据安全,企业需要采取一系列的安全措施,而其中一项重要的措施就是使用数据安全工具。DataSecurity Plus 是一款功能强大的数据安全工具&#xff0…

苹果AirPods耳机推送新固件更新,TWS耳机与Find My可实现智能防丢

苹果推送 iOS / iPadOS 16.5 Beta 2 更新的同时,原本还为 AirPods 耳机推送了固件更新 5E133。苹果在临时撤回之后,再次向用户推送了本次更新, 苹果官方表示当你的 AirPods 在充电且在 iPhone、iPad 或 Mac 的蓝牙通信范围内时,…

【LeetCode:(每日一题1023. 驼峰式匹配) -> 剑指 Offer II 097. 子序列的数目 | 暴力递归=>记忆化搜索=>动态规划】

🍎作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎 🍎座右…

iOS 吸顶效果

项目中,在列表向上滚动时,有时需要将某个控件置顶,这就是我们常见的吸顶效果。 1. UITableView 吸顶效果 UITableView是自带吸顶效果,我们把需要置顶的控件设置为SectionHeaderView,这样在滚动时,该控件会…

360城市全景,开启全新城市探索方式

引言 360城市全景技术的出现和发展,让我们的生活方式和观念发生了革命性的变化。在过去,我们只能通过实地旅行、图片和视频来了解不同城市的文化、建筑和风景。现在,通过360城市全景技术,我们可以像亲临现场一样,透过…

Vue实现自动化平台(四)--接口管理页面的实现

上一章: Vue实现自动化平台(三)_做测试的喵酱的博客-CSDN博客 github地址:https://github.com/18713341733/vuemiaotest 这个目前只是用来练手的,项目还没成型。等以后我写完了,再更新一下项目链接。 …

软件测试——概念篇

目录 一、软件的生命周期 二、瀑布模型(Waterfall Model) 优点: 缺点: 三、螺旋模型(Spiral Model) ​编辑优点: 缺点: 四、增量、迭代 区别: 五、敏捷 scrum…