Tutorial

Настройка облачной IDE-платформы Eclipse Theia в Debian 10

DevelopmentDebian 10

Автор выбрал фонд Free and Open Source Fund для получения пожертвования в рамках программы Write for DOnations.

Введение

По мере перехода инструментов для разработчиков в облако, появляется все большее количество облачных IDE (интегрированная среда разработки), и все большее количество разработчиков начинает их использовать. Облачные IDE доступны на всех видах современных устройств посредством веб-браузеров и предлагают многочисленные преимущества для сценариев взаимодействия в реальном времени. Работа в облачной IDE обеспечивает единую среду разработки и тестирования для вас и вашей команды, минимизируя возможную несовместимость платформ. Облачные IDE, доступ к которым осуществляется с помощью веб-браузеров, можно использовать на любых типах современных устройств.

Eclipse Theia — это расширяемая облачная IDE, запущенная на удаленном сервере и доступная в браузере. Визуально она должна выглядеть и вести себя аналогично Microsoft Visual Studio Code, что означает, что она поддерживает различные языки программирования, имеет гибкий интерфейс и встроенный терминал. Отличие Eclipse Theia от других облачных IDE состоит в возможности расширения; ее можно изменять с помощью пользовательских расширений, что позволяет получить облачную IDE, настроенную под ваши нужды.

В этом обучающем руководстве вы научитесь развертывать Eclipse Theia на сервере Debian 10 с помощью инструмента управления контейнерами Docker Compose. Вы опубликуете ее на своем домене с помощью nginx-proxy, автоматизированной системы для Docker, которая упрощает процесс настройки Nginx для использования в качестве обратного прокси для контейнера. Также вы организуете защиту IDE с помощью бесплатного TLS-сертификата Let’s Encrypt, который вы будете получать с помощью специализированного дополнительного модуля. В результате на вашем сервере Debian 10 будет запущена платформа Eclipse Theia, доступная через протокол HTTPS и требующая ввода учетных данных пользователя для входа.

Предварительные требования

  • Сервер Debian 10 с привилегиями root, а также дополнительной учетной записью без привилегий root. Инструкции по настройке приведены в руководстве Начальная настройка сервера Debian 10. Для целей этого обучающего руководства используется дополнительная учетная запись sammy без привилегий root.
  • Docker, установленный на сервере. Выполните шаг 1 и шаг 2 руководства Установка Docker на Debian 10. Более подробную информацию о Docker см. в статье Экосистема Docker: знакомство с общими компонентами.
  • Docker Compose, установленный на сервере. Следуйте указаниям, приведенным в шаге 1 руководства Установка Docker Compose в Debian 10.
  • Зарегистрированное полное доменное имя. В этом обучающем руководстве мы будем использовать имя theia.your_domain. Вы можете купить доменное имя на Namecheap, получить его бесплатно на Freenom или воспользоваться услугами любого предпочитаемого регистратора доменных имен.
  • Запись A, где theia.your_domain​​​ указывает на публичный IP-адрес вашего сервера. В руководстве Введение в DigitalOcean DNS содержится подробная информация по их добавлению.

Шаг 1 — Развертывание nginx-proxy с Let’s Encrypt

В этом разделе мы развернем nginx-proxy и его дополнительный модуль Let’s Encrypt с помощью Docker Compose. Это позволит автоматически предоставлять и обновлять TLS-сертификат, чтобы при развертывании Eclipse Theia была доступна на вашем домене через HTTPS.

Для целей настоящего обучающего руководства вы должны хранить все файлы в директории ~/eclipse-theia. Создайте директорию, запустив следующую команду:

  • mkdir ~/eclipse-theia

Перейдите в директорию:

  • cd ~/eclipse-theia

Вы будете хранить конфигурацию Docker Compose для nginx-proxy в файле с именем nginx-proxy-compose.yaml. Создайте его с помощью текстового редактора:

  • nano nginx-proxy-compose.yaml

Добавьте следующие строки:

~/eclipse-theia/nginx-proxy-compose.yaml
version: '2'

services:
  nginx-proxy:
    restart: always
    image: jwilder/nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/etc/nginx/htpasswd:/etc/nginx/htpasswd"
      - "/etc/nginx/vhost.d"
      - "/usr/share/nginx/html"
      - "/var/run/docker.sock:/tmp/docker.sock:ro"
      - "/etc/nginx/certs"

  letsencrypt-nginx-proxy-companion:
    restart: always
    image: jrcs/letsencrypt-nginx-proxy-companion
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    volumes_from:
      - "nginx-proxy"

Здесь мы определяем две службы, которые будет выполнять Docker Compose, nginx-proxy и его спутник Let’s Encrypt. Для прокси вы должны задать в качестве образа jwilder/nginx-proxy, разметить порты HTTP и HTTPS, а также определить тома, которые будут доступны во время исполнения.

