Библиотека сайта rus-linux.net
Как настроить компьютер с Linux так, чтобы им можно было пользоваться отовсюду (часть 3)
Оригинал: How to Configure Your Dev Machine to Work From Anywhere (Part 3)Автор: Jeff Cogswell
Дата публикации: 24 April 2015
Перевод: Н.Ромоданов
Дата перевода: май 2015 г.
В предыдущих статьях я рассказывал о моем наборе мобильных устройств и о том, как я могу отовсюду продолжать работать. В этой заключительной части я расскажу о том, как установить и настроить программное обеспечение, которым я пользуюсь. Большая часть из того, о чем я здесь буду рассказывать, относится к серверам, поскольку приложения для Android и iPhone довольно просты в настройке.
Прежде, чем мы начнем, я хочу отметить, что тот набор устройств, который я описывал, в действительности, не подходит для полного производственного цикла. Его использование ограничивается этапами разработки и тестирования программ. Кроме того, есть много различных способов работать удаленно, и это только одна из возможностей. В общем, у вас действительно не может быть ничего лучше, чем командная строка и доступ по SSH. Но в некоторых случаях, этого мне, на самом деле, недостаточно. Мне нужно больше; мне нужен был полный отладчик JavaScript для Chrome, и мне нужны гораздо лучшие возможности обработки текста, чем те, что есть на моих планшетах Android.
Ниже описывается настройка программного обеспечения, которой я пользуюсь. Однако, обратите внимание, что описание не является подробным, поскольку на это потребуется слишком много места. Вместо этого, я привожу лишь краткое описание и, если у вас есть базовые знания, то подробности сможете найти с помощью google. Рассмотрим шаг за шагом все настройки.
Поднимаем сервер
Во-первых, мы на хосте поднимаем сервер. Есть несколько хостинговых компаний; я пользовался Amazon Web Services, Rackspace и DigitalOcean. Мое личное предпочтение - операционная система Ubuntu Linux с LXDE. LXDE это полное окружение рабочего стола, которое включает в себя оконный менеджер OpenBox. Мне лично нравится OpenBox, т.к. он простой и при этом имеет привлекательный внешний вид. А рабочий стол LXDE замечателен тем, что, как следует из его названия, он легковесный (Lightweight X11 Desktop Environment — легковесная среда рабочего стола X11). Но можно использовать большое количество различных сред и оконных менеджеров. Я попробовал пару "плиточных" оконных менеджеров, таких как i3, и они работали также очень хорошо.
Обычный порядок установки выглядит следующим образом: вы используете веб-сайт хостинг компании для того, чтобы поднять сервер, и вам предоставляется файл с ключами, который будет использоваться для входа на сервер. Как правило, вы можете пользоваться ключом, который вы создаете самостоятельно, или можете воспользоваться сервисом, которой для вас создаст ключ, и, в последнем случае, вы скачиваете и сохраняете ключ. Обычно, когда вы предоставляете ключ, сервер автоматически будет настраиваться так, чтобы в него можно было входить только с помощью SSH и файла с ключом. Но если это не так, то вам нужно будет отключить вход по паролям.
Подключаемся к серверу
Фактически следующим шагом будет вход на сервер с помощью командной строки SSH и, прежде всего, настройка собственного пользователя, который не должен быть пользователем root, а затем настройка среды рабочего стола. Вы сможете входить на сервер рабочего стола Linux, но если вы желаете, то именно сейчас можете попробовать войти на сервер с планшета с Android или из IOS. Я пользуюсь приложением JuiceSSH; многим нравится приложение ConnectBot. Есть и другие приложения. Но, независимо от того, чем вы пользуетесь, убедитесь в том, что приложение позволяет входить с использованием файла с ключом. Файлы с ключами могут создаваться с использованием или без использования пароля. Также убедитесь, что приложение, которым вы пользуетесь, позволяет использовать любой тип файла с ключом, как с паролем, так и без пароля.
Скопируйте файл с ключом на ваш планшет. Лучший способ — это подключить планшет к компьютеру и переместить файл. Тем не менее, если вы хотите это сделать быстро и просто, вы можете отправить его электронным письмом. Однако имейте в виду, что вы отправляете файл с закрытым ключом через электронную почту, к которой потенциально могут иметь доступ другие люди. Решение — за вами, будете ли вы так поступать. Любым способом переместите файл на планшет, а затем, следуя инструкциям приложения, настройте приложение SSH с тем, чтобы осуществлять вход с использованием файла с ключом.
Затем с помощью приложения подключитесь к серверу. Несмотря на то, что вы используете файл с ключом, вам потребуется имя пользователя. Сервер, в конце концов, должен знать, кто входит с использованием файла с ключом. В AWS обычно в качестве имени пользователя для инсталляций Ubuntu использует имя "ubuntu"; другие могут просто дать вам доступ для пользователя root. В AWS поскольку вы не вошли в систему в роли пользователя root, вам для того, чтобы выполнить установку приложений, потребуется перед каждой командой указывать команду sudo, нo вам не будет предлагаться вводить пароль. На других облачных хостах, где вы входили в систему в роли пользователя root, вы сможете выполнять команды без указания sudo.
Да, и кстати, поскольку у нас все еще нет среды рабочего стола, вам для установки программного обеспечения команды придется набирать в командной строке. Если вы не знакомы с инструментальными средствами установки пакетов, то теперь у вас есть шанс о них узнать. Для систем на основе Debian (в том числе и для Ubuntu), вы будете пользоваться менеджером apt-get. В других системах пользуются приложением yum, которое является интерфейсом командной строки менеджера пакетов RPM.
Устанавливаем LXDE
Пришло время настроить из командной строки рабочий стол LXDE или любой другой рабочий стол, который вы предпочитаете. Единственное, что нужно сделать в случае, когда вы запускаете нечто большое, например, рабочий стол Cinnamon, это спросить, действительно ли это вам нужно. Рабочий стол Cinnamon большой и громоздкий. Я пользуюсь им на домашнем компьютере, но не на серверах, где я пользуюсь более легковесным рабочим столом, например, LXDE. И если вы знаете, как работать с таким рабочим столом, как Cinnamon, то с LXDE вы будете чувствовать себя столь же комфортно.
Есть много инструкций по установке рабочего стола LXDE или других рабочих столов, и поэтому я здесь не буду повторять подробности. В DigitalOcean есть замечательный блог с инструкциями по установке аналогичного рабочего стола XFCE.
Устанавливаем сервер VNC
Затем вам нужно установить сервер VNC. Вместо того чтобы пользоваться приложением TightVNC, которое многие предлагают, я рекомендую приложение vnc4server, поскольку оно позволяет легко изменять разрешение экрана, о чем я расскажу позже.
Чтобы настроить сервер VNC, вы должны создать имя пользователя VNC. Вы можете просто использовать для VNC свое имя пользователя и пароль и подключаться к системе из клиентского приложения VNC. Но соединение будет небезопасным. Вместо этого вам нужно подключаться через туннель SSH. Туннель SSH для организации соединений использует сессию SSH на сервере, в противном случае соединения осуществляются непосредственно через Интернет.
При подключении к серверу через Интернет, вы пользуетесь некоторым протоколом и портом. ВVNC в качестве порта обычно используется порт 5900 или 5901. Но в случае использования туннеля SSH приложение SSH слушает некоторый порт на том же самом локальном устройстве, например, порт 5900 или 5901. Затем приложение VNC, вместо подключения к удаленному серверу, подключается локально к приложению SSH. Приложение SSH, в свою очередь, передает все данные в удаленную систему. Таким образом SSH выступает в роли посредника. Но поскольку это SSH, то все данные передаются безопасно.
Таким образом важным этапом является создание на планшете туннеля. Некоторые приложения VNC могут создать туннель; другие не могут и вам потребуется использовать отдельное приложение. Приложение JuiceSSH может создать туннель, которым вы можете пользоваться в других приложениях. Еще я предпочитаю использовать VNC-приложение Remotix, с помощью которого вы можете создавать туннель. Как это делать — выбирать вам, но вы должны настроить туннель.
Приложение должно получить инструкции, согласно которым будет создан туннель. В случае приложения JuiceSSH необходимо указать сервер, с которым осуществляется соединение, и порт, например,порт 5900 или 5901. Затем также необходимо указать номер локального порта, используемого для туннеля. Вы можете использовать любой доступный порт, но я, как правило, использую тот же самый порт, что и на удаленном компьютере. Если я подключаюсь к порту 5901 на удаленном компьютере, то я делаю настройку так, чтобы приложение JuiceSSH тоже слушало порт 5901. Это упрощает настройки. Затем вы открываете приложение VNC и, вместо подключения к удаленному серверу, вы подключаетесь к порту на этом же планшете. Для сервера вы просто используете адрес 127.0.0.1, который является IP-адресом данного устройства. Итак повторим снова:
- Приложение JuiceSSH соединяется, например, с портом 5901 на удаленном хосте. В то же время, оно открывает порт 5901 на локальном устройстве.
- Приложение VNC подключается к порту 5901 на локальном устройстве. Оно можете не знать о том, к какому порту оно подключается на удаленном сервере.
Но для некоторых приложений VNC для создания туннелей не требуется другое приложение, они создают туннель самостоятельно. Приложение Remotix может создавать туннель; если вы настроили приложение, то убедитесь, что вы по-прежнему используете туннелирование. Вы должные предоставить всю информацию, необходимую для создания туннеля SSH, в том числе файл с ключом и имя пользователя. После этого приложение Remotix сделает за вас все остальное.
Как только приложение VNC будет запущено, вы должные перейти на сервер. Вы должны увидеть открытый рабочий стол с логотипом LXDE в качестве фона. Затем вы должны идти дальше и настроить клиентскую программу VNC так, как вам нравится; я предпочитаю управлять мышью в стиле трекпада; другим нравится управлять мышью, нажимая на кнопки там, где нужно сделать щелчок. В приложении Remotix и в некоторых других приложениях можно выбрать любой вариант.
Конфигурируем рабочий стол
Теперь давайте настроим рабочий стол. Единственное, что меня беспокоило, когда я настраивал рабочий стол, это чтобы он хорошо выглядел на моем 10-дюймовом планшете. Для того, чтобы сконфигурировать внешний вид рабочего стола, нужно в панели задач выбрать пункты меню Preferences → Customize Look and Feel (Настройки → Настройка внешнего вида) или из командной строки выполнить команду xappearance.
Конфигурирование рабочего стола с помощью команды lxappearance.
Я также пользовался инструментом конфигурирования Openbox и для этого выбирал на панели задач пункты меню Preferences → OpenBox Configuration Manager (Настройки → Менеджер коняфгурирования OpenBox) или запускал команду obconf.
Инструмент конфигурирования OpenBox
Экран моего самого большого планшета при размере 10 дюймов не очень большой, поэтому я для удобного просмотра настраивал панели меню и кнопки так, чтобы они были немного побольше. Одной из проблем оказалось то, что из-за того, что планшет имеет высокое разрешение, то когда я выбирал максимальное разрешение, все было крошечным. Поэтому мне потребовалась возможность изменять разрешение в зависимости от того, что я делал, и от того, для чего я пользовался планшетом. Такая возможность была в настройках сервера VNC, но ее не было в настройках LXDE и OpenBox. Итак, давайте посмотрим, что было сделано.
Чтобы изменять разрешение на лету, вам нужна программа, которая может управлять расширениями RandR, например, xrandr. Но сервер TightVNC, который, похоже, очень популярен, не работает с RandR. Вместо этого, я нашел программу vvnc4server, которая работает с xrandr, и, поэтому, я рекомендую использовать ее. При настройке vnc4server вы можете задать различные варианты разрешения с помощью параметра командной строки -geometry. Ниже приведен конфигурационный файл сервиса init.d, в котором сделана такая настройка. Я модифицировал один из файлов, который нашел в блоге DigitalOcean.
Важным моментом здесь является строка OPTIONS со всеми параметрами -geometry. Они будут отображаться когда вы из командной строки запускаете команду xrandr:
Для того, чтобы изменять разрешение на лету, вам нужна программа, которая может управлять вариантами расширений RandR, например, xrandr.
Вы можете использовать свой логин VNC с тем, чтобы изменить файл в каталоге init.d (и я действительно это сделал с помощью редактора, который называется scite). Но затем, после внесения этих изменений, вам, поскольку вы изменили настройки сервиса, нужно будет сразу перезапустить сервис VNC. При этом текущая сессия VNC должна быть закрыта и вы не сможете правильно перезагрузиться. Поэтому вам, возможно, потребуется войти через JuiceSSH и перезапустить сервер VNC. Затем вы можете снова войти на сервер VNC. Вам также, возможно, потребуется перезагрузить туннель SSH. После того, как вы это сделаете, вы сможете настроить разрешение. И после этого вы сможете изменять разрешение на лету без перезагрузки сервера VNC.
Чтобы изменить разрешение без необходимости перезагрузки сервера VNC, просто введите следующую команду:
xrandr -s 1
Замените 1 на номер разрешения, которое вам нужно. Таким образом, вы можете изменять разрешение без перезагрузки сервера VNC.
О сервере
После того как все настроено, вы можете свободно пользоваться своими обычными программами. Единственная загвоздка в том, что на хостинге оплату берут в зависимости от того, насколько много вы будете использовать оперативной памяти и дискового пространства. Так что вы будете ограничены тем, какие программы сможете запускать при заданном объеме оперативной памяти и количестве ядер. Но я обнаружил, что имея только 2 Гб оперативной памяти и 2 ядра при использовании с Ubuntu и LXDE я могу открыть в Chrome несколько страниц, в LibreOffice держать открытыми пару документов, использовать Geany для редактирования кода, запускать для тестирования мои собственные серверные программы, работающие под node.js, и пользоваться сервером MySQL. Иногда, если у меня в Chrome слишком много открытых вкладок, скорость работы система начинает медленно снижаться и я должен закрыть вкладки с тем, чтобы освободить больше памяти. Иногда я запускаю MySQL Workbench и из-за этого скорость работы системы также может немного снизиться, но если я закрою LibreOffice и оставлю в Chrome пару открытых вкладок, то в целом система будет работать неплохо. В общем, в большинстве случаев у меня вообще проблем не возникает.
И, кроме всего, если мне потребуется больше лошадиных сил, я могу поднять большой сервер с 4 или 8 Гб оперативной памяти и четырьмя или восемью ядрами. Но это дорогостоящее удовольствие и поэтому я делаю это не слишком часто.
Несколько экранов
Ради интереса мне удалось на сервере, работающем на хосте в публичном облаке, сделать два экрана для одного рабочего стола — один на моем большом 10-дюймовом планшете ASUS Transformer и один на моем меньшем планшете Nexus 7; причем один и тот же курсор мыши двигается по обоим экранам. Для того, чтобы это сделать, я запустил две сессии VNC, по одной от каждом планшете, а затем на том планшете, где была мышь и клавиатура, выполнил следующую команду:
x2x -east -to :1
В результате одна и та же мышь и та же самая клавиатура были подключены к обоим дисплеям. Это был забавный эксперимент, но в моем случае он оказался практически малозначимым, поскольку он не было похож на настоящий двухмониторный настольный компьютер. Я не мог перемещать окна между дисплеями, а браузер Chrome не хотел открываться более чем на одном дисплее Х. В моем случае я хотел, чтобы я при разработке веб-приложений мог открывать браузер Chrome на одном планшете, а затем на другом планшете открывать окно Chrome для отладки JavaScript, но ничего не вышло.
Вместо этого я обнаружил, что было бы более полезным иметь на меньшем планшете оболочку с командной строкой SSH, и в ней иметь возможность запускать серверный код на node.js, который был выдавал отладочную информации. После этого на другом планшете можно запускать браузер. Затем я могу наблюдать за ситуацией на обоих планшетах без переключений окон и использования только одного подключения VNC на большем планшете.
Снова о безопасности
Я не могу принизить важность того, что вы должны настроит все, что относится к безопасность, и вы должны понимать, как выполнять работу безопасно и что из этого следует. Я настоятельно рекомендую использовать SSH только с входом с применением файла с ключом и не пользоваться входом по паролю. И рассматривать предлагаемый вариант работы только для целей разработки или тестирования и не размещать на компьютере данных клиентов, что может в случае, если машина будет скомпрометирована, стать причиной судебных исков.
Для машин, на которых будут обрабатываться данные реальных клиентов, нужно все настроить так, как это будет рекомендовано отделом IT-безопасности вашей фирмы и как это указано в правилах вашего хостинг-сервиса. Я, например, для своих разработок пользуюсь сервисом git, для входа в который требуется закрытый ключ. Моя машина, на которой ведется разработка, размещена на хостинг-сервисе, что означает, что закрытый ключ у меня хранится на сервере. В вашем случае такое решение может оказаться неподходящим; вы и ваша команда должны решить, стоит ли это делать. В моем случае, я решил, что могу позволить себе этот риск, поскольку код, с которым я работаю, не слишком важен с точки зрения наличия в нем интеллектуальной собственности. Так что, если кто-то получит доступ к моей машине, которую я использую для разработок, он получит доступ к исходному коду небольшого, но не жизненно проекта, над которым я работаю, и к черновикам моих статей — это не личные и не интеллектуальные данные.
Веб разработка и Windows
Прежде, чем я завершу эту статью, я хочу представить тему для обсуждения. За последние несколько лет я заметил, что много отдельных веб-разработчиков используют настройки, которые очень похожи на те, что я описываю. Во многих случаях они пользуются системой Windows, а не Linux, но принцип тот же самый, не зависящей от операционной системы. Но их настройки отличаются от тех, что я описываю, тем, что они держат целые веб-сайты клиентов и клиентские данные на одной и той же машине и не используют туннелирование. Вместо туннелирования они просто вводят пароль. Это не то, о чем здесь я рассказывал. Если вы так поступаете, то, пожалуйста, пересмотрите свое решение. Я лично знаю, по крайней мере, троих частных веб-разработчиков, которые так поступают.
Потребуется некоторое время для того, чтобы понять последствия, к которых это ведет независимо от используемой операционной системы. Во-первых, войдя с запуском полной среды рабочего стола, вы, возможно, замедляете работу машины, которой вы пользуетесь при разработке. И, если вы запутались, то систему потребуется перезагрузить, и в течение этого времени сайты ваших клиентов будет недоступны. Используете ли вы репликацию? Используете ли вы частные сети? Запускаете ли вы MySQL или какую-либо другую базу данных на той же самой машине, а не в виртуальной частной сети? По этим темам можно написать целые книги (и они были написаны), и о том, какие решения лучше всего для этого использовать. Узнайте все о репликации, о виртуальных частных сетях и о том, как защитить свои серверы баз данных от внешнего трафика, и так далее. И, самое главное, изучите вопросы безопасности. Вы держите данные о клиентах на сайте, который может быть легко скомпрометирован? Это может означать СУДЕБНЫЕ ИСКИ. И это главный вывод из моей серии статей.
Заключительные замечания
Некоторые, кто комментировал предыдущие статьи, сделали некоторые действительно ценные замечания; один из комментировавших даже использовал фразу"игрушки". Хотя я действительно выполняю разработки, я, безусловно, не делаю их на машинах, на которых эксплуатируются реальные системы. Если я бы так поступал, то это действительно было бы просто игрушкой, что недопустимо делать на машинах с промышленными системами. Для промышленных систем используйте SSH и выбирайте такой редактор, который бы использовал SSH (лично мне нравится vim). И храните данные о клиентах на сервере, который доступен только из виртуальной частной сети. Прочитайте это, чтобы узнать больше.
Изучите, как настраивать и конфигурировать SSH. И если вам все это непонятно, то, пожалуйста, попрактикуйтесь и изучите. Есть миллионы веб-сайтов, на которых рассказывается об этом, в том числе и на сайте linux.com. Но если вы во всем разберетесь и сможете свести к минимуму риски, то вы действительно сможете работать практически из любого места. Моя работа стала гораздо более продуктивной. Если я хочу пойти в кафе и там что-нибудь делать, то я могу не брать с собой ноутбук. Хорошие времена! Изучите правила, следуйте лучшему практическому опыту и будьте более продуктивными.