sam-it / yii2-static-assets
生成静态资源并构建docker nginx容器
Requires
- php: >= 8.1
- sam-it/docker-php: >= 1.0.5
Requires (Dev)
- captainhook/captainhook: ^5.10
- codeception/codeception: > 4
- codeception/module-yii2: ^1.1
- phpstan/phpstan: ^1.7
- ramsey/conventional-commits: ^1.3
- symplify/easy-coding-standard: ^11.0
- yiisoft/yii2: > 2
- dev-master
- v7.1.0
- v7.0.4
- v7.0.3
- v7.0.2
- v7.0.1
- v7.0.0
- v6.0.0
- v5.1.0
- v5.0.6
- v5.0.5
- v5.0.4
- v5.0.3
- v5.0.2
- v5.0.1
- v5.0.0
- v4.1.1
- v4.1.0
- v4.0.0
- v3.4.2
- v3.4.1
- v3.4.0
- v3.3.1
- v3.3.0
- v3.2.0
- v3.1.0
- v3.0.2
- v3.0.1
- v3.0.0
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.0
- v1.0.1
- v1.0.0
- v0.9.1
- v0.9.0
- v0.8.4
- v0.8.3
- v0.8.2
- v0.8.1
- v0.8.0
- v0.7.0
- v0.6.3
- v0.6.2
- v0.6.1
- v0.6.0
- v0.5.0
- v0.4.2
- v0.4.1
- v0.4.0
- v0.3.4
- v0.3.3
- v0.3.2
- v0.3.1
- v0.3.0
- v0.2.0
- v0.1.0
- v0.0.7
- v0.0.6
- v0.0.5
- v0.0.4
- v0.0.3
- v0.0.2
- v0.0.1
This package is auto-updated.
Last update: 2024-09-22 15:05:27 UTC
README
防止在发布时间不更改应用程序的情况下发布资源。
动机
如今,Docker越来越受到关注,PHP应用程序也面临着不同的部署场景。几年前,如果你只是分割节点,那么你只会分割数据库服务器和运行PHP作为模块或最近通过PHP-FPM运行的web服务器,如今你希望分割一切。
挑战
例如,如果你的web服务器(例如nginx)在不同于PHP-FPM的服务器上运行,这会带来一些挑战,优势和劣势
- PHP不能写入文件并为它们创建公开可访问的URL
- 无法使用本地会话存储
- 需要公开访问的文件上传需要发布到web服务器。
- 需要受保护的文件上传必须由所有PHP节点可访问(因此需要某种中央存储)。
解决方案
当涉及到Yii资源时,此扩展将为问题1提供解决方案。当直接将更改的资源推送到服务器时,资产管理系统很棒,但在分布式环境中它并不真正有效,因此我们需要另一种方法。
此扩展提供
- 一个控制台命令,它将扫描您的源代码和vendor目录,并将所有资产提取出来。
- 一个用于生产的AssetManager,它将生成资源的URL而无需检查存储是否被修改。
工作流程略有不同。在开发期间,资产管理器将像正常的资产管理器一样运行,将资源发布到资源目录。当使用docker-compose进行测试环境时,您将把相同的主机目录挂载到PHP容器和web服务器容器的资产文件夹中。
在部署期间,资产管理器简单地返回资源的URL,假设它们存在。在部署应用程序的新版本之前,您将重新构建您的web服务器容器。此扩展提供了一个控制台命令,可以将所有资源发布到您选择的目录,然后可以使用它作为docker构建上下文的一部分。
要发布您的资源,请运行以下命令
yii staticAssets/asset/publish build12345
这将创建运行时目录内的build12345
目录,并将所有资源发布到那里。
资产发现/发布
通过递归遍历所有文件夹和文件来发现资产。然后处理每个以.php
结尾的文件
- 命名空间通过正则表达式匹配提取。
- 类名通过正则表达式匹配提取。
- 我们使用反射来检查类是否是
yii\web\AssetBundle
的实例,如果是,则发布它。
容器构建
要为服务器应用程序构建nginx容器,请使用以下命令
yii staticAssets/asset/build-container
您可以为模块设置一些默认值。
配置
对于简单配置,在生产和开发期间在您的应用程序中使用ReadOnlyAssetManager
。此资产管理器将使用更简单的“哈希”函数,以保持目录结构可读。它支持$assetDevelopmentMode
,允许在docker化环境中进行本地资产开发。
资产开发
假设您使用docker-compose进行本地开发,在这种情况下,您需要定义一个存储资产的卷,以便在web服务器和phpfpm容器中可用
volumes:
assets:
nginx:
image: [name of your nginx container, built by this module]
environment:
PHPFPM: "phpfpm:9000"
RESOLVER: "127.0.0.11"
ports:
- "12346:80" # Port where the application will be available
depends_on:
- phpfpm
volumes:
# Defines the named volume as read-only for the webserver.
# Note the dev-assets, which allows to easily identify development
# mode while using browsers' developer tools.
- type: volume
source: assets
target: /www/dev-assets
read_only: true
volume:
nocopy: true
phpfpm:
dns: 8.8.4.4
image: [ name of your PHPFPM docker image ]
environment:
DB_USER: root
DB_NAME: test
DB_PASS: secret
DB_HOST: mysql
depends_on:
- mysql
volumes:
# The source code is loaded into PHPFPM for local development,
# for production it should be baked into the image.
- .:/project:ro
# The asset volume, note the location which is where the ReadOnlyAssetManager
# will publish assets when in development mode.
- type: volume
source: assets
target: /tmp/assets