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

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.

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

  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

...
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.

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

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

Манифест для описанной конфигурации 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> на свои значения.