Spec-Zone.ru › Chef 16

Установка частного супермаркета

[редактировать на GitHub]

Chef Supermarket — это сайт для кулинарных книг сообщества. Он предоставляет легкоизучаемый репозиторий кулинарных книг и дружелюбный веб-интерфейс. Кулинарные книги, которые являются частью Chef Supermarket, доступны любому пользователю Chef.

Существует два способа использования Chef Supermarket:

  • Общедоступный Chef Supermarket размещается компанией Chef Software и находится по адресу Chef Supermarket.
  • Частный Chef Supermarket можно установить на локальном сервере за брандмауэром во внутренней сети. Получение кулинарных книг из частного Chef Supermarket часто быстрее, чем из общедоступного Chef Supermarket, из-за меньшего расстояния и меньшего числа кулинарных книг для обработки. Частный Chef Supermarket также может помочь формализовать внутренние процессы управления выпуском кулинарных книг (например, «кулинарная книга не выпускается, пока она не опубликована в частном Chef Supermarket»).

Частный Chef Supermarket устанавливается за брандмауэром во внутренней сети. Помимо изменения местоположения, где хранятся кулинарные книги сообщества, он ведет себя так же, как и общедоступный Chef Supermarket.

Примечание

Исходный код Chef Supermarket находится по следующим URL-адресам:

  • Само приложение: https://github.com/chef/supermarket. Сообщать об ошибках: https://github.com/chef/supermarket/issues.
  • Кулинарная книга, которая запускается командой supermarket-ctl reconfigure: https://github.com/chef/supermarket/tree/master/omnibus/cookbooks/omnibus-supermarket

Требования

Частный Chef Supermarket имеет следующие требования:

  • Функционирующий сервер Chef Infra Server (версия Chef Server 12.0 или выше) в качестве поставщика OAuth 2.0
  • Пользовательский аккаунт на сервере Chef Infra Server с привилегиями admins
  • Ключ для учетной записи пользователя на сервере Chef
  • Хост x86_64 совместимый с Linux с объемом оперативной памяти не менее 1 ГБ
  • Синхронизированные системные часы на сервере Chef Infra Server и хостах Supermarket
  • Достаточно места на диске на хосте для хранения кулинарных книг или учетные данные для хранения кулинарных книг в ведре Amazon Simple Storage Service (S3)

Рекомендации по емкости хранилища:

  • Размер базы данных PostgreSQL будет увеличиваться линейно в зависимости от количества кулинарных книг и количества версий кулинарных книг, опубликованных
  • Размер базы данных Redis незначителен, так как она используется только для очереди фоновых задач и для кэширования небольшого количества ответов API
  • Рост хранилища кулинарных книг полностью зависит от размера опубликованных кулинарных книг. Кулинарные книги, которые включают двоичные файлы или другие большие файлы, займут больше места, чем кулинарные книги, содержащие только код
  • Использование частного Supermarket с PostgreSQL, Redis и хранилищем кулинарных книг на удалённом хосте — это не столько решение по масштабированию хранилища, сколько вопрос бесперебойной работы сервиса, резервного копирования и восстановления для вашей организации
  • Для справки: по состоянию на сентябрь 2017 года после трех лет работы общедоступный Supermarket имеет около 70 000 пользователей, 3300 кулинарных книг с общим количеством 20 000 опубликованных версий. База данных PostgreSQL весит 310 МБ (50 МБ при экспорте с помощью pg_dump), а ведро S3, содержащее все опубликованные кулинарные книги сообщества, весит 2,7 ГБ

Идентификация Chef

Chef Identity (также известный как oc-id) — это служба аутентификации и авторизации OAuth 2.0, входящая в состав сервера Chef Infra Server. Chef Identity необходимо настроить для работы с частным Chef Supermarket, после чего пользователи смогут использовать те же учетные данные для доступа к Chef Supermarket, что и для доступа к Chef Infra Server.

Примечание

Сервер Chef Supermarket должен иметь возможность доступа (через HTTPS) к указанному chef_server_url во время согласования OAuth 2.0. Обычно такие проблемы связаны с разрешением имен и правилами брандмауэра.

Настройка

