Предварительная версия. Функциональность может измениться, но основные возможности сохранятся. Совместимость с будущими версиями может потребовать ручных действий по миграции.

Feature: Pages

Если шаблон публичных доменов %s.example.com, то Pages будут доступны по адресу https://code-pages.example.com (Субдомен code).

Generic

Пример использования Generic S3 (S3-compatible сервис) для развертывания:

1...
2features:
3  pages:
4    enabled: true
5    s3:
6      mode: External
7      bucketPrefix: d8
8      external:
9        provider: Generic
10        region: <REPLACE_ME>
11        accessKey: <REPLACE_ME>
12        secretKey: <REPLACE_ME>
13        endpoint: <REPLACE_ME> # например "http://minio.example.com:9090"
14
15...

YCloud

Пример использования YCloud S3 для развертывания:

1...
2features:
3  pages:
4    enabled: true
5    s3:
6      mode: External
7      bucketPrefix: d8
8      external:
9        provider: YCloud
10        accessKey: <REPLACE_ME>
11        secretKey: <REPLACE_ME>
12...

AzureRM

Пример использования AzureRM для развертывания:

1...
2features:
3  pages:
4    enabled: true
5    s3:
6      mode: External
7      bucketPrefix: d8
8      external:
9        provider: AzureRM
10        azureAccountName: <REPLACE_ME>
11        azureAccessKey: <REPLACE_ME>
12...

Внешний Redis

Примеры различной конфигурации внешнего redis-кластера

Один сервер

1...
2storages:
3  redis:
4    external:
5      auth:
6        enabled: true
7        password: <REPLACE_ME>
8      host: 10.10.10.2
9      port: 6379
10    mode: External
11...

С использованием сентинелов

1...
2storages:
3  redis:
4    external:
5      auth:
6        enabled: true
7        password: <REPLACE_ME>
8      masterName: <REPLACE_ME>
9      port: 6379
10      sentinels:
11        - host: <REPLACE_ME> # sentinel host #1
12          port: 26379
13        - host: <REPLACE_ME> # sentinel host #2
14    mode: External
15...

Внешний Postgres

Без TLS

1...
2storages:
3  postgres:
4    external:
5      database: db
6      host: <REPLACE_ME> # адрес мастер-хоста
7      port: 5432
8      username: <REPLACE_ME>
9      password: <REPLACE_ME>
10      praefectDatabase: praefect
11      praefectUsername: <REPLACE_ME>
12      praefectPassword: <REPLACE_ME>
13    mode: External
14...

С включенным TLS

Вы также можете использовать TLS авторизацию при подключении к основной базе данных:

1...
2storages:
3  postgres:
4    external:
5      database: db
6      host: <REPLACE_ME> # адрес мастер-хоста
7      port: 5432
8      username: simple_user
9      sslmode: verify-full
10      serverCA: |
11        # postgres server CA
12      clientCert: |
13        # Your TLS certificate
14      clientKey: |
15        # Your TLS key
16    mode: External
17...

Внешний S3

Generic

Пример использования Generic S3 (S3-compatible сервис):

1...
2storages:
3  s3:
4    mode: External
5    bucketPrefix: d8
6    external:
7      provider: Generic
8      region: <REPLACE_ME>
9      accessKey: <REPLACE_ME>
10      secretKey: <REPLACE_ME>
11      endpoint: <REPLACE_ME> # например http://minio.example.com:9090
12...

YCloud

С выключенным серверным шифрованием

Пример использования стандартной конфигурации YCloud S3 описан здесь:

С включенным серверным шифрованием

Пример использования AWS c SSE (шифрование на стороне сервера):

1...
2storages:
3  s3:
4    mode: External
5    bucketPrefix: d8
6    external:
7      provider: AWS
8      region: <REPLACE_ME>
9      accessKey: <REPLACE_ME>
10      secretKey: <REPLACE_ME>
11      storageOptions:
12        serverSideEncryption: aws:kms
13        serverSideEncryptionKmsKeyId: <REPLACE_ME> # например arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
14...

