【问题标题】:Trouble setting up storage disk for Laravel app on Azure在 Azure 上为 Laravel 应用程序设置存储磁盘时遇到问题
【发布时间】:2020-06-12 17:36:03
【问题描述】:

我在 Azure 上使用 Laravel 6 应用程序时遇到问题。我正在使用 TCG/Navigator 来构建我的管理界面。本地开发中的一切都是笨拙的,但是当我将代码推送到 Azure 中的开发站点时,存储磁盘中的项目不可用。我在 Navigator 管理面板中看到这是损坏的图像。

看起来 Laravel 的文件存储需要符号链接才能操作:

https://laravel.com/docs/6.x/filesystem#the-public-disk

但 Azure 的 Windows Web 应用程序似乎不支持符号链接。我需要其他东西来将 /public/storage 映射到 /storage/app/public。

我可以创建一个新的虚拟目录,但这并没有解决问题。我将“/storage”映射到“site\wwwroot\storage\app\public”,但在导航器管理面板中仍然看到损坏的图像。

我在 Navigator 的 repo 中发现了这个问题:

https://github.com/the-control-group/voyager/issues/417#issuecomment-304525223

这似乎正是我需要的修复,但它也不起作用。

我已添加:

        'azure' => [
            'driver' => 'local',
            'root' => storage_path('..\public\storage'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],

到文件系统.php。在 voyager.php 中,我看到:

    'storage' => [
        'disk' => env('FILESYSTEM_DRIVER', 'public'),
    ],

所以为了在本地开发中保持原样(即工作),我在我的网络应用程序中添加了一个应用程序设置:

FILESYSTEM_DRIVER,设置为“天蓝色”

我知道我的 Azure Web 应用程序正在尝试使用 azure 文件系统,因为我最初忘记推送更新的代码,而我的应用程序告诉我它丢失了。

所以现在我认为我的问题可能是我在 azure 存储磁盘的定义中没有正确的值。有什么想法吗?或者,可能有关于尝试让 Laravel 的文件存储在 Azure 上运行的不同方法的建议?

【问题讨论】:

    标签: php laravel azure


    【解决方案1】:

    我已经以可能正确的方式解决了这个问题,但这不是我想要的解决方案。

    最终,我需要一个地方来存储通过网站管理界面上传的媒体。 Navigator 使用 Laravel 文件存储,默认情况下在本地开发中将上传的文件放到 /storage/app/public 中。快速简便的部署解决方案是,如果您的 dev/staging/prod 服务器以相同的方式工作;也就是说,上传的文件存储在同一服务器上的 /storage/app/public 中。这是我一开始想做的。

    不过,我的开发和生产服务器都在 Azure 上。它们是可扩展的 Web 应用程序,因此理论上,如果我的网站充斥着大量喜欢我的内容的用户,则可能有多个实例在为我的内容提供服务。我不应该期望每个实例都有相同的本地存储。更好的可扩展性解决方案是让所有上传的内容,无论哪个实例正在运行上传内容的管理界面,都位于一个专用文件存储位置。起初这可能看起来很古怪,但它与让一个数据库为任意数量的网络服务器吐出内容以显示给用户的概念相同。

    因此,在与不合作的符号链接斗争了 2 天之后,我跳到了专用的文件存储位置解决方案。它奏效了!以下是我为实现奇迹而采取的步骤:

    1. 在 Azure 中创建一个存储帐户。
    2. 在存储帐户中创建了一个 blob 容器。
    3. 将 Laravel Azure 存储包添加到我的项目 (https://github.com/matthewbdaly/laravel-azure-storage)。
    4. 根据包的说明更新了 filesystems.php:
           'azure' => [
                'driver'    => 'azure',
                'name'      => env('AZURE_STORAGE_NAME'),
                'key'       => env('AZURE_STORAGE_KEY'),
                'container' => env('AZURE_STORAGE_CONTAINER'),
                'url'       => env('AZURE_STORAGE_URL'),
                'prefix'    => null,
            ],
    
    1. 将 AZURE_STORAGE_NAME(我的存储帐户的名称)、AZURE_STORAGE_CONTAINER(我的容器的名称)和 AZURE_STORAGE_KEY(位于存储帐户数据的“访问密钥”下)添加到我的 Web 应用的应用程序设置中。
    2. 在我的视图中使用 '''Storage::url($page->image)''' 在本地 dev(使用本地存储)和 Azure(使用存储帐户)中正确创建我的图像的 src 值.
    3. 通过更新我的项目的 .gitignore 文件从我的存储库中排除了本地存储数据。 (我的测试图像不需要被 git 跟踪。)

    哇。我仍然有兴趣了解是否可以让本地存储在 Azure Web 应用程序中运行,但是这种配置让我跨越了那个绊脚石,迈向了生产就绪的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      相关资源
      最近更新 更多