Подготовка среды разработки Mac OS для использования с Syntropy Stack
Время, которое вы потратите на правильную настройку вашей локальной среды разработки определенно окупится в ближайшем будущем. Это максимизирует эффективность и снизит количество повторяющихся задач в вашей рабочей деятельности. Уже сегодня я разработал несколько проектов с использованием Syntropy Stack. В большинстве случаев при первоначальной настройке таких проектов не требуется выполнять какие-либо новые действия. Здесь все однообразно, поэтому я пошагово разберу этот процесс. Вот полный список того, что мы рассмотрим:Создание токена агента в аккаунте Syntropy StackУстановка Python ≥ 3.6Установка интерфейса командной строки Syntropy и конфигурации Syntropy «Сеть как код»АутентификацияУстановка Ansible и Syntropy Ansible CollectionСоздание виртуальных машинSSH ключиСоздние токена агентаВаш токен агента — это ключ API, который вы будете использовать со своими агентами Syntropy, чтобы они могли пройти аутентификацию и присоединиться к экосистеме Syntropy. Вы можете сгенерировать токен агента с помощью пользовательского интерфейса Syntropy. Если у вас еще нет учетной записи Syntropy Stack, вы можете запросить доступ на официальном веб-сайте проекта. Как только вы войдете в систему, щелкните по выпадающему списку рядом с вашим именем пользователя и выберите Agent tokens.Создание токена агентаНажмите на кнопку[+] New Agent Token , чтобы создать свой токен. Я предпочитаю создавать по одному токену для каждого проекта. Таким образом, если ваши учетные данные каким-то образом были получены третьей стороной, вы можете уничтожить токен такого проекта, не затрагивая другие проекты, которые могут быть подключены к сети в данный момент. Не забудьте изменить дату истечения срока действия (Expiration date), поскольку по умолчанию она соответствует текущему дню, а это означает, что если вы оставите ее как есть, токен станет недействительным на следующий день.Установка Python ≥ 3.6Зависимости для консольного клиента Syntropy требуют Python не ниже версии 3.6. Mac OS по умолчанию поставляется с Python 2.7, поэтому нам может потребоваться установить Python3.Прежде чем что-либо делать, убедитесь, что у вас установленpython3:$ which python3/usr/local/bin/python3$ python3 --versionPython 3.8.5Если он не установлен, вы увидите следующее:$ python3 --version-bash: python3: command not foundМы будем устанавливать Python3 с помощью Homebrew (менеджер пакетов для Mac OS). Если у вас возникли проблемы, вам может потребоваться установить утилиты Xcode, вы можете сделать это, следуя этому руководству. Если у вас не установлен Homebrew, вы можете установить его, скопировав и вставив следующую команду в свой терминал:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Хорошо, теперь давайте установим Python3.brew install PythonТеперь проверим, что все установилось как надо:$ which python3usr/local/bin/python3Чтобы установить пакеты для python3 мы будем использовать pip3. Вы можете проверить версию pip3 следующим образом:$pip3 --version pip 19.3.1 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)Установка интерфейса командной строки SyntropyВ основном мы будем использовать две отдельные утилиты, которые являются частью интерфейса командной строки, syntropyctl(Computational Topology Library — Библиотека вычислительной топологии) и syntropynac(Network as Code — Сеть как код). Если вам понадобится дополнительная информация, обратитесь к документации Syntropy Stack. Мы можем установить эти утилиты следующим образом:pip3 install syntropycli && pip3 install syntropynacПрежде чем вы сможете сгенерировать токен API, вам нужно добавить в SYNTROPY_API_SERVERвашу переменную среды ENV. Вы можете скопировать и вставить команду в терминал, а затем нажать return, но я рекомендую добавить ее в ~/.bashrcили ~/.zshrc(в зависимости от того, какую оболочку вы используете). Не забудьте создать исходный файл после его добавления, чтобы переменная среды ENV была доступна в вашем текущем сеансе.export SYNTROPY_API_SERVER=https://controller-prod-server.syntropystack.comАутентификацияНам нужно сгенерировать токен API, который позволяет нам аутентифицировать команды интерфейса командной строки. Не путайте токен API (формируется с использованием интерфейса командной строки) с Токеном Агента (ключ API, сгенерированный с использованием пользовательского интерфейса Syntropy).Сгенерируйте токен API, войдя в систему с помощью интерфейса командной строки:syntropyctl login <your_syntropystack_username> <your_syntropystack_password>Эта команда выведет буквенно-цифровую строку (например, ваш токен API). Скопируйте токен API, который выводит эта команда, и добавьте его в переменные среды ENV вашей системы. Я поместил свой токен в .zshrc (потому что я использую zshell вместо bash, но вы также можете разместить его в своем .bashrc). Кроме того, вам необходимо добавить имя пользователя Syntropy Stack и пароль, а также SYNTROPY_API_SERVER в переменные среды вашей системы.Отредактируйте ваш .zshrcили .bashrc. Как пример vim ~/.zshrcи добавьте к нему следующее:export SYNTROPY_API_TOKEN=”your_syntropy_api_token”export SYNTROPY_PASSWORD=”your_syntropy_password”export SYNTROPY_USERNAME=”your_syntropy_username”Не забудьте получить файл из текущего окна терминала, чтобы переменные стали доступны в ваших переменных среды ENV.source ~/.bashrcили source ~/.zshrc.Вы можете проверить переменные среды env, просто набрав envв окне терминала и нажав return.Установка Ansible и Syntropy Ansible Galaxy CollectionAnsible — это самый простой способ автоматизировать приложения и ИТ-инфраструктуру. Развертывание приложений + Управление конфигурацией + Непрерывная доставка.Мы будем использовать Ansible для настройки хостов наших виртуальных машин, установки необходимых зависимостей, развертывания наших агентов и служб, а также для создания наших сетей. Установка Ansible проста и может быть выполнена с помощью pip3диспетчера пакетов Python. У Ansible отличная документация, поэтому обязательно ознакомьтесь с ней, если вам интересно на что он способен, или если вы не уверены в том, как это работает. Мы будем использовать Syntropy Ansible Galaxy Collection. Ansible Galaxy содержит контент, созданный сообществом Ansible. Коллекции содержат пригодные для использования сценарии, роли и модули, которые мы можем включить в наши собственные сценарии.Для начала установим Ansible.pip3 install ansibleУбедитесь, что установка завершилась успешно.$ ansible --versionansible 2.10.4 configured module search path = ['/Users/craig/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/local/lib/python3.9/site-packages/ansible executable location = /usr/local/bin/ansible python version = 3.9.1 (default, Nov 1 2019, 02:16:32) [Clang 11.0.0 (clang-1100.0.33.8)]Следующее, что необходимо сделать, это создать глобальный файл конфигурации, чтобы упростить чтение журнала, выводимого из интерфейса командной строки Ansible. Создайте файл конфигурации Ansible и поместите его в ваш домашний каталог.$ vim ~/.ansible.cfgДобавьте к нему следующее (убедитесь, что ansible_python_interpreterустановлен на результат вывода вашей команды which python3 ):[defaults]stdout_callback=yaml# use stdout_callback when running adhoc commands toobin_ansible_callbacks = Trueinterpreter_python = auto_silentremote_tmp = /tmp/ansible-$USERansible_python_interpreter = usr/local/bin/python3Вывод журнала без настроек конфигурации выглядит следующим образом:TASK [create_docker_network : Create Docker network] *****************************************************************ok: [broker] => {"ansible_facts": {"docker_network": {"Attachable": false, "ConfigFrom": {"Network": ""}, "ConfigOnly": false, "Containers": {"1893dcb898d5299c5dd9cf5a2219f2e2f08956507afc56d86bfe64cb96e18837": {"EndpointID": "7b9ec7d78666c965795c34db03465562e4bb7f5bdfa21de71d5f69824c3b48a7", "IPv4Address": "172.20.0.2/24", "IPv6Address": "", "MacAddress": "02:42:ac:14:00:02", "Name": "mosquitto"}}, "Created": "2021-01-11T17:10:29.613448381Z", "Driver": "bridge", "EnableIPv6": false, "IPAM": {"Config": [{"Subnet": "172.20.0.0/24"}], "Driver": "default", "Options": null}, "Id": "9e6daec0c1bb385fc2d6459655602ab5ce127505e7e6eaea091c9e5af7b5a1f0", "Ingress": false, "Internal": false, "Labels": {}, "Name": "syntropynet", "Options": {}, "Scope": "local"}}, "changed": false, "network": {"Attachable": false, "ConfigFrom": {"Network": ""}, "ConfigOnly": false, "Containers": {"1893dcb898d5299c5dd9cf5a2219f2e2f08956507afc56d86bfe64cb96e18837": {"EndpointID": "7b9ec7d78666c965795c34db03465562e4bb7f5bdfa21de71d5f69824c3b48a7", "IPv4Address": "172.20.0.2/24", "IPv6Address": "", "MacAddress": "02:42:ac:14:00:02", "Name": "mosquitto"}}, "Created": "2021-01-11T17:10:29.613448381Z", "Driver": "bridge", "EnableIPv6": false, "IPAM": {"Config": [{"Subnet": "172.20.0.0/24"}], "Driver": "default", "Options": null}, "Id": "9e6daec0c1bb385fc2d6459655602ab5ce127505e7e6eaea091c9e5af7b5a1f0", "Ingress": false, "Internal": false, "Labels": {}, "Name": "syntropynet", "Options": {}, "Scope": "local"}}После добавления настроек конфигурации он будет выглядеть следующим образом:TASK [create_docker_network : Create Docker network] *****************************************************************ok: [broker] => changed=false ansible_facts: docker_network: Attachable: false ConfigFrom: Network: '' ConfigOnly: false Containers: 1893dcb898d5299c5dd9cf5a2219f2e2f08956507afc56d86bfe64cb96e18837: EndpointID: 7b9ec7d78666c965795c34db03465562e4bb7f5bdfa21de71d5f69824c3b48a7 IPv4Address: 172.20.0.2/24 IPv6Address: '' MacAddress: 02:42:ac:14:00:02 Name: mosquitto Created: '2021-01-11T17:10:29.613448381Z' Driver: bridge EnableIPv6: false IPAM: Config: - Subnet: 172.20.0.0/24 Driver: default Options: null Id: 9e6daec0c1bb385fc2d6459655602ab5ce127505e7e6eaea091c9e5af7b5a1f0 Ingress: false Internal: false Labels: {} Name: syntropynet Options: {} Scope: local network: Attachable: false ConfigFrom: Network: '' ConfigOnly: false Containers: 1893dcb898d5299c5dd9cf5a2219f2e2f08956507afc56d86bfe64cb96e18837: EndpointID: 7b9ec7d78666c965795c34db03465562e4bb7f5bdfa21de71d5f69824c3b48a7 IPv4Address: 172.20.0.2/24 IPv6Address: '' MacAddress: 02:42:ac:14:00:02 Name: mosquitto Created: '2021-01-11T17:10:29.613448381Z' Driver: bridge EnableIPv6: false IPAM: Config: - Subnet: 172.20.0.0/24 Driver: default Options: null Id: 9e6daec0c1bb385fc2d6459655602ab5ce127505e7e6eaea091c9e5af7b5a1f0 Ingress: false Internal: false Labels: {} Name: syntropynet Options: {} Scope: localЭто вызывает гораздо меньше беспокойства! Помещая файл .ansible.cfg в домашний каталог ( ~/), вы делаете его глобальным. Вы можете поместить дополнительный файл .ansible.cfg в корень вашего проекта, и он переопределит любые настройки, которые перекрываются с глобальной конфигурацией.Далее установим galaxy collection:ansible-galaxy collection install git@github.com:SyntropyNet/syntropy-ansible-collection.gitПерейдите в локальный каталог ansible, например в Mac OS:cd /Users/{user}/.ansible/collections/ansible_collections/syntropynet/syntropyУстановите зависимости Python.pip3 install -U -r requirements.txtСоздание виртуальных машинКаждой запущенной виртуальной машине желательно находиться в инфраструктуре отдельного облачного провайдера. Вы можете использовать любого облачного провайдера, который в настоящее время поддерживается Syntropy Stack. Ознакомьтесь с официальной документацией для получения полного списка провайдеров. Использование различных провайдеров не является обязательным требованием, но мы делаем это, чтобы продемонстрировать гибкость, совместимость и простоту использования при работе с Syntropy Stack на просторах Интернета. Итак, если вы не хотите использовать трех отдельных облачных провайдеров, попробуйте разместить ваши виртуальные машины в разных географических регионах. Самое главное, чтобы ваши виртуальные машины не использовали общедоступный IP-адрес. У меня есть 3 базовых виртуальных машины от Digital Ocean, GCP и AWS. Я использовал этих провайдеров, так как у меня уже есть там учетные записи и я знаком с их услугами. Я настроил свои виртуальные машины следующим образом:FluentD: Digital Ocean, Тип: Базовый, 1vCPU, память: 1 ГБ, ОС: Ubuntu 20.04Elasticsearch: Google Cloud Platform, Тип: e2-micro, 2vCPU, память: 1GB, ОС: Ubuntu 20.04Kibana: AWS, Тип: t2-micro, 1vCPU, память: 1 ГБ, ОС: Ubuntu 18.04Все три варианта находятся в одном ценовом диапазоне (около 5–6 долларов в месяц) и их достаточно для целей данного примера.Настройка каждой виртуальной машины на конкретном облачном провайдере выходит за рамки этого поста, но я разместил ниже несколько ссылок на руководства, чтобы вы смогли с чего-то начать, если не знаете, как приступить к созданию виртуальных машин. Вам нужно будет добавить свой открытый ключ SSH, чтобы вы могли получить доступ к виртуальным машинам из терминала с помощью SSH. Я бы рекомендовал установить Ubuntu в качестве вашей операционной системы, чтобы вы могли просто скопировать и вставить команды, которыми я делюсь. Конечно же, если вам комфортно работать в других версиях Linux, то, безусловно, вы можете работать и в них. Факт того, что Syntropy Stack использует docker, означает, что мы не зависимы от дистрибутива!Creating an AWS EC2 instanceQuickstart using a Linux VM | Compute Engine DocumentationHow to Create a Droplet from the DigitalOcean Control Panel | DigitalOcean Product DocumentationQuickstart - Create a Linux VM in the Azure portal - Azure Virtual MachinesSSH ключиЛично я предпочитаю создавать отдельные пары ключей SSH для разных проектов или задач, в зависимости от области применения. Например, у меня есть выделенная пара ключей syntropy_rsa, которую я использую со всеми своими виртуальными машинами Syntropy.Если вы хотите создать новую пару ключей, вы можете использовать следующую команду. Флаг -N просто создает пару ключей без ключевой фразы, что полезно для некоторых автоматизированных задач (например для рабочих процессов GitHub). "user@host"– это всего лишь способ определения пары ключей. Вы можете использовать что-то вроде syntropy@local.$ ssh-keygen -t rsa -b 4096 -C "user@host" -q -N ""Enter file in which to save the key (/Users/craig/.ssh/id_rsa): /Users/<user>/.ssh/syntropy_rsaДалее авторизуем этот новый ключ на виртуальных машинах. Добавьте ваш новый открытый ключ в каждый из authorized_keys файлов вашего хоста. Вы можете сделать это из командной строки вашего локального компьютера для разработки. <host>будет публичным IP-адресом вашей виртуальной машины, а <user> — именем пользователя Linux для этой виртуальной машины. Например, в AWS пользователь EC2 по умолчанию — это всегда ubuntu.Напримерssh-copy-id -i ~/.ssh/syntropy_rsa.pub <user>@<host> -fВы также можете сделать это вручную, если у вас нет ssh-copy-id. Просто подключитесь к своей виртуальной машине по SSH и добавьте открытый ключ в файл ~/.ssh/authorized_keys. Вы можете скопировать открытый ключ в буфер обмена следующим образом:pbcopy < ~/.ssh/syntropy_rsaПросто имейте в виду, что в зависимости от вашего облачного провайдера вам, вероятно, придется добавлять открытый ключ SSH через их пользовательский интерфейс/консоль, прежде чем у вас будет доступ по SSH. Например, в Digital Ocean открытый ключ добавляется через Settings > Security.Добавление открытого ключа SSH в Digital OceanПоследнее, что вам может потребоваться проверить, это то, что порт 22 открыт для входящего трафика. Опять же, в зависимости от вашего облачного провайдера, вам, возможно, придется установить его вручную или настроить брандмауэр, чтобы разрешить входящий трафик на порт 22. Далее пример настройки моего сетевого брандмауэра облачного провайдера Digtial Ocean в разделе Networking > Firewalls > Rules.Настройка правил для входящего трафика в брэндмауэре облачного провайдера Digital OceanБонусКто-то из тех, кто смотрел запись моего экрана, спросил о моей IDE и настройке терминала. Я использую iTerm2 как замену своему терминалу Mac OS, а также zshell в качестве оболочки по умолчанию. В iTerm2 я используя цветовую тему Google Material Design от Мартина Зилера (ссылка ниже).MartinSeeler/iterm2-material-designЧто касается IDE, то существует множество IDE для разработки, но на мой взгляд код Microsoft Visual Studio, безусловно, лучший.Visual Studio Code - Code Editing. RedefinedОставайтесь в курсе событий, подписавшись на наш Telegram и Twitter.Ссылка на оригинальную англоязычную статью:Preparing your Mac OS dev environment for use with the Syntropy StackСсылки на официальные англоязычные ресурсы:Веб-сайт: http://syntropynet.com/GitHub: https://github.com/SyntropyNetTwitter: https://twitter.com/SyntropynetMedium: https://medium.com/syntropynetReddit: https://www.reddit.com/r/SyntropyNet/Youtube:https://www.youtube.com/channel/UChCZuura_kvQog6uiRDPu3gTelegram чат: https://t.me/SyntropyNetworkTelegram канал с анонсами: https://t.me/Syntropy_AnnПодготовка среды разработки Mac OS для использования с Syntropy Stack was originally published in Syntropy on Medium, where people are continuing the conversation by highlighting and responding to this story.
13