Создание образа приложения React JS с помощью Packer и Ansible в облаке Alibaba
В этом руководстве мы поговорим об использовании Packer для создания образа машины в экземпляре Alibaba Cloud ECS и Ansible для написания того, что мы хотим, чтобы наш образ машины был.
Упаковщик — это инструмент с открытым исходным кодом для создания идентичных образов машин для нескольких платформ из единой исходной конфигурации. Packer легковесен, работает во всех основных операционных системах и обладает высокой производительностью, создавая образы машин для нескольких платформ параллельно.
Ансибль — это программное обеспечение с открытым исходным кодом, которое автоматизирует подготовку программного обеспечения, управление конфигурацией и развертывание приложений. Ansible подключается через SSH, удаленный PowerShell или через другие удаленные API.
В этом руководстве мы поговорим об использовании Packer для создания образа машины в облаке Alibaba. Служба эластичных вычислений (ECS), и Ansible для написания того, что мы хотим, чтобы наш образ машины был. Мы будем создавать изображение, которое имеет реагировать JS применение и узлы настраивать. Образ машины в DevOps — это единая статическая единица, содержащая предварительно настроенную операционную систему и установленное программное обеспечение, которое используется для быстрого создания новых работающих машин. Форматы образов машин меняются для каждой платформы.
Предпосылки
Вам не нужно быть экспертом, чтобы следовать этому руководству. Все, что вам нужно, это иметь учетную запись на Облако Алибаба и Access key
. Нажмите на эту ссылку, чтобы узнать, как создать ключ доступа в облаке Alibaba.
Шаг 1: Установите упаковщик
Чтобы установить упаковщик в нашей системе, мы можем следовать официальная страница установки для упаковщика или используйте менеджер пакетов, шоколадный для окон и доморощенный для макОС. Использование менеджера пакетов избавляет нас от необходимости добавлять переменные среды в path.
Чтобы установить упаковщик на окна с помощью шоколадного
- Установите шоколадный менеджер пакетов. Чтобы установить шоколад, откройте cmd от имени администратора и вставьте приведенную ниже команду, чтобы установить диспетчер пакетов шоколада.
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString(' && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
- убедитесь, что шоколад установлен, выполнив эту команду
choco -v
. вы должны получить установленную версию шоколада - Установите упаковщик, выполнив команду ниже
choco install packer
- Чтобы проверить установку упаковщика, запустите
packer -v
- Вы должны получить установленную версию Packer.
Чтобы установить упаковщик на MacOS с помощью доморощенного
- Установите homebrew, если он у вас еще не установлен. Чтобы установить homebrew на macOS, откройте терминал и вставьте команду ниже
/usr/bin/ruby -e "$(curl -fsSL
- Установите упаковщик, выполнив команду ниже
brew install packer
- Чтобы проверить установку упаковщика, запустите
packer -v
- Вы должны получить установленную версию Packer.
Шаг 2. Создайте образ машины нашего React-приложения
Чтобы создать образ машины, нам нужно создать файл шаблона. Файл шаблона используется для определения того, какое изображение мы хотим создать. Файл шаблона находится в JSON
формате и имеет другой набор ключей, настраивающих различные компоненты Packer.
- Создайте файл шаблона с именем пример.json и вставьте код ниже
{
"variables": {
"access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
"secret_key": "{{env `ALICLOUD_SECRET_KEY`}}"
},
"builders": [{
"type": "alicloud-ecs",
"access_key": "{{user `access_key`}}",
"secret_key": "{{user `secret_key`}}",
"region": "us-west-1",
"image_name": "ReactJS-Application",
"instance_type": "ecs.t5-lc2m1.nano",
"image_force_delete":"true",
"source_image": "ubuntu_16_0402_32_20G_alibase_20180409.vhd",
"io_optimized":"true",
"ssh_username": "root",
"internet_charge_type": "PayByTraffic"
}],
"provisioners": [{
"type": "shell",
"script": "installAnsible.sh"
},{
"type": "ansible",
"playbook_file": "playbook.yml"
}]
}
переменные раздел, где мы определили наши переменные, которые можно использовать в любом месте в нашем файле шаблона. мы получаем значение ключ доступа а также Секретный ключ из переменной окружения, указав окружение функция.
строители Раздел содержит массив объектов JSON, настраивающих конкретный билдер. Сборщик — это компонент упаковщика, который отвечает за создание машины и превращение этой машины в образ.
поставщики провизии раздел использует встроенное и стороннее программное обеспечение для установки и настройки образа машины после загрузки. В этом руководстве мы будем использовать доступный а также оболочка как наш поставщик.
- Экспорт
ALICLOUD_ACCESS_KEY
а такжеALICLOUD_SECRET_KEY
выполнив команду ниже в вашем терминале
export ALICLOUD_SECRET_KEY="YOUR_ALICLOUD_ACCESS_KEY" export ALICLOUD_SECRET_KEY="YOUR_ALICLOUD_SECRET_KEY"
- Создайте новый файл Ansible с именем playbook.yml и вставьте код ниже. пример.json а также playbook.yml должны быть созданы в корневом каталоге.
---
- hosts: all
become: true
vars:
NODEJS_VERSION: 8
domain: "localhost"
tasks:
- name: Add gpg key for node
apt_key:
url: "
state: present
- name: Add nodejs LTS to apt repository
apt_repository:
repo: "deb NODEJS_VERSION }}.x {{ ansible_distribution_release }} main"
state: present
update_cache: yes
- name: Install nodejs
apt:
name: nodejs
state: present
- name: Setup React application
shell:
cmd: |
npx create-react-app my-app # Setup our react application
cd /root/my-app
npm install -g pm2 # Install Pm2, A nodejs process manager which enables us to run our application in the background process
- name: Install nginx
apt:
name: nginx
state: present
update_cache: yes
- name: Remove nginx default configuration
file:
path: /etc/nginx/sites-enabled/default
state: absent
- name: enable reverse proxy # This enables us to use the public IP without passing in the port on our web page
shell:
cmd: |
cat > /etc/nginx/sites-available/my-app <<EOF
server {
listen 80;
server_name {{ domain }};
location / {
proxy_pass '
}
}
EOF
- name: create symlinks for nginx configuration # make sure the nginx configuration files are always the same.
file:
src: /etc/nginx/sites-available/my-app
dest: /etc/nginx/sites-enabled/my-app
state: link
notify:
- restart nginx
handlers:
- name: restart nginx # restart nginx service
service:
name: nginx
state: restarted
- Чтобы проверить наш файл шаблона, запустите
packer validate example.json
. Это гарантирует отсутствие ошибок, таких как синтаксическая ошибка, в нашем файле шаблона. - Бежать
packer build example.json
для создания нашего образа ReactJS.
Шаг 3: Запустите экземпляр с нашим изображением React
Чтобы создать экземпляр с использованием образа, который мы создали ранее, выполните следующие действия.
Вход в облаке Alibaba приставка
Нажмите Elastic Compute Service на боковой панели навигации панели.
Нажмите на кнопку с описанием Create Instance или на эту ссылка на сайт создать экземпляр
В базовых конфигурациях выполните следующие действия:
Для
Billing Method
нажмите наPay-As-You-Go
Для
Region
щелкните раскрывающийся список и выберитеUS West 1 (Silicon Valley)
Для
Instance Type
нажмите наEntry-level (Shared)
Для
Image
нажми наCustom Image
кнопка. ПодCustom Image
щелкните раскрывающееся меню и выберите созданное нами изображение, котороеReactJS-Application
.Нажми на
Next: Networking
кнопкаДля второго шага, т. Сеть следуйте инструкциям ниже
Для Сеть ` щелкните раскрывающееся меню VPC и выберите VPC по умолчанию.
Для Группа безопасности раздел, нажмите на Зайти в настройки порта установить порт для нашего приложения.
Нажми на Добавить правило группы безопасности и установить Диапазон портов до 80 и Объекты авторизации до 0.0.0.0/0. Повторите этот же процесс, но установите Диапазон портов до 3000.
Порт 80 предназначен для HTTP-запроса, а порт 300 – это порт, на котором работает наше реагирующее приложение.После настройки группы безопасности нажмите кнопку Далее: Конфигурации системы кнопка
Для третьего шага, т. Конфигурации системы следуйте инструкциям ниже
Нажми на Расширенный (на основе ролей ОЗУ экземпляра или cloud-init) раскрывающийся список и вставьте код ниже в поле данных пользователя
#!/usr/bin/env bash
cd /root/my-app
pm2 start /root/my-app/node_modules/react-scripts/bin/react-scripts.js --name my-app -- start
Приведенный выше сценарий запускается при создании нашего экземпляра, поэтому нам не нужно подключаться к нашему экземпляру по SSH, чтобы запустить приложение.
- Нажми на Предварительный просмотр кнопка
- Примите Условия использования и нажмите кнопку Создать экземпляр кнопка.
- Как только ваш экземпляр будет запущен и запущен, скопируйте IP-адрес в Интернете и вставьте его в адресную строку браузера. Вы должны увидеть веб-страницу приложения React.