Рассмотрим задачу хостинга статичного веб-сайта, например, Leaflet карты с заранее посчитанными данными на ней или статичной 3D модели. Для этих целей можно воспользоваться статическим хостингом файлов на Google Cloud Storage. Кроме того, этот способ позволяет весьма просто ограничить доступ к сайту в веб-интерфейсе Google Cloud, указывая емайлы пользователей, которым доступ разрешен. За счет Google CDN и кэширования файлов можно не беспокоиться об обработке большой нагрузки, а добавление или удаление файлов доступно с помощью консольной утилиты gsutil и в веб-интерфейсе Google Cloud. Также не нужно заниматься получением и обновлением SSL сертификатов и созданием для них доменных имен. Буквально в несколько консольных команд получается масштабируемое и легко поддерживаемое решение с хранением данных в облаке Google и гарантией защиты данных.



Создание сайта с ограниченным доступом


Ниже приведены необходимые команды для создания и настройки веб-доступа для бакета bucketname:


# create new bucket
$ gsutil mb gs://bucketname
# allow fine-granted access control for the bucket
$ gsutil uniformbucketlevelaccess set off gs://bucketname
# prepare OAuth wrapper
$ cat redirect.html
<html>
  <head>
    <meta http-equiv="Refresh" content="0; url=https://storage.cloud.google.com/bucketname/index.html">
  </head>
  Redirecting...
</html>
# copy the OAuth wrapper to the bucket
$ gsutil -m cp redirect.html gs://bucketname/
# make the OAuth wrapper publicly available
$ gsutil iam ch allUsers:legacyObjectReader gs://bucketname/redirect.html
# setup web site entry point for the bucket
$ gsutil web set -m redirect.html gs://bucketname/
# copy your data to the bucket
$ gsutil -m cp -r index.html gs://bucketname/
# prepare CORS configuration
$ $ cat cors.json 
[
    {
      "origin": ["*"],
      "responseHeader": ["Content-Type"],
      "method": ["GET"],
      "maxAgeSeconds": 3600
    }
]
# set the CORS configuration for the site
$ gsutil cors set cors.json gs://bucketname

Внимание: указанный в документации Google способ не работает, если попытаться указать права доступа на файл redirect.html в веб-интерфейсе Googl Cloud для пользователя allUsers с правами objectViewer, возникает ошибка. Аналогично, через gsutil не удается установить права allUsers:objectViewer. Секрет в том, что необходимо воспользоваться старой версией API и установить права allUsers:legacyObjectReader


Теперь ссылка https://storage.googleapis.com/bucketname/redirect.html при ее открытии в браузере переадресует пользователя на страницу логина аккаунтов Google и после успешной авторизации вернет на страницу созданного статического сайта index.html Ссылки на файлы скриптов и стилей необходимо указывать абсолютные в виде https://storage.cloud.google.com/bucketname/filename или https://www.googleapis.com/download/storage/v1/b/bucketname/o/filename?alt=media. В последнем случае для поддиректорий необходимо кодировать знак слэш, как пример https://www.googleapis.com/download/storage/v1/b/bucketname/o/dirname%2Ffilename?alt=media


Управление доступом к сайту


Выше мы создали сайт с ограничением доступа. Добавить новых пользователей можно как в веб-интерфейсе Google Cloud, так и с помощью консольной команды:


gsutil acl ch -u USER_EMAIL:objectViewer gs://BUCKET_NAME

Для превращения нашего веб-ресурса в общедоступный достаточно будет разрешить доступ всем пользователям ко всем файлам:


gsutil acl ch -u allUsers:legacyObjectReader gs://BUCKET_NAME

После выполнения этой команды любой пользователь сможет зайти на сайт по ссылке https://storage.googleapis.com/bucketname/index.html. Если хочется укоротить эту ссылку до https://storage.googleapis.com/bucketname/ можно воспользоваться командой


# setup web site entry point for the bucket
$ gsutil web set -m index.html gs://bucketname/

Также общедоступный сайт можно создать и сразу, без конфигурирования CORS и OAuth.


Пользовательский домен


Возможно использование пользовательских доменов, для этого в настройках DNS нужно указать c.storage.googleapis.com как CNAME для bucketname на пользовательском домене. Если это делать не в Google DNS, то при открытии такого адреса браузеры будет справедливо ругаться на не соответствующий SSL сертификат сайта.


Заключение


К счастью, и в современном мире непредсказуемых нагрузок, огромных файлов и SSL сертификатов все еще остаются простые способы статического хостинга. Есть и другие пути, в том числе, GitHub Pages позволяют создать сайт на основе GitHub репозитория, смотрите как пример Геологические модели в виртуальной/дополненной реальности (VR/AR) Amazon S3 тоже можно превратить в статический сайт (раньше я там и размещал подобные проекты, но перестал пользоваться из-за их намеренно мучительно неудобной работы с регионами).


Также смотрите


Комментарии (0)