Предварительная версия. Функциональность может измениться, но основные возможности сохранятся. Совместимость с будущими версиями может потребовать ручных действий по миграции.
Feature: Pages
Если шаблон публичных доменов %s.example.com
, то Pages будут доступны по адресу https://code-pages.example.com
(Субдомен code
).
Generic
Пример использования Generic
S3 (S3-compatible сервис) для развертывания:
...
features:
pages:
enabled: true
s3:
mode: External
bucketPrefix: d8
external:
provider: Generic
region: <REPLACE_ME>
accessKey: <REPLACE_ME>
secretKey: <REPLACE_ME>
endpoint: <REPLACE_ME> # например "http://minio.example.com:9090"
...
YCloud
Пример использования YCloud S3 для развертывания:
...
features:
pages:
enabled: true
s3:
mode: External
bucketPrefix: d8
external:
provider: YCloud
accessKey: <REPLACE_ME>
secretKey: <REPLACE_ME>
...
AzureRM
Пример использования AzureRM для развертывания:
...
features:
pages:
enabled: true
s3:
mode: External
bucketPrefix: d8
external:
provider: AzureRM
azureAccountName: <REPLACE_ME>
azureAccessKey: <REPLACE_ME>
...
Внешний Redis
Примеры различной конфигурации внешнего redis-кластера
Один сервер
...
storages:
redis:
external:
auth:
enabled: true
password: <REPLACE_ME>
host: 10.10.10.2
port: 6379
mode: External
...
С использованием сентинелов
...
storages:
redis:
external:
auth:
enabled: true
password: <REPLACE_ME>
masterName: <REPLACE_ME>
port: 6379
sentinels:
- host: <REPLACE_ME> # sentinel host #1
port: 26379
- host: <REPLACE_ME> # sentinel host #2
mode: External
...
Внешний Postgres
Без TLS
...
storages:
postgres:
external:
database: db
host: <REPLACE_ME> # адрес мастер-хоста
port: 5432
username: <REPLACE_ME>
password: <REPLACE_ME>
praefectDatabase: praefect
praefectUsername: <REPLACE_ME>
praefectPassword: <REPLACE_ME>
mode: External
...
С включенным TLS
Вы также можете использовать TLS авторизацию при подключении к основной базе данных:
...
storages:
postgres:
external:
database: db
host: <REPLACE_ME> # адрес мастер-хоста
port: 5432
username: simple_user
sslmode: verify-full
serverCA: |
# postgres server CA
clientCert: |
# Your TLS certificate
clientKey: |
# Your TLS key
mode: External
...
Внешний S3
Generic
Пример использования Generic
S3 (S3-compatible сервис):
...
storages:
s3:
mode: External
bucketPrefix: d8
external:
provider: Generic
region: <REPLACE_ME>
accessKey: <REPLACE_ME>
secretKey: <REPLACE_ME>
endpoint: <REPLACE_ME> # например http://minio.example.com:9090
...
YCloud
С выключенным серверным шифрованием
Пример использования стандартной конфигурации YCloud S3 описан здесь:
С включенным серверным шифрованием
Пример использования AWS c SSE (шифрование на стороне сервера):
...
storages:
s3:
mode: External
bucketPrefix: d8
external:
provider: AWS
region: <REPLACE_ME>
accessKey: <REPLACE_ME>
secretKey: <REPLACE_ME>
storageOptions:
serverSideEncryption: aws:kms
serverSideEncryptionKmsKeyId: <REPLACE_ME> # например arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
...
AzureRM
Пример использования AzureRM:
...
storages:
s3:
mode: External
bucketPrefix: d8
external:
provider: AzureRM
azureAccountName: <REPLACE_ME>
azureAccessKey: <REPLACE_ME>
...
Настройка бекапов
backup:
restoreFromBackupMode: false
enabled: true
cronSchedule: "0 0 1 * *"
s3:
bucketName: <REPLACE_ME>
tmpBucketName: <REPLACE_ME>
mode: External
external:
accessKey: <REPLACE_ME>
provider: <REPLACE_ME>
region: <REPLACE_ME>
secretKey: <REPLACE_ME>
persistentVolumeClaim:
enabled: <true|false>
storageClass: network-hdd
Подготовка внешних ресурсов в YCloud
Настройка Managed Service for PostgreSQL
Для создания кластера Managed Service for PostgreSQL нужна роль vpc.user и роль managed-postgresql.editor или выше. О том, как назначить роль, см. документацию Identity and Access Management.
В консоли управления выберите каталог, в котором нужно создать кластер БД.
- Выберите сервис Managed Service for PostgreSQL.
- Нажмите кнопку Create cluster.
- Введите имя кластера в поле Имя кластера. Имя кластера должно быть уникальным в рамках каталога.
- Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):
PRODUCTION
— для стабильных версий ваших приложений.PRESTABLE
— для тестирования. Prestable-окружение аналогично Production-окружению и на него также распространяется SLA, но при этом на нем раньше появляются новые функциональные возможности, улучшения и исправления ошибок. В Prestable-окружении вы можете протестировать совместимость новых версий с вашим приложением.
- Выберите версию СУБД (рекомендована 16+).
- Выберите класс хостов — он определяет технические характеристики виртуальных машин, на которых будут развернуты хосты БД. Все доступные варианты перечислены в разделе Классы хостов. При изменении класса хостов для кластера меняются характеристики всех уже созданных хостов.
- В блоке База данных укажите атрибуты БД:
- Имя БД. Это имя должно быть уникальным в рамках каталога.
Имя базы может содержать латинские буквы, цифры, подчеркивание и дефис. Максимальная длина имени 63 символа. Имена
postgres
,template0
,template1
зарезервированы для собственных нужд Managed Service for PostgreSQL. Создавать базы с этими именами нельзя. - Имя пользователя — владельца БД и пароль. По умолчанию новому пользователю выделяется 50 подключений к каждому хосту кластера.
- Локаль сортировки и локаль набора символов. Эти настройки определяют правила, по которым производится сортировка
строк (
LC_COLLATE
) и классификация символов (LC_CTYPE
). В Managed Service for PostgreSQL настройки локали действуют на уровне отдельно взятой БД. По умолчанию используется локальC
. Подробнее о настройках локали см. в the документации PostgreSQL.
- Нажмите кнопку Создать кластер.
- Создание кластера займет некоторое время.
- Выберите кластер из списка и перейдите на вкладку Базы данных. Выберите базу данных и включите следующие расширения:
- Добавьте базу данных для компонента Praefect:
- Перейдите на вкладку Пользователи и выставьте лимит подключений. Мы рекомендуем выставить не менее 150.
Манифест для описанной конфигурации PostgreSQL
...
storages:
postgres:
mode: External
external:
host: <REPLACE_ME> # FQDN-адрес мастер хоста
port: 6432
database: <REPLACE_ME>
username: <REPLACE_ME>
password: <REPLACE_ME>
praefectDatabase: praefect
praefectUsername: <REPLACE_ME> # идентично значению postgres.username
praefectPassword: <REPLACE_ME> # идентично значению postgres.password
...
Настройка Managed Service for Redis
Для создания кластера Managed Service for Redis нужна роль vpc.user и роль managed-redis.editor или выше. О том, как назначить роль, см. документацию Identity and Access Management.
В консоли управления выберите каталог, в котором нужно создать кластер БД.
- Выберите сервис Managed Service for Redis.
- Нажмите кнопку Создать кластер.
- В блоке Базовые параметры:
- Введите имя кластера в поле Имя кластера. Имя кластера должно быть уникальным в рамках каталога.
- (Опционально) Добавьте описание кластера.
- Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):
PRODUCTION
— для стабильных версий ваших приложений.PRESTABLE
— для тестирования. Prestable-окружение аналогично Production-окружению и на него также распространяется SLA, но при этом на нем раньше появляются новые функциональные возможности, улучшения и исправления ошибок. В Prestable-окружении вы можете протестировать совместимость новых версий с вашим приложением.
- Выберите версию СУБД (рекомендовано 7.0+).
- Нажмите кнопку Создать кластер.
- Создание кластера займет некоторое время.
Манифест для описанной конфигурации Redis
...
storages:
redis:
mode: External
external:
host: <REPLACE_ME> # FQDN of master хоста
port: 6379
auth:
enabled: true
password: <REPLACE_ME>
...
Настройка S3
Создайте пользователя с именем d8-code-sa
. В ответ вернутся параметры пользователя:
yc iam service-account create --name d8-code-sa
id: <userID>
folder_id: <folderID>
created_at: "YYYY-MM-DDTHH:MM:SSZ"
name: d8-code-sa
Назначьте роль storage.editor
вновь созданному пользователю для своего облака:
yc resource-manager folder add-access-binding <folderID> --role storage.editor --subject serviceAccount:<userID>
Создайте Access key для пользователя. В дальнейшем с помощью этих данных будем авторизовываться в облаке:
yc iam access-key create --service-account-name d8-code-sa
access_key:
id: <id>
service_account_id: <userID>
created_at: "YYYY-MM-DDTHH:MM:SSZ"
key_id: <ACCESS_KEY>
secret: <SECRET_KEY>
Манифест для описанной конфигурации S3
...
features:
pages:
enabled: true
s3:
mode: External
bucketPrefix: <REPLACE_ME>
external:
accessKey: <REPLACE_ME> # accesskey.key_id полученный на предыдущем шаге
provider: YCloud
secretKey: <REPLACE_ME> # secretkey полученный на предыдущем шаге
...
storages:
s3:
mode: External
bucketPrefix: <REPLACE_ME>
external:
provider: YCloud
accessKey: <REPLACE_ME> # accesskey.key_id полученный на предыдущем шаге
secretKey: <REPLACE_ME> # secretkey полученный на предыдущем шаге
proxyDownload: true
...
Настройка веб метрик
Пример основан на Yandex.Metrica
Добавьте сниппет ниже к CodeInstance:
...
appConfig:
contentSecurityPolicy:
directives:
default_src: "'self'"
img_src: "'self' data: blob: https://mc.yandex.ru https://mc.yandex.com"
script_src: "'self' 'unsafe-inline' 'unsafe-eval' 'nonce-<SCRIPT_ID>' https://mc.yandex.ru https://mc.yandex.az https://mc.yandex.by https://mc.yandex.co.il https://mc.yandex.com https://mc.yandex.com.am https://mc.yandex.com.ge https://mc.yandex.com.tr https://mc.yandex.ee https://mc.yandex.fr https://mc.yandex.kg https://mc.yandex.kz https://mc.yandex.lt https://mc.yandex.lv https://mc.yandex.md https://mc.yandex.tj https://mc.yandex.tm https://mc.yandex.uz https://mc.webvisor.com https://mc.webvisor.org https://yastatic.net"
connect_src: "'self' https://mc.yandex.ru https://mc.yandex.com"
customHtmlHeaderTags: >
<!-- Yandex.Metrika counter -->
<script type="text/javascript" nonce="<SCRIPT_ID>">
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
ym(100866129, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true
});
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/<TARGET_ID>"
style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
...
Не забудьте заменить <SCRIPT_ID>
и <TARGET_ID>
на свои значения.