Для настройки Chef Supermarket для использования Chef Identity выполните следующие действия:

  1. Войдите на сервер Chef Infra Server через SSH и поднимитесь до пользователя с правами администратора. Если используется кластер серверов Chef Infra Server с несколькими узлами, войдите в узел, выступающий в качестве основного узла в кластере.

  2. Обновите файл конфигурации /etc/opscode/chef-server.rb.

    Чтобы определить информацию об OAuth 2 для Chef Supermarket, создайте хеш, подобный этому:

    oc_id['applications'] ||= {}
    oc_id['applications']['supermarket'] = {
      'redirect_uri' => 'https://supermarket.mycompany.com/auth/chef_oauth2/callback',
    }
    
  3. Переконфигурируйте сервер Chef Infra Server.

    sudo chef-server-ctl reconfigure
    
  4. Получите учетные данные клиента OAuth 2.0 Supermarket:

    В зависимости от версии и конфигурации сервера Chef Infra Server (см. chef-server.rb), это можно получить с помощью chef-server-ctl oc-id-show-app supermarket или найти в /etc/opscode/oc-id-applications/supermarket.json:

    {
      "name": "supermarket",
      "uid": "0bad0f2eb04e935718e081fb71asdfec3681c81acb9968a8e1e32451d08b",
      "secret": "17cf1141cc971a10ce307611beda7ffadstr4f1bc98d9f9ca76b9b127879",
      "redirect_uri": "https://supermarket.mycompany.com/auth/chef_oauth2/callback"
    }
    

    Значения uid и secret понадобятся позже в процессе настройки Chef Supermarket.

Примечание

Добавьте столько приложений Chef Identity в файл конфигурации /etc/opscode/chef-server.rb, сколько необходимо. Для каждого добавленного приложения генерируется файл JSON, содержащий токены аутентификации для этого приложения. Секреты добавляются в базу данных Chef Identity и доступны всем узлам в группе front-end сервера Chef Infra Server. Генерируемые файлы JSON не нужно копировать никуда.

Примечание

Указанный URL перенаправления ДОЛЖЕН соответствовать FQDN сервера Chef Supermarket. URI также должен быть правильным: /auth/chef_oauth2/callback. В противном случае будет отображено сообщение об ошибке, подобное The redirect uri included is not valid..

Установка Supermarket

Для установки частного Chef Supermarket используйте supermarket-omnibus-cookbook. Эта кулинарная книга доступна в общедоступном Chef Supermarket.

  • Кулинарная книга supermarket-omnibus-cookbook основана на атрибутах; используйте пользовательскую кулинарную книгу для указания уникальных атрибутов вашей организации node[supermarket_omnibus]
  • Пользовательская кулинарная книга является оболочкой вокруг supermarket-omnibus-cookbook, которая выполняет фактическую установку пакетов Chef Supermarket, а затем записывает пользовательские значения атрибутов node[supermarket_omnibus] в /etc/supermarket/supermarket.json
  • Сам пакет Chef Supermarket содержит внутреннюю кулинарную книгу, которая настраивает уже установленный пакет, используя атрибуты, определенные в /etc/supermarket/supermarket.json.

Примечание

В общем случае для производственных сред Chef рекомендует начинать работу с Chef Supermarket на небольших виртуальных машинах, а затем увеличивать размер виртуальной машины по мере необходимости. Поместите директорию /var/opt/supermarket на отдельный диск и используйте LVM для ее расширения.

Создание оболочки

Кулинарная книга-оболочка используется для определения требований, специфичных для проекта и/или организации, связанных с общедоступной кулинарной книгой.

image

В случае установки частного Chef Supermarket Chef рекомендует использовать кулинарную книгу-оболочку для указания определенных атрибутов, специфичных для вашей организации, при этом позволяя использовать общую кулинарную книгу-установщик, которая, в свою очередь, устанавливает пакет Chef Supermarket за вашим брандмауэром.

Все ключи в node['supermarket_omnibus'] записываются как /etc/supermarket/supermarket.json. Добавьте другие ключи по мере необходимости, чтобы переопределить атрибуты по умолчанию, указанные в пакете Chef Supermarket omnibus package. Например:

default['supermarket_omnibus']['chef_server_url'] = 'https://chefserver.mycompany.com:443'
default['supermarket_omnibus']['chef_oauth2_app_id'] = '14dfcf186221781cff51eedd5ac1616'
default['supermarket_omnibus']['chef_oauth2_secret'] = 'a49402219627cfa6318d58b13e90aca'
default['supermarket_omnibus']['chef_oauth2_verify_ssl'] = false
default['supermarket_omnibus']['fqdn'] = 'supermarket.mycompany.com'

