Рассмотрим задачу хостинга статичного веб-сайта, например, 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 тоже можно превратить в статический сайт (раньше я там и размещал подобные проекты, но перестал пользоваться из-за их намеренно мучительно неудобной работы с регионами).
