Проблемы с настройкой диска для приложения Laravel на Azure - PullRequest
3 голосов
/ 28 февраля 2020

У меня проблемы с Laravel 6 приложением на Azure. Я использую TCG / Navigator для создания моего интерфейса администратора. В локальной разработке все просто, но когда я добавляю код sh на свой сайт разработки в Azure, элементы с диска хранения становятся недоступными. Я вижу это как испорченные изображения в админ-панели Navigator.

Похоже, для хранения файлов Laravel требуется символическая ссылка:

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

, но символические ссылки не поддерживаются в Azure Windows веб-приложениях. Мне нужно что-то еще для сопоставления / public / storage с /storage/app/public.

Я могу создать новый виртуальный каталог, но это не решило проблему. Я сопоставил "/ storage" с "site \ wwwroot \ storage \ app \ publi c", но все еще вижу неработающие изображения в панели администратора Navigator.

Я нашел эту проблему в репозитории Navigator :

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'),
    ],

, чтобы оставить все как есть (ie, работает) в локальном устройстве, я добавил настройку приложения в свое веб-приложение:

FILESYSTEM_DRIVER, установлен на 'azure'

Я знаю, что мое веб-приложение Azure пытается использовать файловую систему azure, потому что я изначально забыл pu sh обновленный код и мое приложение сообщило мне, что оно отсутствует.

Так что теперь я думаю, что моя проблема может заключаться в том, что у меня нет правильных значений в определении диска хранения azure. Есть идеи? Или, может быть, есть предложения по другому подходу, чтобы попытаться заставить Laravel хранилище файлов работать на Azure?

1 Ответ

1 голос
/ 28 февраля 2020

Я решил эту проблему, вероятно, правильным способом, но это не то решение, которое я искал.

В конечном счете, мне нужно место для хранения мультимедиа, загруженного через интерфейс администратора сайта. , Навигатор использует Laravel Файловое хранилище, которое по умолчанию в локальном dev-устройстве сбрасывает загруженные файлы в / storage / app / publi c. Быстрое и простое решение для развертывания, если ваши серверы dev / staging / prod работают одинаково; загруженные файлы хранятся в / storage / app / publi c на том же сервере. Это то, что я пытался сделать сначала.

Мои серверы разработки и производства работают на Azure. Это масштабируемые веб-приложения, поэтому, теоретически, если на моем веб-сайте находится множество пользователей, которым нравится мой контент, мой контент может обслуживать несколько экземпляров. Я не должен ожидать, что каждый экземпляр имеет одинаковое локальное хранилище . Лучшее масштабируемое решение для всего загружаемого контента, независимо от того, на каком экземпляре был запущен интерфейс администратора, который загружал контент, должно находиться в выделенном месте для хранения файлов . Поначалу это может показаться странным, но это та же концепция, что одна база данных выкладывает контент для любого количества веб-серверов для отображения пользователям.

Итак, после двухдневной борьбы с неработающей символической ссылкой я перешел к решению о выделенном месте для хранения файлов. И это сработало! Вот шаги, которые я предпринял, чтобы волшебство c произошло:

  1. Создайте учетную запись хранения в Azure.
  2. Создали контейнер BLOB-объектов в учетной записи хранения.
  3. Добавлен пакет Laravel Azure Storage в мой проект (https://github.com/matthewbdaly/laravel-azure-storage).
  4. Обновлены файловые системы. 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,
        ],
Добавлены AZURE_STORAGE_NAME (имя моей учетной записи хранения), AZURE_STORAGE_CONTAINER (имя моего контейнера) и AZURE_STORAGE_KEY (находится в разделе «Ключи доступа» в данных учетной записи хранения) в настройках приложения моего веб-приложения. Использовал '' 'Storage :: url ($ page-> image)' '' в моих представлениях для правильного создания значений sr c для моих изображений как в локальном dev (с использованием локального хранилища), так и на Azure (используя учетная запись хранения. Исключить данные локального хранилища из моего репозитория путем обновления файлов моего проекта .gitignore. (Необязательно, чтобы мои тестовые изображения отслеживались git.)

Вот так. Мне все еще интересно узнать, можно ли заставить локальное хранилище работать в веб-приложении Azure, но эта конфигурация перепрыгивает меня через этот камень преткновения в сторону готового к работе решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...