На своем рабочем столе сгенерируйте новую кулинарную книгу, используя командную строку chef:

  1. Сгенерировать кулинарную книгу:

    chef generate cookbook my_supermarket_wrapper
    
  2. Перейти в директорию с этой кулинарной книгой:

    cd my_supermarket_wrapper
    
  3. Определяет зависимость кулинарной книги-оболочки от кулинарной книги supermarket-omnibus-cookbook. Откройте файл metadata.rb вновь созданной кулинарной книги и добавьте следующую строку:

    depends 'supermarket-omnibus-cookbook'
    
  4. Сохраните и закройте файл metadata.rb.

  5. Откройте рецепт /recipes/default.rb в только что сгенерированной кулинарной книге и добавьте следующее содержимое:

    include_recipe 'supermarket-omnibus-cookbook'
    

    Это гарантирует, что файл default.rb в supermarket-omnibus-cookbook будет выполнен.

Определение атрибутов

Определите атрибуты для установки Chef Supermarket и как она подключается к Chef Infra Server. Один из подходов — жестко закодировать атрибуты в рецепте кулинарной книги-оболочки default.rb. Более лучший подход — разместить эти атрибуты в пакете данных, а затем ссылаться на них из рецепта. Например, пакет данных может называться apps, а элемент пакета данных в пакете данных может называться supermarket.

Должны быть определены следующие значения атрибутов:

  • chef_server_url
  • chef_oauth2_app_id
  • chef_oauth2_secret

После настройки вы можете получить значения chef_oauth2_app_id и chef_oauth2_secret с вашего сервера Chef Infra Server в /etc/opscode/oc-id-applications/supermarket.json:

Для chef_server_url, введите URL вашего сервера Chef. Для chef_oauth2_app_id, введите uid из /etc/opscode/oc-id-applications/supermarket.json. Для chef_oauth2_secret, введите секрет из /etc/opscode/oc-id-applications/supermarket.json

Для определения этих атрибутов выполните следующие действия:

  1. Откройте файл /recipes/default.rb и добавьте следующее, ПРЕЖДЕ строки include_recipe, добавленной на предыдущем шаге. В этом примере используется пакет данных с именем apps и элемент пакета данных с именем supermarket:

    app = data_bag_item('apps', 'supermarket')
    
  2. Установите атрибуты из пакета данных:

    node.override['supermarket_omnibus']['chef_server_url'] = app['chef_server_url']
    node.override['supermarket_omnibus']['chef_oauth2_app_id'] = app['chef_oauth2_app_id']
    node.override['supermarket_omnibus']['chef_oauth2_secret'] = app['chef_oauth2_secret']
    

    По завершении, файл /recipes/default.rb должен содержать код, похожий на:

    app = data_bag_item('apps', 'supermarket')
    
    node.override['supermarket_omnibus']['chef_server_url'] = app['chef_server_url']
    node.override['supermarket_omnibus']['chef_oauth2_app_id'] = app['chef_oauth2_app_id']
    node.override['supermarket_omnibus']['chef_oauth2_secret'] = app['chef_oauth2_secret']
    
    include_recipe 'supermarket-omnibus-cookbook'
    
  3. Сохраните и закройте файл /recipes/default.rb.

Примечание

Если вы запускаете свой частный супермаркет в AWS, вам может потребоваться установить дополнительный атрибут для публичного IP-адреса узла:

node.override['supermarket_omnibus']['config']['fqdn'] = your_node_public_ip

Загрузка оболочки

Кулинарную книгу-оболочку вокруг кулинарной книги supermarket-omnibus-cookbook необходимо загрузить на сервер Chef Infra вместе с любыми кулинарными книгами, от которых зависит кулинарная книга supermarket-omnibus-cookbook.

Чтобы загрузить кулинарные книги, необходимые для установки Chef Supermarket, выполните следующие действия:

  1. Установите Berkshelf:

    berks install
    
  2. Перейдите в каталог ~/.berkshelf/cookbooks:

    cd ~/.berkshelf/cookbooks
    
  3. Загрузите все кулинарные книги на сервер Chef Infra:

    knife cookbook upload -a
    
  4. Перейдите в каталог, в котором была создана кулинарная книга-оболочка:

    cd path/to/wrapper/cookbook/
    
  5. Загрузите кулинарную книгу-оболочку на сервер Chef Infra:

    knife cookbook upload -a
    

Инициализация супермаркета

Инициализируйте узел, на котором будет установлен Chef Supermarket. Например, для инициализации узла, на котором выполняется Ubuntu в Amazon Web Services (AWS), команда похожа на:

knife bootstrap ip_address -N supermarket-node -x ubuntu --sudo

где

  • -N определяет имя узла Chef Supermarket: supermarket-node
  • -x определяет имя пользователя (ssh): ubuntu
  • --sudo гарантирует, что при выполнении команд на узле во время операции инициализации используется sudo

После завершения операции инициализации выполните следующие действия:

  1. Отредактируйте узел, чтобы добавить рецепт кулинарной книги-оболочки /recipes/default.rb в список задач:

    knife node edit supermarket-node
    

    где supermarket-node — имя только что инициализированного узла.

  2. Добавьте рецепт в список задач:

    "run_list": [
      "recipe[my_supermarket_wrapper::default]"
    ]
    
  3. Запустите Chef Infra Client на недавно инициализированном узле Chef Supermarket. Например, с использованием SSH:

    ssh ubuntu@your-supermarket-node-public-dns
    
  4. После доступа к узлу Chef Supermarket запустите Chef Infra Client:

    sudo chef-client
    

Установка Supermarket напрямую (без кулинарной книги)

Хотя использование кулинарной книги для установки Supermarket имеет много преимуществ, в некоторых случаях проще установить Supermarket вручную. Эти шаги проведут вас через процесс ручной настройки вашего частного сервера Supermarket.

Перед выполнением этих шагов убедитесь, что вы выполнили процесс настройки OAuth, описанный в разделе «Chef Identity» данного руководства.

  1. Скачать соответствующий пакет для вашей операционной системы с downloads.chef.io.

  2. Установите Supermarket с помощью соответствующего менеджера пакетов для вашей дистрибуции:

    • Для Ubuntu:

      dpkg -i /path/to/package/supermarket*.deb
      
    • Для RHEL/CentOS:

      rpm -Uvh /path/to/package/supermarket*.rpm
      
  3. Выполните команду reconfigure для завершения начальной установки:

    sudo supermarket-ctl reconfigure
    
  4. Создайте файл /etc/supermarket/supermarket.json и добавьте в него следующую информацию, заменив значения каждого параметра на учетные данные клиента OAuth 2.0, созданные в предыдущем разделе:

    {
        "chef_server_url": "https://chefserver.mycompany.com",
        "chef_oauth2_app_id": "0bad0f2eb04e935718e081fb71asdfec3681c81acb9968a8e1e32451d08b",
        "chef_oauth2_secret": "17cf1141cc971a10ce307611beda7ffadstr4f1bc98d9f9ca76b9b127879",
        "fqdn": "supermarket.mycompany.com",
        "chef_oauth2_verify_ssl": false
    }
    

    Где:

    • "chef_server_url" должен содержать FQDN вашего сервера Chef Infra. Обратите внимание, что если вы используете нестандартный порт SSL, его необходимо добавить к URL. Например: https://chefserver.mycompany.com:65400
    • "chef_oauth2_app_id" должен содержать значение "uid" из ваших учетных данных OAuth
    • "chef_oauth2_secret" должен содержать значение "secret" из ваших учетных данных OAuth
    • chef_oauth2_verify_ssl имеет значение false, что необходимо при использовании самозаверяющего сертификата без правильно настроенного центра сертификации
    • fqdn должен содержать требуемый URL, который будет использоваться для доступа к вашему частному Supermarket. Если не указано иное, по умолчанию используется FQDN машины
  5. Выполните ещё одну команду reconfigure для применения изменений:

    sudo supermarket-ctl reconfigure
    

Подключение к Supermarket

Для доступа к только что созданному частному Chef Supermarket имя хоста должно быть разрешимо с рабочей станции. Для использования в производственной среде имя хоста должно иметь запись DNS в соответствующем домене, которому доверяет рабочая станция каждого пользователя.

  1. Откройте имя хоста Chef Supermarket в браузере. Частный Chef Supermarket сгенерирует и использует самозаверяющий сертификат, если сертификат не был предоставлен в ходе установки (через кулинарную книгу-оболочку).
  2. Если при подключении к Chef Supermarket через веб-браузер отображается сообщение об SSL, примите SSL-сертификат. Для частного Chef Supermarket, используемого в производственной среде, следует использовать доверенный SSL-сертификат.
  3. После открытия Chef Supermarket в веб-браузере нажмите ссылку Создать учетную запись. Если пользователь ещё не авторизован, отображается запрос на вход в сервер Chef Infra. Авторизуйте Chef Supermarket для использования учетных данных сервера Chef Infra для аутентификации.