AzureRM

Пример использования AzureRM:

1...
2storages:
3  s3:
4    mode: External
5    bucketPrefix: d8
6    external:
7      provider: AzureRM
8      azureAccountName: <REPLACE_ME>
9      azureAccessKey: <REPLACE_ME>
10...

Настройка бекапов

1backup:
2  restoreFromBackupMode: false
3  enabled: true
4  cronSchedule: "0 0 1 * *"
5  s3:
6    bucketName: <REPLACE_ME>
7    tmpBucketName: <REPLACE_ME>
8    mode: External
9    external:
10      accessKey: <REPLACE_ME>
11      provider: <REPLACE_ME>
12      region: <REPLACE_ME>
13      secretKey: <REPLACE_ME>
14  persistentVolumeClaim:
15    enabled: <true|false>
16    storageClass: network-hdd

Подготовка внешних ресурсов в YCloud

Настройка Managed Service for PostgreSQL

Для создания кластера Managed Service for PostgreSQL нужна роль vpc.user и роль managed-postgresql.editor или выше. О том, как назначить роль, см. документацию Identity and Access Management.

В консоли управления выберите каталог, в котором нужно создать кластер БД.

  1. Выберите сервис Managed Service for PostgreSQL.
  2. Нажмите кнопку Create cluster.
  3. Введите имя кластера в поле Имя кластера. Имя кластера должно быть уникальным в рамках каталога.
  4. Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):
  • PRODUCTION — для стабильных версий ваших приложений.
  • PRESTABLE — для тестирования. Prestable-окружение аналогично Production-окружению и на него также распространяется SLA, но при этом на нем раньше появляются новые функциональные возможности, улучшения и исправления ошибок. В Prestable-окружении вы можете протестировать совместимость новых версий с вашим приложением.
  1. Выберите версию СУБД (рекомендована 16+).
  2. Выберите класс хостов — он определяет технические характеристики виртуальных машин, на которых будут развернуты хосты БД. Все доступные варианты перечислены в разделе Классы хостов. При изменении класса хостов для кластера меняются характеристики всех уже созданных хостов.

  1. В блоке База данных укажите атрибуты БД:
  • Имя БД. Это имя должно быть уникальным в рамках каталога. Имя базы может содержать латинские буквы, цифры, подчеркивание и дефис. Максимальная длина имени 63 символа. Имена postgres, template0, template1 зарезервированы для собственных нужд Managed Service for PostgreSQL. Создавать базы с этими именами нельзя.
  • Имя пользователя — владельца БД и пароль. По умолчанию новому пользователю выделяется 50 подключений к каждому хосту кластера.
  • Локаль сортировки и локаль набора символов. Эти настройки определяют правила, по которым производится сортировка строк (LC_COLLATE) и классификация символов (LC_CTYPE). В Managed Service for PostgreSQL настройки локали действуют на уровне отдельно взятой БД. По умолчанию используется локаль C. Подробнее о настройках локали см. в the документации PostgreSQL.

  1. Нажмите кнопку Создать кластер.
  2. Создание кластера займет некоторое время.
  3. Выберите кластер из списка и перейдите на вкладку Базы данных. Выберите базу данных и включите следующие расширения:

  1. Добавьте базу данных для компонента Praefect:

  1. Перейдите на вкладку Пользователи и выставьте лимит подключений. Мы рекомендуем выставить не менее 150.

Манифест для описанной конфигурации PostgreSQL

1...
2storages:
3  postgres:
4    mode: External
5    external:
6      host: <REPLACE_ME> # FQDN-адрес мастер хоста
7      port: 6432
8      database: <REPLACE_ME>
9      username: <REPLACE_ME>
10      password: <REPLACE_ME>
11      praefectDatabase: praefect
12      praefectUsername: <REPLACE_ME> # идентично значению postgres.username
13      praefectPassword: <REPLACE_ME> # идентично значению postgres.password
14...

Настройка Managed Service for Redis

Для создания кластера Managed Service for Redis нужна роль vpc.user и роль managed-redis.editor или выше. О том, как назначить роль, см. документацию Identity and Access Management.

