УСТАНОВКА ОБЛАЧНОЙ IDE-ПЛАТФОРМЫ ECLIPSE THEIA

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

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

В этом мануа­ле вы узна­е­те, как раз­вер­нуть плат­фор­му Eclipse Theia на сер­ве­ре CentOS 7 с помо­щью Docker Compose, инстру­мен­та оркест­ров­ки кон­тей­не­ров. Вы откро­е­те к ней доступ на сво­ем домене, исполь­зуя nginx-proxy, авто­ма­ти­зи­ро­ван­ной систе­мы для Docker, кото­рая упро­ща­ет про­цесс настрой­ки обрат­но­го прок­си-сер­ве­ра Nginx для кон­тей­не­ра. Для защи­ты тра­фи­ка мы будем исполь­зо­вать бес­плат­ные сер­ти­фи­ка­ты Let’s Encrypt, для это­го сер­вис пред­ла­га­ет спе­ци­аль­ный аддон.

Требования

  • Сер­вер CentOS 7,
  • Уста­нов­ка Docker
  • Docker Compose,
  • Заре­ги­стри­ро­ван­ное домен­ное имя, ука­зы­ва­ю­щее на ваш сер­вер. В этом мануа­ле будет исполь­зо­вать­ся услов­ный домен theia.your_domain.
  • DNS-запись А (для theia.your_domain), направ­лен­ная на ваш внеш­ний IP-адрес.

1: Развертывание nginx-proxy и расширения Let’s Encrypt

Сна­ча­ла нуж­но раз­вер­нуть nginx-proxy и его аддон для its 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. Открой­те этот файл в тек­сто­вом редакторе:

vi 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 вклю­ча­ет режим detached, что озна­ча­ет, что Docker Compose будет запус­кать кон­тей­не­ры в фоно­вом режиме.

Вывод коман­ды будет выгля­деть так:

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 yum install httpd-tools

Пакет httpd-tools содер­жит ути­ли­ту htpasswd.

Создай­те ката­лог /etc/nginx/htpasswd

sudo mkdir -p /etc/nginx/htpasswd

Затем создай­те файл для хра­не­ния учет­ных данных:

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

Вме­сто theia.your_domain ука­жи­те ваш домен.

Что­бы доба­вить в файл имя и пароль, вве­ди­те такую команду:

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

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

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

vi 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 с theiaide/theia:next в каче­стве обра­за кон­тей­не­ра, где пара­метр restart име­ет зна­че­ние always. Пара­метр 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

В ито­ге вы полу­чи­те такой вывод:

...
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. В адрес­ной стро­ке вы уви­ди­те зеле­ный замо­чек (сле­ва от адре­са сай­та), что озна­ча­ет, что ваше соеди­не­ние надеж­но защи­ще­но. Если сей­час это­го знач­ка там нет, подо­жди­те пару минут и пере­за­гру­зи­те стра­ни­цу – воз­мож­но, на полу­че­ние сер­ти­фи­ка­тов ушло немно­го боль­ше времени.

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

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

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

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

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

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

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

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