Примечание

Указанный для Chef Identity URL перенаправления ДОЛЖЕН совпадать с FQDN-именем хоста сервера Chef Supermarket. URI также должен быть правильным: /auth/chef_oauth2/callback. В противном случае будет показано сообщение об ошибке, подобное The redirect uri included is not valid..

Настройка Supermarket

Chef Supermarket — это приложение Ruby on Rails с базой данных PostgreSQL. Настройка частного Chef Supermarket может быть масштабирована, например, с использованием внешней базы данных, внешнего кеша и внешнего хранилища кулинарных книг.

Внешняя база данных

Установка Chef Supermarket может использовать внешнюю базу данных PostgreSQL (9.3 или выше) с установленным и загруженным pgpsql и pg_trgm. Общедоступный Chef Supermarket использует Amazon Relational Database Service (RDS). Для использования внешней базы данных настройте следующие атрибуты в рецепте /recipes/default.rb кулинарной книги-оболочки:

node.override['supermarket_omnibus']['config']['postgresql']['enable'] = false
node.override['supermarket_omnibus']['config']['database']['user'] = 'supermarket'
node.override['supermarket_omnibus']['config']['database']['name'] = 'supermarket'
node.override['supermarket_omnibus']['config']['database']['host'] = 'yourcompany...rds.amazon.com'
node.override['supermarket_omnibus']['config']['database']['port'] = '5432'
node.override['supermarket_omnibus']['config']['database']['pool'] = '25'
node.override['supermarket_omnibus']['config']['database']['password'] = 'topsecretneverguessit'

Внешний кеш

Установка Chef Supermarket также может использовать внешнее хранилище кеша. Общедоступный Chef Supermarket использует Redis в Amazon ElastiCache. Один экземпляр Redis на сервере приложения частного Chef Supermarket может быть запущен безопасно. Используйте Redis 2.8 (или выше) для пары высокой доступности. Для использования внешнего кеша настройте следующие атрибуты в рецепте /recipes/default.rb кулинарной книги-оболочки:

node.override['supermarket_omnibus']['config']['redis']['enable'] = false
node.override['supermarket_omnibus']['config']['redis_url'] = 'redis://your-redis-instance:6379'

Внешнее хранилище кулинарных книг

Артефакты кулинарных книг — файлы tar.gz, которые загружаются в Chef Supermarket при совместном использовании кулинарной книги, — могут храниться либо на локальном файловом сервере узла Chef Supermarket (по умолчанию /var/opt/supermarket/data), либо в ведре Amazon Simple Storage Service (S3). Для использования ведра S3 настройте следующие атрибуты в рецепте /recipes/default.rb кулинарной книги-оболочки:

node.override['supermarket_omnibus']['config']['s3_access_key_id'] = 'yourkeyid'
node.override['supermarket_omnibus']['config']['s3_bucket'] = 'all-our-awesome-cookbooks'
node.override['supermarket_omnibus']['config']['s3_region'] = 'some-place-3'
node.override['supermarket_omnibus']['config']['s3_secret_access_key'] = 'yoursecretaccesskey'

Примечание

Зашифрованные ведра S3 в настоящее время не поддерживаются.

Обновление частного супермаркета

  1. Отключите сервер, на котором работает частный супермаркет.

  2. Создайте резервную копию каталога /var/opt/supermarket.

  3. Скачайте пакет Chef Supermarket.

  4. Обновите систему с помощью нового пакета с помощью соответствующего менеджера пакетов для вашей дистрибуции:

    • Для Ubuntu:

      dpkg -i /path/to/package/supermarket*.deb
      
    • Для RHEL/CentOS:

      rpm -Uvh /path/to/package/supermarket*.rpm
      
  5. Перенастроить сервер, на котором установлен Chef Supermarket:

    sudo supermarket-ctl reconfigure
    

Теперь частный Supermarket обновлен на вашем сервере. Рекомендуется перезапустить сервисы, выполняющие Chef Supermarket, чтобы убедиться, что старая установка Chef Supermarket не сохранилась в оперативной памяти сервера.

  1. Получите имя активного блока:

    systemctl list-units | grep runsvdir
    
  2. Перезапустите блок:

    systemctl restart UNIT_NAME
    

    Это перезапустит процессы runsvdir, runsv, и svlogd, выполняющие Chef Supermarket.

© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/install_supermarket/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API