Тома — это директории на сервере, к которым будет иметь полный доступ определенная служба, которую вы будете использовать позднее для настройки аутентификации пользователя. Чтобы сделать это, мы используем первый том из списка, который сопоставляет локальную директорию /etc/nginx/htpasswd с такой же директорией в контейнере. В этой папке nginx-proxy ожидает найти файл с именем, повторяющим имя целевого домена, который будет содержать учетные данные для входа и организации аутентификации пользователей в формате htpasswd (username:hashed_password).

Для дополнительного модуля вы присваиваете имя образа Docker и предоставляете доступ к сокету Docker, указав том. Затем вы должны указать, что дополнительный модуль должен наследовать доступ к томам, определенным для nginx-proxy. Для обеих служб установлено значение always для restart, которое указывает Docker выполнять перезапуск контейнера в случае перезагрузки или сбоя системы.

Сохраните и закройте файл.

Выполните развертывание конфигурации с помощью следующей команды:

  • docker-compose -f nginx-proxy-compose.yaml up -d

Здесь вы передаете имя файла nginx-proxy-compose.yaml с параметром -f для команды docker-compose, которая указывает файл для запуска. Затем вы передаете up, чтобы запустить контейнеры. Флаг -d активирует раздельный режим, в результате чего Docker Compose будет запускать контейнеры в фоновом режиме.

Итоговый результат будет выглядеть следующим образом:

Output
Creating network "eclipse-theia_default" with the default driver Pulling nginx-proxy (jwilder/nginx-proxy:)... latest: Pulling from jwilder/nginx-proxy 8d691f585fa8: Pull complete 5b07f4e08ad0: Pull complete ... Digest: sha256:dfc0666b9747a6fc851f5fb9b03e65e957b34c95d9635b4b5d1d6b01104bde28 Status: Downloaded newer image for jwilder/nginx-proxy:latest Pulling letsencrypt-nginx-proxy-companion (jrcs/letsencrypt-nginx-proxy-companion:)... latest: Pulling from jrcs/letsencrypt-nginx-proxy-companion 89d9c30c1d48: Pull complete 668840c175f8: Pull complete ... Digest: sha256:a8d369d84079a923fdec8ce2f85827917a15022b0dae9be73e6a0db03be95b5a Status: Downloaded newer image for jrcs/letsencrypt-nginx-proxy-companion:latest Creating eclipse-theia_nginx-proxy_1 ... done Creating eclipse-theia_letsencrypt-nginx-proxy-companion_1 ... done

Вы развернули nginx-proxy и его дополнение Let’s Encrypt с помощью Docker Compose. Теперь вы можете перейти к настройке Eclipse Theia на вашем домене и обеспечению безопасности.

Шаг 2 — Развертывание контейнеризованной среды Eclipse Theia

В этом разделе вы создадите файл, содержащий любые разрешенные варианты комбинаций, используемых для входа в систему, которые должен будет вводить пользователь. Затем вы развернете Eclipse Theia на вашем сервере с помощью Docker Compose и опубликуете его на защищенном домене с помощью nginx-proxy.

Как было сказано в предыдущем шаге, nginx-proxy ожидает увидеть комбинации для входа в файле с именем, соответствующим выделенному домену, в формате htpasswd, который хранится в директории /etc/nginx/htpasswd в контейнере. Локальная директория, которая сопоставлена с виртуальной, не должна быть ее копией, как мы указали в конфигурации nginx-proxy.

Чтобы создать комбинации входа, вам нужно установить htpasswd, запустив следующую команду:

  • sudo apt install apache2-utils

Пакет apache2-utils содержит утилиту htpasswd.

Создайте директорию /etc/nginx/htpasswd:

  • sudo mkdir -p /etc/nginx/htpasswd

Создайте файл, который будет хранить логины для вашего домена:

  • sudo touch /etc/nginx/htpasswd/theia.your_domain

Обязательно замените theia.your_domain на ваш собственный домен Eclipse Theia.

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

  • sudo htpasswd /etc/nginx/htpasswd/theia.your_domain username

Замените username на имя пользователя, которое вы хотите добавить. Вам нужно будет дважды ввести пароль. После предоставления нужных данных htpasswd добавит пару (имя пользователя и хэшированный пароль) в конец файла. Вы можете повторить эту команду, добавив необходимое количество логинов.

Теперь вы должны будете создать конфигурацию для развертывания Eclipse Theia. Вы будете хранить ее в файле с именем eclipse-theia-compose.yaml. Создайте его с помощью текстового редактора:

  • nano eclipse-theia-compose.yaml

Добавьте следующие строки:

~/eclipse-theia/eclipse-theia-compose.yaml
version: '2.2'

services:
  eclipse-theia:
    restart: always
    image: theiaide/theia:next
    init: true
    environment:
      - VIRTUAL_HOST=theia.your_domain
      - LETSENCRYPT_HOST=theia.your_domain

В этой конфигурации мы определяем одну службу с именем eclipse-theia со значением always для параметра restart и theiaide/theia:next​​​ в качестве образа контейнера. Также вы должны задать для init значение true, чтобы указать Docker использовать в качестве главного диспетчера процессов init при запуске Eclipse Theia в контейнере.

