Написано Касра Хосрави ✏️.
Что такое Ландо?
Ландо Будет ваш помощник в разработке, беге и автоматизации вашего проекта. Подумайте об этом как об абстракционном слое вашей среды развития, которая стандартизирована для всех основных операционных систем, таких как MacOS, Windows и Linux. Обратите внимание, что использование Lando в производстве не поощряется или поддерживается командой Lando, поскольку его основная цель — имитировать производственные среды локально.
Используя Lando, любой разработчик может настроить конфиги в кодовой базе для служб, инструментов и конфигурации приложения необходимо запустить. Как только это настроено, все члены команды должны сделать, это тянуть репозиторий и запустить Ландо начать
И начните работать над проектом в изолированной среде разработки, не беспокоясь о несоответствиях в их средах развития.
Как работает Ландо и почему мы должны использовать его?
Теперь вы могли бы реализовать то, что мы описали выше, имеет много сходства с Докер и его связанные услуги. Вы, вероятно, спросили себя:
- Конфиги настроек Lando, о которых они говорят, действительно похожа на
Docker Compose
, правильно? - Изолированная среда развития кажется очень похожей на
Дочсерские контейнеры
Разве это не правда?
Вы правы в обоих сценариях. Но с этим зачем нам нужен Ландо для нашего проекта, когда у нас есть Docker Compose
и Дочсерские контейнеры
?
Используя Lando:
- Мы получаем доступ к более упрощенному процессу определения докеровских контейнеров с использованием заранее определенного рецепты
- Даже если наше нужно
Контейнер докеров
Окружающая среда не поддерживается рецептами Lando, у нас есть более легкий процесс определения контейнера, определяя Lando Service , который предоставляет только необходимые конфиги по сравнению сDocker Compose
. Это может помочь нам избавиться от настройкиDockerfiles
и набрать долгоDocker Exec
команды - В этом случае нам все еще может понадобиться нашим собственным пользователем
Docker Compose
Файлы для определения среды разработки, мы можем использовать их рядом или на месте рецептов и услуг Lando, при этом некоторые дополнительные преимущества, такие как Местные сетевые разработки - Кроме того, мы получаем гораздо больше преимуществ, таких как SSL-обработка на контейнер, настраивая прокси и пользовательские URL-адреса для каждой службы, упрощенные этапы сборки и запуска, CI локальной настройки CI и многое другое. Узнайте больше о дополнительных выгодах, которые вы можете получить, используя Lando здесь
Теперь пришло время увидеть Lando в действии и посмотреть, как это может помочь нам в нашей работе. Мы начинаем с установки Lando, а затем установить его для простого проекта веб-сервера NODEJS.
Установить Lando
Первое, что нам нужно сделать, это установить Lando на нашу машину. Вот несколько вещей, чтобы иметь в виду:
- Убедитесь, что оборудование вашей машины соответствует требованиям установить Lando
- Убедитесь, что оборудование вашей машины соответствует требованиям установить Docker Engine
- Убедитесь, что операционная система вашей машины отвечает требованиям
- Убедитесь, что у вас есть доступ администратора в вашем компьютере (спросите оператора для доступа, если вы находитесь в сети)
Однако, даже если вы отвечаете требованиям, есть Gotchas с установкой Lando:
- Даже если вы соответствуете минимальным требованиям к оборудованию, существует шанс Lando может не работать гладко. Вот Ландос Предпочтительные требования . Я бегаю Lando на машине с этими характеристиками и не сталкивался с какими-либо проблемами:
- 2,6 GHz 6-Core Intel Core i7 - 16 GB 2667 MHz DDR4 - 420GB+ of available disk space
- Ландо зависит от Докер Для бега и именно поэтому размер установочного файла немного большой, поскольку совместимая установка докера поставляется с установкой Lando. Так что, если у вас нет Docker, он будет установлен как часть процесса установки Lando
Если у вас уже есть Docker, вам нужно знать, что может возникнуть проблема совместимости с вашим докеренной версией и какой зависимой версией Docker Lando зависит от. Однако вы все еще можете пропустить установку Docker в процессе установки Lando. В качестве дополнительной защиты, вы можете сбросить настройки докера к заводским настройкам по умолчанию
- После проверки требований выше. Следуйте руководству по установке на основе вашей операционной системы здесь
- После установки просто откройте терминал в своей машине и введите следующую команду, чтобы убедиться, что установка была успешной:
lando version // You should get the version of Lando that you installed . // v3.0.0-rrc.1
Инициализировать Lando с узлом HTTP Server
Мы будем создавать простой узлы HTTP Server и использовать Lando в качестве инструмента DEVOPS, чтобы помочь нам запускать, разрабатывать и тестировать проект. Наша цель, в конце концов, это то, что при вытянете пример сервера узла из GitHub, вы можете просто ввести Ландо начать
И иметь все конфигурации на вашем приложении.
Во-первых, давайте сосредоточимся на создании нашего приложения HTTP-сервера узла.
Узел HTTP Server.
Nodejs является мощным инструментом для запуска серверных сервисов, веб-приложений и инструментальной инструментарии. Для этой статьи мы собираемся сосредоточиться на одном из его наиболее распространенных случаев использования, которые устанавливают простой HTTP-сервер и обрабатывать базовую маршруту.
Настройка HTTP-сервера
Мы будем использовать популярные модули Nodejs под названием http
. для обработки этого; который поставляется по умолчанию с Nodejs:
// global dependencies const http = require("http"); const requestHandler = function (req, res) { res.header('Content-type', 'text/html'); res.end('I have built my own http server!'); }; http .createServer(requestHandler) //create a server object .listen(8080); //the server object listens on port 8080
Как видите, http
. имеет метод под названием Createserver
который возвращает новый экземпляр http. Сервер , когда мы получим новый запрос, поступающий через RequestHandler
Отказ Эта функция принимает как Запрос
и ответ
объект.
Таким образом, мы можем справиться с разными сценариями, когда разные Запрос
Парми как УРЛ путь
приходит и соответственно, отправьте правильно ответ
Результаты, такие как Заголовок
или код ответа
Отказ Здесь мы делаем все просто, просто установив тело ответа как Строка
Отказ
Эта настройка работает для простого примера, но нам нужно немного сложного процесса для обработки других общих веб-приложений, таких как маршрутизация, обработка ошибок, запрос и обработка ответов. Один вариант у нас есть, это использовать веб-каркас, например Экспресс
Для этого.
Давайте посмотрим на пример погрузки отдельно обращения с различными путями URL:
// global dependencies const http = require("http"); const express = require('express'); const app = express(); // request handlers const homepageHandler = function (req, res) { res.header('Content-type', 'text/html'); return res.end('I am on homepage'); }; const aboutpageHandler = function (req, res) { res.header('Content-type', 'text/html'); return res.end('I am on about page'); }; http .createServer(app) //create a server object .listen(8080); //the server object listens on port 8080 // Basic HTTP response app.get('/', homepageHandler); app.get('/about', aboutpageHandler);
После инициализации const ()
и передавать его как параметр для Createserver
Сервер начинает слушать порта 8080
для разных путей URL. Например, когда браузер попадает в URL /о
, app.get ('/about')
вызывает свой обратный вызов, который является ОТПЕГАЖДЕНА
Отказ Посмотрите на себя в этой песочнице:
Настроить Lando
Теперь, когда у нас есть наш приложение для сервера узла, мы можем сосредоточиться на создании Lando. Мы собираемся настроить простой узел Docker Container с поддерживаемым версией PATCH для нашего проекта, а затем обрабатывать некоторые процессы на этапе сборки и обслуживание приложения на начальную нагрузку. В качестве заключительной цели мы хотим изучить настроек двух контейнеров докеров для нашего проекта, один обслуживающий http
. Сервер, а другой поддерживает https
сервер.
Существует два варианта установки основы Lando Configs:
- Вызов
Lando init
Передавая необходимые параметры для Поддерживаемые рецепты И отпустить Lando настроить для нас конфигурацию. На сегодняшний день Lando поддерживает несколько рецептов, таких какDrupal
,Joomla
,Ларалвел
,WordPress
и т. д., поэтому убедитесь, что проверьте, поддерживается ли ваш необходимый стек или нет - Если ваш нужный стек не поддерживается, не волнуйтесь. Все, что вам нужно, это Сервис которые можно настроить, создавая
Lando.yml
Файл в корне приложения
Поскольку наш стек Nodejs Server не поддерживается текущими рецептами, мы собираемся сосредоточиться на создании самостоятельной настройки. Начнем с создания Lando.yml
Файл в корневом каталоге.
Настройка базового конфига в Lando.yml
В этом файле мы собираемся определить основные услуги, которые нам нужны для разработки нашей заявки. Давайте начнем с определения Имя
и база Узел Услуги
называется Узел-http
:
// lando.yml name: lando-node-server services: node-http: type: node:12
Мы используем версию PATCH 12 узла, который совместим с нашими Экспресс
Зависимость:
// express's node compatibility "engines": { "node": ">=0.10.0" }
Lando позволяет нам запустить команды в оболочке против наших услуг. Итак, мы можем проверить, что версия узла контейнера, которая была создана нашей Lando по умолчанию
Сервис на самом деле правильно:
// terminal lando ssh --service defaults --command "env | grep NODE_VERSION" // You get NODE_VERSION=12.16.2 // which is what we expect
СТАЖИ СТАЖИ
В качестве первого шага мы сосредоточимся на этапах сборки приложений. В целом у нас есть четыре параметра конфигураций для установки зависимостей или построения приложения в нашем сервисе. Эти конфиги — build, build_as_root, run_ run_as_root Отказ Обратите внимание, что эти команды запускаются только в первый раз Lando инициализирует наше приложение. Если мы хотим, чтобы построить шаги снова запустить, мы можем вызвать Lando Rebuild
Отказ
Например, построить
Позволяет устанавливать зависимости, используя пряжа
Что нужно до нашего приложения. Если нам когда-нибудь нужно установить пакет сервера низкого уровня, который нуждается в доступе администратора, мы можем использовать build_as_root.
здесь.
Давайте попробуем:
// lando.yml name: lando-node-12 services: defaults: type: node:12 build: yarn // Result we get in terminal Your app has started up correctly. Here are some vitals: NAME lando-node-12 LOCATION /Users/USERNAME/Projects/node12 SERVICES defaults
Итак, на данный момент, если мы запустим Ландо начать
В терминале Lando настроит контейнеры Docker с указанной версией PATCH, который мы определены для узла, запустите наш шаг сборки и установить все зависимости в Package.json.
.
Подавать/запустить контейнер
Итак, у нас есть наши зависимости отсортированы, но как насчет запуска самого приложения. Мы не хотим ввести другую команду для запуска приложения после загрузки контейнера обслуживания.
Оказывается, что у нас было на предыдущем шаге, это контейнер CLI для нашего сервиса, который мы можем запустить команды, чтобы запустить его. Это именно то, что мы собираемся сделать в Lando.yml
Config для автоматизации этого шага также:
// lando.yml name: lando-node-12 services: defaults: ... command: /app/node_modules/.bin/nodemon src/app-http.js --watch src // Now we get a URL where our application is served Your app has started up correctly. Here are some vitals: DEFAULTS URLS http://localhost:32847
Чтобы проверить, где были установлены зависимости в нашем контейнере, мы можем SSH
в наш сервис, как это:
// listing all the files in the root directory lando ssh --service defaults --command "ls -ls /" // we get several folders listed in our container 0 drwxr-xr-x 10 node dialout 320 Apr 12 19:48 app 4 drwxr-xr-x 1 root root 4096 Mar 31 02:07 bin 4 drwxr-xr-x 2 root root 4096 Feb 1 17:09 boot ... // We then try to cd to places we assume hold the no_modules intallation lando ssh -t --service defaults --command 'cd /app && exec bash -l' // and we see our node_modules directory here under app/ README.md node_modules package.json src yarn.lock
Используя SSL
Давайте раскрутим другой сервисный контейнер, чтобы увидеть, как можно обрабатывать более одного сервиса на Lando. Дополнительное обслуживание, которое мы собираемся построить, собирается создать безопасный сервер HTTPS для нашей среды разработки.
То, как мы можем сделать это через Самозагодный сертификат, который обычно построен с использованием OpenSSL , но это то, что Ландо будет справиться с нами. Сертификат и ключевые файлы будут находиться под /Сертирование
Справочник, который мы можем использовать в новом сервере узла для обеспечения определенного порта (который по умолчанию — 443
в Lando). Давайте посмотрим на это в действии:
//app-https.js 'use strict'; // global dependencies const fs = require('fs'); const http = require('http'); const https = require('https'); const express = require('express'); // initialization const app = express(); const key = fs.readFileSync('/certs/cert.key'); const cert = fs.readFileSync('/certs/cert.crt'); // request handlers const homepageHandler = function (req, res) { res.header('Content-type', 'text/html'); return res.end('I am on homepage'); }; const aboutpageHandler = function (req, res) { res.header('Content-type', 'text/html'); return res.end('I am on about page'); }; // Create our servers https.createServer({key, cert}, app).listen(443); http.createServer(app).listen(3000); // Basic HTTP response app.get('/', homepageHandler); app.get('/about', aboutpageHandler);
// lando.yml // setting a new service for a node server with SSL support name: lando-node-12 services: ... custom: type: node:12 ssl: true port: 3000 build: - yarn command: /app/node_modules/.bin/nodemon src/app-https.js --watch src --ignore *.test.js
Теперь после запуска Lando Rebuild
Мы видим, что у нас есть два сервиса вверх и работают:
NAME lando-node-12 LOCATION /Users/USERNAME/Projects/node12 SERVICES defaults, custom DEFAULTS URLS http://localhost:32898 CUSTOM URLS http://localhost:32899 https://localhost:32900
Также после вызова SSH
в Пользовательский
Сервис, мы можем видеть, какие файлы сертификатов генерируются:
lando ssh -t --service defaults --command 'cd /certs && ls' // generated certificates cert.crt cert.csr cert.ext cert.key cert.pem server.crt server.key
На данный момент, если мы отправляемся к предоставленному URL https://localhost: 32900
Мы видим, что браузер жалуется на недействительный сертификат. Это нормально, потому что мы не подписали его.
После прохождения на этой странице мы можем видеть, что подключение HTTPS было успешно установлено:
Чтобы узнать больше о обработке SSL в Lando, обязательно прочитайте Это руководство тщательно.
Тестирование установки
Теперь пришло время проверить нашу настройку. Представьте, что вы являетесь новым разработчиком в команде, и вы хотите работать на этом репозитории узла сервера. Все, что вам нужно сделать, это тянуть Этот Github Repo Установите Lando на вашу машину и запустите Ландо начать
И ты хорош, чтобы пойти.
Заключение
Вместе мы рассмотрели и построили простой процесс создания и запуска нашей среды разработки для веб-сервера узла.
Следующие шаги?
Есть еще много вещей, которые мы можем исследовать с Lando:
- Обязательно прочитайте более тщательно о Lando рецепты и Услуги Отказ Добавьте дополнительные для разных частей вашего стека, такого как база данных, интерфейсы, API, мониторинг и Инструменты аналитики
- Если вам нужен комплексной процесс инструмента, вы можете рассмотреть возможность использования Lando оснастить Отказ С этим вы можете построить сложные шаги построения по всем вашим контейнерам с помощью одной командой. Кроме того, вы можете настроить тест CI в инструментарии и запустить его локально
- Рассмотрим Оптимизация процесса Бег и строительство контейнеров докеров с Lando
- И самое главное, решают проблемы, которые стоит решить. Не участвуйте в чрезмерной инженерии и сосредоточиться только на строительных конфигах, которые случаются более одного раза в вашем жизненном цикле приложения
Ресурсы
https://www.edureka.co/blog/what-is-docker-container
https://nodejs.org/en/knowledge/HTTP/servers/how-to-create-a-HTTP-server/
https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs/Introduction
https://flaviocopes.com/express-https-self-signed-certificate/
https://docs.lando.dev/guides/lando-info.html
Plug: Logrocket, DVR для веб-приложений
Logrocket Это инструмент для ведения журнала Frontend, который позволяет вам повторить проблемы, как если бы они произошли в вашем браузере. Вместо того, чтобы угадать, почему случаются ошибки, или просят пользователей на скриншоты и журнал свалки, Lognocket позволяет воспроизвести сеанс, чтобы быстро понять, что пошло не так. Он отлично работает с любым приложением, независимо от основ и имеет плагины для регистрации дополнительного контекста из Redux, Vuex и @ Ngrx/Store. В дополнение к регистрации действий и состояния Redux, Lognocket Records Console Logs, ошибки JavaScript, Stacktraces, Networks/Ответы с заголовками + тел, метаданные браузера и пользовательские журналы. Он также привлекает инструменты DOM для записи HTML и CSS на странице, воссоздая Pixel-Perfect видео даже самых сложных одностраничных приложений. Попробуйте бесплатно Отказ
Пост Введение в Ландо появился первым на Logocket blog Отказ
Оригинал: «https://dev.to/bnevilleoneill/introduction-to-lando-36dl»