В консоли управления выберите каталог, в котором нужно создать кластер БД.

  1. Выберите сервис Managed Service for Redis.
  2. Нажмите кнопку Создать кластер.
  3. В блоке Базовые параметры:
  • Введите имя кластера в поле Имя кластера. Имя кластера должно быть уникальным в рамках каталога.
  • (Опционально) Добавьте описание кластера.
  • Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):
    • PRODUCTION — для стабильных версий ваших приложений.
    • PRESTABLE — для тестирования. Prestable-окружение аналогично Production-окружению и на него также распространяется SLA, но при этом на нем раньше появляются новые функциональные возможности, улучшения и исправления ошибок. В Prestable-окружении вы можете протестировать совместимость новых версий с вашим приложением.
  1. Выберите версию СУБД (рекомендовано 7.0+).
  2. Нажмите кнопку Создать кластер.
  3. Создание кластера займет некоторое время.

Манифест для описанной конфигурации Redis

1...
2storages:
3  redis:
4    mode: External
5    external:
6      host: <REPLACE_ME> # FQDN of master хоста
7      port: 6379
8      auth:
9        enabled: true
10        password: <REPLACE_ME>
11...

Настройка S3

Создайте пользователя с именем d8-code-sa. В ответ вернутся параметры пользователя:

1yc iam service-account create --name d8-code-sa
2id: <userID>
3folder_id: <folderID>
4created_at: "YYYY-MM-DDTHH:MM:SSZ"
5name: d8-code-sa

Назначьте роль storage.editor вновь созданному пользователю для своего облака:

1yc resource-manager folder add-access-binding <folderID> --role storage.editor --subject serviceAccount:<userID>

Создайте Access key для пользователя. В дальнейшем с помощью этих данных будем авторизовываться в облаке:

1yc iam access-key create --service-account-name  d8-code-sa
2access_key:
3  id: <id>
4  service_account_id: <userID>
5  created_at: "YYYY-MM-DDTHH:MM:SSZ"
6  key_id: <ACCESS_KEY>
7secret: <SECRET_KEY>

Манифест для описанной конфигурации S3

1...
2features:
3  pages:
4    enabled: true
5    s3:
6      mode: External
7      bucketPrefix: <REPLACE_ME>
8      external:
9        accessKey: <REPLACE_ME> # accesskey.key_id полученный на предыдущем шаге
10        provider: YCloud
11        secretKey: <REPLACE_ME> # secretkey полученный на предыдущем шаге
12...
13storages:
14  s3:
15    mode: External
16    bucketPrefix: <REPLACE_ME>
17    external:
18      provider: YCloud
19      accessKey: <REPLACE_ME> # accesskey.key_id полученный на предыдущем шаге
20      secretKey: <REPLACE_ME> # secretkey полученный на предыдущем шаге
21      proxyDownload: true
22...

Настройка веб метрик

Пример основан на Yandex.Metrica

Добавьте сниппет ниже к CodeInstance:

1...
2appConfig:
3  contentSecurityPolicy:
4    directives:
5      default_src: "'self'"
6      img_src: "'self' data: blob: https://mc.yandex.ru https://mc.yandex.com"
7      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"
8      connect_src: "'self' https://mc.yandex.ru https://mc.yandex.com"
9  customHtmlHeaderTags: >
10    <!-- Yandex.Metrika counter -->
11
12    <script type="text/javascript" nonce="<SCRIPT_ID>">
13      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
14      m[i].l=1*new Date();
15      for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
16      k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
17      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
18
19      ym(100866129, "init", {
20            clickmap:true,
21            trackLinks:true,
22            accurateTrackBounce:true
23      });
24    </script>
25
26    <noscript><div><img src="https://mc.yandex.ru/watch/<TARGET_ID>"
27    style="position:absolute; left:-9999px;" alt="" /></div></noscript>
28
29    <!-- /Yandex.Metrika counter -->
30...

Не забудьте заменить <SCRIPT_ID> и <TARGET_ID> на свои значения.