Затем нужно задать две переменные среды в разделе environment: VIRTUAL_HOST и LETSENCRYPT_HOST. Первый элемент передается в nginx-proxy и указывает, на каком домене должен быть опубликован контейнер, а второй элемент используется в дополнении Let’s Encrypt и указывает, для какого домена нужно запрашивать TLS-сертификаты. Если вы не указали в качестве значения для VIRTUAL_HOST подстановочный знак, они должны быть одинаковыми.

Замените theia.your_domain на желаемый домен, а затем сохраните и закройте файл.

Теперь выполните развертывание Eclipse Theia с помощью следующей команды:

  • docker-compose -f eclipse-theia-compose.yaml up -d

Вывод будет выглядеть следующим образом:

Output
... Pulling eclipse-theia (theiaide/theia:next)... next: Pulling from theiaide/theia 63bc94deeb28: Pull complete 100db3e2539d: Pull complete ... Digest: sha256:c36dff04e250f1ac52d13f6d6e15ab3e9b8cad9ad68aba0208312e0788ecb109 Status: Downloaded newer image for theiaide/theia:next Creating eclipse-theia_eclipse-theia_1 ... done

Затем в браузере перейдите на домен, используемый для Eclipse Theia. Ваш браузер будет отображать запрос на выполнение входа. После предоставления корректных учетных данных вы должны будете попасть в Eclipse Theia и немедленно увидеть графический интерфейс редактора. В адресной строке вы должны будете увидеть замок, говорящий о том, что подключение защищено. Если вы не увидите его немедленно, подождите несколько минут, пока не будут предоставлены TLS-сертификаты, после чего перезагрузите страницу.

Графический интерфейс Eclipse Theia

Теперь, когда у вас есть безопасный доступ к облачной IDE, вы можете начать использовать редактор на следующем шаге.

Шаг 3 — Использование интерфейса Eclipse Theia

В этом разделе вы изучите некоторые функции интерфейса Eclipse Theia.

С левой стороны интерфейса IDE имеется вертикальный ряд 4 кнопок для доступа к наиболее часто используемым функциям на боковой панели.

Графический интерфейс Eclipse Theia — боковая панель

Эта панель настраивается, поэтому вы можете перемещать эти представления в различном порядке или удалять их из панели. По умолчанию первое представление открывает панель обозревателя, которая обеспечивает возможность навигации по структуре проекта, имеющей форму дерева. Здесь вы можете управлять папками и файлами — создавать, удалять, перемещать их при необходимости.

После создания нового файла через меню File вы увидите пустой файл, открытый в новой вкладке. После сохранения файла вы можете увидеть имя файла на боковой панели обозревателя. Чтобы создать папку, нажмите правой кнопкой мыши на боковой панели обозревателя и выберите пункт New Folder. Вы можете развернуть папку, нажав на ее имя, а также перетаскивать файлы и папки в верхнюю часть иерархии, чтобы переместить их в новое место.

Графический интерфейс Eclipse Theia — новая папка

Две другие опции обеспечивают доступ к функциям поиска и замены. Следующий элемент обеспечивает представление систем управления исходным кодом, которые вы можете использовать, например Git.

Последнее представление — это опция отладки, которая позволяет выполнять все стандартные действия при отладке в панели. Вы можете сохранить конфигрурации отладчика в файле launch.json.

Представление отладчика с открытым файлом launch.json

Центральную часть графического интерфейса занимает редактор, который вы можете разделить вкладками для редактирования кода. Вы можете изменить представление редактирования на сетку или расположенные параллельно файлы. Как и все современные IDE, Eclipse Theia поддерживает подсветку синтаксиса для вашего кода.

Вид редактора в сетку

Вы можете получить доступ к терминалу, введя CTRL+SHIFT+` или нажав пункт Terminal в верхнем меню и выбрав New Terminal. Терминал откроется в нижней панели, а в качестве его рабочей директории будет указано рабочее пространство проекта, которое содержит файлы и папки, отображаемые в боковой панели обозревателя.

Открытый терминал

Вы изучили базовые элементы интерфейса Eclipse Theia и познакомились с некоторыми самыми популярными функциями.

Заключение

Теперь вы можете использовать Eclipse Theia, универсальную облачную IDE-платформу, которая установлена на вашем сервере Debian 10 с помощью Docker Compose и nginx-proxy. Вы обеспечили безопасность вашей установки с помощью бесплатного TLS-сертификата Let’s Encrypt и создали экземпляр для запроса учетных данных пользователя при входе. Вы можете работать с исходным кодом и документами индивидуально или вместе с вашей командой. Также вы можете попробовать выполнить сборку вашей собственной версии Eclipse Theia, если вам требуются дополнительные функции. Дополнительную информацию о том, как это можно сделать, см. в документации Theia.

Creative Commons License