webysther/packagist-mirror

构建 packagist 的镜像

资助包维护!
Patreon

安装: 150

依赖者: 0

建议者: 0

安全: 0

星标: 193

观察者: 12

分支: 70

1.1.1 2019-11-11 03:35 UTC

README

docker pulls Minimum PHP Version Packagist Codecov Quality Score Mentioned in Awesome composer

❤️ 由 packagist.org 推荐 ❤️

公告: Composer 2 现已可用!

此镜像适用于 Composer 1;Composer 2 本身运行非常快。我们将更新以支持版本 2,以解决那些需要解决主仓库慢速访问或可用性问题的人。

packagist.org 创建的镜像,该镜像定期从一个或多个主镜像缓存包以添加到分布式包仓库。

Mirror creation

如果你使用 PHP Composer,常用命令如 create-projectrequireupdateremove。当这些命令执行时,Composer 将从所需的包以及依赖包下载信息。下载的 json 文件数量取决于将要使用的包的复杂性。你离 packagist.org 服务器的距离越远,下载 json 文件所需的时间就越多。通过使用镜像,由于服务器位置更近,将节省下载时间。

⚙️ 它是如何工作的?

该项目旨在轻松创建本地镜像,允许希望使用 composer 而不依赖第三方基础设施的公司/国家有更高的可用性。还可以创建一个公共镜像以减少主仓库的负载并在全球范围内更好地分配请求,从而帮助整个 packagist 生态系统更快!

创建镜像时,您添加要用于初始同步的镜像列表,这将拉取所有包到您的本地机器。镜像创建并同步后,下一次运行将仅拉取更新。如果任何镜像未能提供元数据文件,客户端将回退到其配置的主镜像,无论是 packagist.org 还是其他镜像。如果客户端遇到安装问题或与镜像失去连接,它可以从中断的地方恢复运行。

Mirror creation

🌎 Packagist 公共元数据镜像全球观测站

🛫 使用此 推荐仓库 或其他构建的用于下载仓库元数据的数据镜像

列表按国家及同步频率排序。

⚠️ 不基于此 源代码

🛑 在 2020 年第一季度检查后,未作为 packagist.org 的镜像运行

如果您知道任何基于或不基于此的新镜像,请创建一个问题或带有新数据的拉取请求。

检查 状态页面 以查看健康镜像。

World Map

此图显示了上述国家层面的工作镜像。颜色代表下面的拓扑。

🚀 创建您自己的镜像

Topology

💡提示:使用至少 2GB RAM 的机器以避免在同步时使用磁盘或交换空间。

⚠️ 从 DATA_MIRRORMAIN_MIRROR 同步时,您的服务器将所有包编码和解码为 .gz 文件以节省磁盘空间。您可能需要为请求解压缩包的旧版 composer 客户端启用服务器端解码。

目前有三种支持创建您自己的镜像的方法。

在这三种方法中,您需要克隆存储库,并将 .env.example 复制到 .env,并修改以包含您的值而不是默认值。

# Clone this repository
$ git clone https://github.com/websyther/packagist-mirror.git

# Setup environment variables
$ cd packagist-mirror
$ cp .env.example .env
$ nano .env

Docker Compose

运行以下命令以启动 Nginx、PHP-FPM 和运行 cron 任务的 worker 容器。

# Start all Docker containers
$ docker-compose up -d

# Follow log output
$ docker-compose logs -f

初始同步完成后,打开 https://:9248 以查看您的网站。

💡提示:在运行上述命令时,在 docker-composeupdown 之间添加 -f docker-compose.prod.yml。如果您使用 traefik,则此 docker-compose 文件中的服务包含运行中的 traefik 容器使用的标签,这些标签用于自动将匹配这些标签的流量路由到该容器。它甚至还会自动更新您的 Let's Encrypt 证书。

Docker Nginx PHP

首先,将以下行添加到 /etc/crontab 中,以在启动时通知主机启动 packagist-mirror 映像的容器,将每个 -e 标志的值替换为您自己的。这将启动初始同步并生成由 nginx 服务的网站文件。

有关此 docker 映像的更多选项,请参阅 此处

* * * * * root docker run --name mirror --rm -v /var/www:/public \
-e MAINTAINER_REPO='packagist.com.br' \
-e APP_COUNTRY_NAME='Brazil' \
-e APP_COUNTRY_CODE='br' \
-e MAINTAINER_MIRROR='Webysther' \
-e MAINTAINER_PROFILE='https://github.com/Webysther' \
-e MAINTAINER_REPO='https://github.com/Webysther/packagist-mirror' \
-e URL='packagist.com.br' \
webysther/packagist-mirror

接下来,将以下内容添加到 /etc/nginx/sites-available/packagist.com.br.conf 中,以托管网站文件

server {
    index.html;

    server_name packagist.com.br www.packagist.com.br;

    location / {
        try_files $uri $uri/ =404;
        gzip_static on;
        gunzip on;
    }
}

要监控同步进度,请运行以下命令

docker logs --follow --timestamps --tail 10 mirror

Nginx PHP

在克隆存储库后,运行以下命令以配置主机。

$ cd packagist-mirror && composer install
$ cp .env.example .env

然后,安排命令以创建和更新镜像

$ php bin/mirror create -vvv

Nginx 将在配置的 URL 上提供服务镜像。

🐧 开发 & 贡献

有关详细信息,请参阅 CONTRIBUTINGCONDUCT

📋 要求

此版本支持以下 PHP 版本。

  • PHP >=7.2

🧪 测试

$ vendor/bin/phpunit

🥂 致谢

💙 其他相关项目

☮️ 许可证

MIT 许可证。请参阅 许可证文件 获取更多信息。

FOSSA Status