Автор выбрал фонд 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 на вашем сервере Ubuntu 18.04 с помощью Docker Compose, инструмента оркестрации контейнеров. Вы опубликуете ее на своем домене с помощью nginx-proxy, автоматизированной системы для Docker, которая упрощает процесс настройки Nginx для использования в качестве обратного прокси для контейнера. Также вы организуете защиту IDE с помощью бесплатного TLS-сертификата Let’s Encrypt, который вы будете получать с помощью специализированного дополнительного модуля. В итоге у вас будет Eclipse Theia, работающая на сервере Ubuntu 18.04 и доступная через HTTPS, а пользователь должен будет выполнять вход с использованием учетных данных.
Предварительные требования
- Сервер Ubuntu 18.04 с привилегиями root и дополнительная учетная запись без прав root. Вы можете выполнить настройку, следуя указаниям документа Начальная настройка сервера для Ubuntu 18.04. В этом руководстве нашим пользователем без прав root будет
sammy
. - Docker, установленный на сервере. Выполните шаг 1 и шаг 2 руководства по установке Docker в Ubuntu 18.04. Дополнительную информацию о Docker см. в статье Экосистема Docker: знакомство с общими компонентами.
- Docker Compose, установленный на сервере. Выполните шаг 1 руководства по установке Docker Compose в Ubuntu 18.04.
- Зарегистрированное полное доменное имя. В этом обучающем модуле мы будем использовать имя
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
. Создайте директорию, запустив следующую команду:
Перейдите в директорию:
Вы будете хранить конфигурацию 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-сертификаты, после чего перезагрузите страницу.
Теперь, когда у вас есть безопасный доступ к облачной IDE, вы можете начать использовать редактор на следующем шаге.
Шаг 3 — Использование интерфейса Eclipse Theia
В этом разделе вы изучите некоторые функции интерфейса Eclipse Theia.
С левой стороны интерфейса IDE имеется вертикальный ряд 4 кнопок для доступа к наиболее часто используемым функциям на боковой панели.
Эта панель настраивается, поэтому вы можете перемещать эти представления в различном порядке или удалять их из панели. По умолчанию первое представление открывает панель обозревателя, которая обеспечивает возможность навигации по структуре проекта, имеющей форму дерева. Здесь вы можете управлять папками и файлами — создавать, удалять, перемещать их при необходимости.
После создания нового файла через меню File, вы увидите пустой файл, открытый в новой вкладке. После сохранения файла вы можете увидеть имя файла на боковой панели обозревателя. Чтобы создать папку, нажмите правой кнопкой мыши на боковой панели обозревателя и выберите пункт New Folder. Вы можете развернуть папку, нажав на ее имя, а также перетаскивать файлы и папки в верхнюю часть иерархии, чтобы переместить их в новое место.
Две другие опции обеспечивают доступ к функциям поиска и замены. Следующий элемент обеспечивает представление систем управления исходным кодом, которые вы можете использовать, например Git.
Последнее представление — это опция отладки, которая позволяет выполнять все стандартные действия при отладке в панели. Вы можете сохранить конфигрурации отладчика в файле launch.json
.
Центральную часть графического интерфейса занимает редактор, который вы можете разделить вкладками для редактирования кода. Вы можете изменить представление редактирования на сетку или расположенные параллельной файлы. Как и все современные IDE, Eclipse Theia поддерживает подсветку синтаксиса для вашего кода.
Вы можете получить доступ к терминалу, введя CTRL+SHIFT+
` или нажав пункт Terminal в верхнем меню и выбрав New Terminal. Терминал откроется в нижней панели, а в качестве ее рабочей директории будет указано рабочее пространство проекта, которое содержит файлы и папки, отображаемые в боковой панели обозревателя.
Вы изучили базовые элементы интерфейса Eclipse Theia и познакомились с некоторыми самыми популярными функциями.
Заключение
Теперь вы можете использовать Eclipse Theia, универсальную облачную IDE, которая установлена на вашем сервере Ubuntu 18.04 с помощью Docker Compose и nginx-proxy
. Вы обеспечили безопасность вашей установки с помощью бесплатного TLS-сертификата Let’s Encrypt и создали экземпляр для запроса учетных данных пользователя при входе. Вы можете работать с исходным кодом и документами индивидуально или вместе с вашей командой. Также вы можете попробовать выполнить сборку вашей собственной версии Eclipse Theia, если вам требуются дополнительные функции. Дополнительную информацию о том, как это можно сделать, см. в документации Theia.