Изучение 26 методов анализа больших данных: часть 1
Изучение 26 методов анализа больших данных: часть 1
Есть много способов автоматизировать процесс установки и настройки бокса. По любой причине, если вся наша система на данный момент состоит из одного блока, настройка полной инфраструктуры SCM (Software Configuration Management) является излишней. Сценарии оболочки являются одним из вариантов, но мы также могли бы использовать урезанную версию SCM, которая доступна в некоторых инструментах. Chef - это один из популярных вариантов, а chef-solo - это автономный режим конфигурации Chef, в котором нам не требуется дополнительный узел, который будет действовать как «chef-сервер». Все, что ему нужно, - это URL или путь к тарболл-пакету, содержащему поваренные книги шеф-повара. По сравнению с сценариями оболочки этот тип подхода более декларативный и эффективный, а также является хорошим введением в процесс SCM или IaC (Infrastructure as Code).
«Рецепты» внутри «поваренной книги шеф-повара» имеют DSL на основе рубина, который описывает «ресурсы», которые находятся в определенном состоянии на узле. Давайте начнем с пошагового руководства, чтобы познакомиться с несколькими концепциями Chef, которые также применимы к chef-solo. Наша цель - настроить узел Ubuntu с запущенным веб-приложением Python / Django, используя Gunicorn и NGINX.
Примечание. Нам не обязательно устанавливать ChefDK на нашу «рабочую станцию Chef» (нашу машину), хотя с ее помощью мы можем использовать команды «chef generate» для запуска со структурой каталогов для создания кулинарных книг, рецептов и многого другого. В этой статье мы будем предполагать, что ChefDK установлен на нашей рабочей станции. Команды выполнялись с использованием версии 4.7.26-1 ChefDK.
(Все, начиная с этого момента, если не указано иное, должно выполняться на нашей машине, также называемой «Рабочая станция Chef»)
Поваренные книги в chef - это многократно используемые модули, которые содержат все необходимое для поддержки сценария конфигурации. Поваренные книги могут содержать несколько «рецептов», а «рецепты» в основном сос��оят из шаблонов ресурсов. default.rb
это рецепт по умолчанию, который будет запускаться, когда в списке выполнения упоминается поваренная книга . Различные рецепты позволяют разделить проблемы. Однако для этого урока мы добавим все объявления ресурсов в один основной файл рецепта, который является default.rb
.
Создайте папку с именем «my-chef-project» и создайте внутри нее папку «Cookbooks». От ./my-chef-project/cookbooks/
, запустить:
$ chef generate cookbook my-cookbook
Наша структура каталогов теперь будет выглядеть так:
.
└── my-chef-project
└── cookbooks
└── my-cookbook
├── CHANGELOG.md
├── LICENSE
├── Policyfile.rb
├── README.md
├── chefignore
├── kitchen.yml
├── metadata.rb
├── recipes
│ └── default.rb
├── spec
│ ├── spec_helper.rb
│ └── unit
│ └── recipes
│ └── default_spec.rb
└── test
└── integration
└── default
└── default_test.rb
Первый шаг к настройке нашего узла - определить, какие пакеты требуются нашему приложению. Наш узел выбран как Ubuntu, поэтому мы можем положиться на менеджер пакетов APT для сбора зависимостей. Установка пакетов, предоставляемых дистрибутивом ОС, - это очень просто:
apt_update
package 'python3'
package 'python3-pip'
package 'nginx'
package 'pkg-config'
package 'libcairo2-dev'
package 'libjpeg-dev'
package 'libgif-dev'
package 'libgirepository1.0-dev'
Это в значительной степени говорит само за себя. Первая строка обновит репозиторий apt, а следующие строки установят эти пакеты.
Примечание: пакеты, следующие за 'nginx', необходимы для компиляции некоторых зависимостей python через pip. Они могут отличаться в зависимости от ваших зависимостей проекта python / django, указанных в
requirements.txt
. Вы можете использовать метод проб и ошибок, чтобы определить эти пакеты, которые нужно включить в свою кулинарную книгу. Чтобы сделать это, выполните руководствоsudo pip install -r requirements.txt
(Примечание: это устанавливает пакеты для всей системы!) На только что созданной машине с Ubuntu, чтобы проверить, работает ли она успешно. Если нет, stderr должен дать вам подсказки о том, какие пакеты отсутствуют.
Как только мы закончим добавление необходимых пакетов, нам нужно создать непривилегированного пользователя Linux, которому будет принадлежать исходный код приложения.
user 'bob' do
uid 1212
gid 'users'
home '/home/bob'
shell '/bin/bash'
password '$1$alilbito$C83FsODuq0A1pUMeFPeR10'
end
Обратите внимание, что пароль - это теневой хэш-формат, используемый в Linux. Его можно получить с помощью OpenSSL:
$ openssl passwd -1 -salt alilbitof mypassword
Теперь давайте включим исходный код приложения Django в нашу кулинарную книгу. Поместите исходный код внутри ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/
Создать ./my-chef-project/cookbooks/my-cookbook/files/default
каталог, если он не существует.
Инструкция по копированию этих файлов в удаленное местоположение на нашем узле описана с использованием ресурса remote_directory :
remote_directory '/home/bob/myapp' do
source 'myapp' # This is the name of the folder containing our source code that we kept in ./my-cookbook/files/default/
owner 'bob'
group 'users'
mode '0755'
action :create
end
Чтобы установить пакеты Python requirements.txt
, мы можем использовать ресурс execute для запуска произвольной команды. В этом случае нам нужно выполнить над ним команду pip install:
execute 'install python dependencies' do
command 'pip3 install -r requirements.txt'
cwd '/home/bob/myapp'
end
Примечание: имейте в виду, что это будет выполняться от имени пользователя root, и библиотеки python будут установлены во всей системе. Если наш узел предназначен исключительно для запуска этого единственного приложения на Python, то это не большая проблема. Несмотря на это, лучший способ сохранить чистоту и разумность - это найти и использовать поваренную книгу сообщества, которая управляет установками Python или «virtualenvs». (или, по крайней мере, напишите серию блоков исполнения, чтобы воспроизвести это). Использование virtualenvs в python гарантирует, что любые системные инструменты на базе python или другие проекты python не будут затронуты
Теперь пришло время подготовить HTTP-сервер Gunicorn WSGI с NGINX в качестве нашего обратного прокси-сервера. Nginx также используется для обработки всех статических ресурсов Django.
Чтобы привязать Gunicorn как сервис на Ubuntu, можно использовать Systemd. Systemd_unit ресурс включен в Chef начиная с версии 12.11.
systemd_unit 'gunicorn.service' do
content({
Unit: {
Description: 'Django on Gunicorn',
After: 'network.target',
},
Service: {
ExecStart: '/usr/local/bin/gunicorn --workers 3 --bind localhost:8080 myapp.wsgi:application',
User: 'bob',
Group: 'www-data',
WorkingDirectory: '/home/bob/myapp'
Restart: 'always',
},
Install: {
WantedBy: 'multi-user.target',
}
})
action [:create, :enable, :start]
end
Теперь нам нужно включить стандартную конфигурацию прокси NGINX для этого сервера Gunicorn, как показано ниже. Этот фрагмент может войти в ./my-cookbook/templates/nginx.conf.erb
. Создайте каталог шаблонов, если он не существует.
Примечание. Шаблоны Chef поддерживают встроенные файлы ruby, которые могут содержать переменные, выражения ruby и операторы. Хотя этот файл имеет расширение «erb», мы не использовали никаких выражений или выражений ruby. Кроме того, для простоты, у нас есть только конфигурация nginx, отличная от HTTPS (осторожное напоминание; пожалуйста, не делайте этого в рабочей среде!)
server {
listen 80;
server_name http://example.com/;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/bob/myapp/myapp/static;
}
location / {
include proxy_params;
proxy_pass http://localhost:8080/;
}
}
Примечание. Существует также альтернативная и лучшая конфигурация, в которой, например, сервер Gunicorn связан с сокетом домена unix вместо петлевого соединения TCP. Это стоит исследовать по соображениям производительности.
Чтобы скопировать этот конфиг в папку сайтов на узле, используйте ресурс шаблона от Chef.
template '/etc/nginx/sites-available/example.com.conf' do
source 'nginx.conf.erb'
owner 'root'
group 'root'
mode '0744'
end
Активация конфигов на nginx обычно выполняется путем создания символической ссылки, указывающей на конфигурацию sites-available
в sites-enabled
папке nginx . Симлинки могут быть объявлены в поваренных книгах шеф-повара с помощью ресурса ссылок, как показано ниже:
link '/etc/nginx/sites-enabled/example.com.conf' do
to '/etc/nginx/sites-available/example.com.conf'
end
и удалить символическую ссылку конфигурации по умолчанию:
link '/etc/nginx/sites-enabled/default' do
action :delete
end
И наконец, для запуска службы nginx:
service 'nginx' do
action :enable
action :start
end
Run-списки в chef - это упорядоченный список ролей или рецептов в кулинарной книге, которые будут последовательно выполняться на узле. У нас есть одна кулинарная книга «my-cookbook» и рецепт «по умолчанию», который мы должны выполнить в окне Ubuntu, поэтому runlist.json в нашей директории проекта ( ./my-chef-project/runlist.json
) должен выглядеть так:
{
"run_list": [
"recipe[my-cookbook::default]"
]
}
Наша кулинарная книга для Chef Solo готова к подаче. Пришло время подготовить машину с Ubuntu 18.04 и установить на нее ChefDK:
$ ssh [email protected] 'apt-get update && yes | apt-get install curl && curl https://packages.chef.io/files/current/chefdk/4.7.45/ubuntu/18.04/chefdk_4.7.45-1_amd64.deb -o chefdk.deb && yes | dpkg -i chefdk.deb && rm chefdk.deb'
Возвращаясь к нашей рабочей станции Chef , все, что нам нужно сделать, это поместить папку cookbooks в тарбол, перенести этот тарбол вместе с runlist.json
удаленным узлом, который мы предоставили выше, и запустить команду chef-solo:
(Команда ниже должна выполняться внутри узла или «клиента шеф-повара», а не рабочей станции Chef)
$ chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept
Или вот одна строка (для запуска из ./my-chef-project/
CWD на рабочей станции Chef):
tar zvcf chef-solo.tar.gz ./cookbooks &&\
scp chef-solo.tar.gz runlist.json [email protected]:~/ &&\
ssh [email protected] 'chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept'
Это оно! Посмотрите, как стандартный вывод заполняется активностью Chef, пытаясь приблизить ваш узел к тому, что вы указали в кулинарных книгах. Chef-solo установит все драгоценные камни, необходимые для всех поваренных книг. Если команда chef-solo будет успешной, у нас будет работающее приложение Django, работающее за nginx на коробке Ubuntu. Перейдите к домену / IP, чтобы проверить его.
Примечание: помните, что в django вам может потребоваться установить этот домен / ip в
ALLOWED_HOSTS
списке вsettings.py
.
Всякий раз, когда мы вносим изменения в содержимое каталога нашего проекта (рецепты, шаблоны или исходный код приложения и т. Д.), Просто запускайте вышеуказанную однострочную строку из каталога проекта.
Совет: Если поваренная книга управляется версией с помощью git (как и должно быть), одна хорошая рекомендация - установить git hooks для запуска этой однострочной.
Если вы внимательно посмотрите на последнюю команду chef-solo, обратите внимание, что --recipe-url
она предназначена для получения URL. Это означает, что у вас может быть рабочий процесс, в котором CI будет собирать ваш tar-файл chef-solo, загружать его куда-то и настраивать ваш узел для периодического извлечения из него.
Совет: используйте curl, чтобы периодически вытаскивать измененный тарбол как cronjob.
curl -z $file
будет учитыватьIf-Modified-Since
заголовки и загружать tar-архив только в том случае, если удаленный файл был изменен со времени отметки в существующем локальном файле$file
.
Изучение 26 методов анализа больших данных: часть 1
Многие из вас знают Switch, который выйдет в марте 2017 года, и его новые функции. Для тех, кто не знает, мы подготовили список функций, которые делают «Switch» обязательным гаджетом.
Вы ждете, когда технологические гиганты выполнят свои обещания? проверить, что осталось недоставленным.
Прочтите блог, чтобы узнать о различных уровнях архитектуры больших данных и их функциях самым простым способом.
Прочтите это, чтобы узнать, как искусственный интеллект становится популярным среди небольших компаний и как он увеличивает вероятность их роста и дает преимущество перед конкурентами.
CAPTCHA стало довольно сложно решать пользователям за последние несколько лет. Сможет ли он оставаться эффективным в обнаружении спама и ботов в ближайшем будущем?
По мере того, как наука развивается быстрыми темпами, принимая на себя большую часть наших усилий, также возрастает риск подвергнуться необъяснимой сингулярности. Прочтите, что может значить для нас необычность.
Что такое телемедицина, дистанционное здравоохранение и их влияние на будущее поколение? Это хорошее место или нет в ситуации пандемии? Прочтите блог, чтобы узнать мнение!
Возможно, вы слышали, что хакеры зарабатывают много денег, но задумывались ли вы когда-нибудь о том, как они зарабатывают такие деньги? Давайте обсудим.
Недавно Apple выпустила macOS Catalina 10.15.4, дополнительное обновление для исправления проблем, но похоже, что это обновление вызывает больше проблем, приводящих к поломке компьютеров Mac. Прочтите эту статью, чтобы узнать больше