Eni server что это
filecheck .ru
Вот так, вы сможете исправить ошибки, связанные с ENI.exe
Информация о файле ENI.exe
Описание: ENI.exe не является необходимым для Windows. ENI.exe находится в подпапках «C:\Program Files». Известны следующие размеры файла для Windows 10/8/7/XP 651,264 байт (80% всех случаев) или 593,920 байт.
Это не системный файл Windows. Приложение не видно пользователям. Процесс слушает или шлет данные на открытые порты в сети или по интернету. ENI.exe способен спрятать себя. Поэтому технический рейтинг надежности 56% опасности.
Это позволяет удалить соответствующую программу (Пуск > Панель управления > Установка и удаление программ > CoDeSys for Automation Alliance).
Если ENI.exe находится в папке C:\Windows\System32, тогда рейтинг надежности 80% опасности. Размер файла 392,192 байт. Находится в папке Windows, но это не файл ядра Windows. Нет информации по файлу. У процесса нет видимого окна. Это не файл Windows. Процесс начинает работу при запуске Windows (Смотрите ключ реестра: MACHINE\Run ). ENI.exe способен записывать ввод данных и мониторить приложения.
Важно: Некоторые вирусы маскируют себя как ENI.exe, особенно, если они расположены в каталогах c:\windows или c:\windows\system32. Таким образом, вы должны проверить файл ENI.exe на вашем ПК, чтобы убедиться, что это угроза. Мы рекомендуем Security Task Manager для проверки безопасности вашего компьютера.
Комментарий пользователя
Лучшие практики для исправления проблем с ENI
Если у вас актуальные проблемы, попробуйте вспомнить, что вы делали в последнее время, или последнюю программу, которую вы устанавливали перед тем, как появилась впервые проблема. Используйте команду resmon, чтобы определить процесс, который вызывает проблемы. Даже если у вас серьезные проблемы с компьютером, прежде чем переустанавливать Windows, лучше попробуйте восстановить целостность установки ОС или для Windows 8 и более поздних версий Windows выполнить команду DISM.exe /Online /Cleanup-image /Restorehealth. Это позволит восстановить операционную систему без потери данных.
ENI сканер
Security Task Manager показывает все запущенные сервисы Windows, включая внедренные скрытые приложения (например, мониторинг клавиатуры или браузера, авто вход). Уникальный рейтинг надежности указывает на вероятность того, что процесс потенциально может быть вредоносной программой-шпионом, кейлоггером или трояном.
Бесплатный aнтивирус находит и удаляет неактивные программы-шпионы, рекламу, трояны, кейлоггеры, вредоносные и следящие программы с вашего жесткого диска. Идеальное дополнение к Security Task Manager.
Reimage бесплатное сканирование, очистка, восстановление и оптимизация вашей системы.
Тема: Несколько общих вопросов прежде чем приступить к изучению
Опции темы
Отображение
1) CoDeSys позволяет создавать и отлаживать проекты для системы ПЛК100+ИП320? Визуализация будет загружаться в панель прямо из проекта или её надо туда упихивать чем-то отдельным?
2) Можно ли к проекту ПЛК100+ИП320 вдальнейшем добавить ещё и окна для визуализации на CoDeSys HMI
3) Можно ли в проекте CoDeSys работать с модулями МДВВ?
4) работа с внешней базой данных возможна только через ENI Server?
CoDeSys тут нужен только для программирования и отладки ПЛК. Данная панель конфигурируется отдельно и не требует программирования.
В принципе, в природе существуют диалоговые ПЛК со встроенными графическими сенсорными дисплеями (например такие) В них сам ПЛК программируется в CoDeSys и визуализация сразу рисуется в CoDeSys и автоматом идет на встроенном дисплее, но такие ПЛК существенно дороже (в 4-10 раз). Это уже больше компьютер, чем ПЛК.
ENI Server – это редкостная штука. Он нужен для правильной организации работы коллектива разработчиков прикладных программ в среде CoDeSys. Если программу для ПЛК пишет 1 человек, то ENI не нужен. Если с одним проектом в CoDeSys одновременно работают несколько людей, то бывает очень желательно узнать кто, когда и зачем менял некий блок и иметь возможность произвести его откатку на любую дату. Обычный файл проекта CoDeSys такое не позволяет. Если его поправить (возможно ошибочно) и нормально записать, то никакую историю изменений отследить уже нельзя. ENI это позволяет. Кроме того, появляется возможность создать единую базу программных компонентов компании, включать их в разные проекты и централизованно править. ENI Server штука очень удобная и необходимая для серьезных пользователей CoDeSys. Позволяет экономить массу сил и времени, если мы делаем много похожих проектов, облегчает проведение наладки, гарантирует восстановление проекта, даже если некий малоопытный человек его поправил по глупости и не помнит что и где.
Однако при начале освоения CoDeSys лучше не забивать себе этим голову, не устанавливать ENI вовсе и забыть про него, до тех пор пока вы не начнете жарить проекты с CoDeSys как блины горками. Тогда ENI будет очень кстати
Тут имеются в виду базы данных систем управления версиями типа Microsoft SourceSafe и др.
Eni server что это
CoDeSys позволяет создавать и отлаживать проекты для системы ПЛК100+ИП320? Визуализация будет загружаться в панель прямо из проекта или её надо туда упихивать чем-то отдельным?
CoDeSys тут нужен только для программирования и отладки ПЛК. Данная панель конфигурируется отдельно и не требует программирования.
В принципе, в природе существуют диалоговые ПЛК со встроенными графическими сенсорными дисплеями (например такие (http://www.berghof-automation.de/Automation/en/Products+and+Solutions/CANtrol+Dialog/Dialog+Controller.html)) В них сам ПЛК программируется в CoDeSys и визуализация сразу рисуется в CoDeSys и автоматом идет на встроенном дисплее, но такие ПЛК существенно дороже (в 4-10 раз). Это уже больше компьютер, чем ПЛК.
2) Можно ли к проекту ПЛК100+ИП320 вдальнейшем добавить ещё и окна для визуализации на CoDeSys HMI
Да, легко.
4) работа с внешней базой данных возможна только через ENI Server?
ENI Server – это редкостная штука. Он нужен для правильной организации работы коллектива разработчиков прикладных программ в среде CoDeSys. Если программу для ПЛК пишет 1 человек, то ENI не нужен. Если с одним проектом в CoDeSys одновременно работают несколько людей, то бывает очень желательно узнать кто, когда и зачем менял некий блок и иметь возможность произвести его откатку на любую дату. Обычный файл проекта CoDeSys такое не позволяет. Если его поправить (возможно ошибочно) и нормально записать, то никакую историю изменений отследить уже нельзя. ENI это позволяет. Кроме того, появляется возможность создать единую базу программных компонентов компании, включать их в разные проекты и централизованно править. ENI Server штука очень удобная и необходимая для серьезных пользователей CoDeSys. Позволяет экономить массу сил и времени, если мы делаем много похожих проектов, облегчает проведение наладки, гарантирует восстановление проекта, даже если некий малоопытный человек его поправил по глупости и не помнит что и где.
Однако при начале освоения CoDeSys лучше не забивать себе этим голову, не устанавливать ENI вовсе и забыть про него, до тех пор пока вы не начнете жарить проекты с CoDeSys как блины горками. Тогда ENI будет очень кстати 🙂
Однако как организовать хранение таблиц и графиков процессов на PC
Однако как организовать хранение таблиц и графиков процессов на PC
Для этого существуют SCADA системы. Для стыковки с ними в CoDeSys есть OPC сервер.
В простых случаях можно обойтись CoDeSys HMI. HMI позволяет отображать тренды и таблицы данных из памяти ПЛК. Но здесь в принципе другой подход. Весь интеллект и данные сосредоточены в ПЛК, компьютер работает как ‘тонкий клиент’ – тупая отображалка. Классическое применение в машиностроении для локальных операторских пультов (на своей панели, на (подключаемом иногда) компьютере и удаленно в web одна картинка прямо из ПЛК).
Есть еще вариант DDE-сервер. Он также входит в дистрибутив CoDeSys. С ним можно передать данные в Excel и др.
Но для ‘взрослых’ систем управления процессами нужна SCADA, которая умеет собирать данные с кучи ПЛК, хранить, обрабатывать и красиво представлять их уже на верхнем уровне (в компьютере).
Библиотеки для ПЛК ОВЕН должны быть установлены в среду CoDeSys. Но если я хочу отладить проект без установки целевого устройства, а потом применить его скажем для ПЛК100, то мне нужно обязательно пользовать библиотеками ОВЕН?
Библиотеки ОВЕН (UNM, PID_regulators) в режиме эмуляции не работают. А что касается библиотек CoDesys, созданных не только для работы с ПЛК ОВЕН, то использовать их вы вполне сможете.
Что касается изменения таргет файла. Какие операции вы производили? Необходимо сначала в ресурсе target settings выбрать нужный таргет вместо none. Затем открыть plc configuration и выполнить пункт меню extras-standart configuration. После этого начинайте вносить изменения в plc configuration. Для таргета версии 2-02-3 это работает без каких-либо сложностей.
гарантированный не 1 мс
Не гарантированный (т.е. быдет плавать время) 250 мкс
Engineering Interface (ENI)
The ENI interface (‘Engineering Interface’) allows to connect the Programming system to an external data base. There the data which are needed during creation of an automation project can be stored. The usage of an external data base guarantees the consistency of the data, which then can be shared by several users, projects and programs. Also it extends the functionality by making possible the following items:В
The ENI is composed of a client and a server part. So it is possible to hold the data base on a remote computer, which is required for multi-user operation. The TwinCAT PLC Control is a client of the independent ENI Server Process as well as another application, which needs access to the data base (Please see the separate documentation on the ENI Server).
Currently the ENI supports the data base systems ‘Visual SourceSafe 5.0’ and ‘Visual SourceSafe 6.0’ and a local file system. Objects can be stored there in different ‘folders’ (data base categories with different access properties ). The objects can be checked out for editing and thereby will get locked for other users. The latest version of an object can be called from the data base. Furtheron in parallel you can store any objects just locally in the project as usual for projects without source control. The *.pro file is the local working copy of an project managed by the data base.
Preconditions for Working with an ENI project data base
If you want to use the ENI in TwinCAT PLC Control in order to manage the project objects in an external data base, the below mentioned preconditions must be fulfilled:
Please regard: For a guide concerning installation and usage of the ENI Server please see the separate server documentation resp. online help. There you will also find a quickstart guide. Also consider the possibility of using the ENI Explorer which allows to perform data base actions independently from the currently used data base system.
Working with the ENI project data base
The data base commands (Get Latest Version,Check Out, Check In, Version History, Label Version etc.) which are used for managing the project objects in the ENI project data base, will be available in the current project as soon as the connection to the data base has been activated and configured correctly. See for this Preconditions for Working with an ENI project data base. The commands then are disposable in the submenu ‘Data Base Link’ of the context menu or of the ‘Project’ menu and refer to the object which is currently marked in the Object Organizer. The current assignment of an object to a data base category is shown in the Object Properties and can be modified there. The properties of the data base categories (communication parameters, access rights, check in/check out behaviour) can be modified in the option dialogs of the project data base (‘Project’ ‘Options’ ‘Project Source Control’).
Object categories concerning the project data base
There are four categories of objects of a TwinCAT PLC Control project concerning the project source control:В
Thus in the programming system an object can be assigned to one of the categories ‘Project objects’, ‘Shared objects’ or ‘Local’; the ‘Compile files’ do not yet exist as objects within the project.В
Assigning an object to one of the categories is done automatically when the object is created, because this is defined in the project options dialog ‘Project source control’, but it can be modified anytime in the ‘Object Properties’ dialog.В
Each ENI object category will be configured separately in the settings for the ‘ENI settings’ (‘Project’ ‘Options’, category project data base). That means that each category gets defined own parameters for the communication with the data base (directory, port, access right, user access data etc.) and concerning the behaviour at calling the latest version, checking out and checking in. These settings then will be valid for all objects belonging to the category. As a result you will have to log in (username, password) to each data base category separately; this will be done via the ‘Login’ dialog (‘Project’ ‘data base agssignment’ ‘Login‘).
It is advisable to create a separate folder for each object category in the data base, but it is also possible to store all objects in the same folder. (The ‘category’ is a property of an object, not of a folder.)В
See in the following the three ENI object categories:
Please note:
Alternatively any objects of the project can be excluded from the project source control and can be assigned to category ‘Local’, which means that they are just stored with the project as usual for projects without any source control.
Уютный VPS-сервер для маленьких проектов: как настроить
Мне всегда хотелось иметь в сети личное пространство. Место, где все было бы устроено как мне удобно. Наилучшим решением мне виделся недорогой VPS, который я мог бы обустраивать в соответствии со своими потребностями. Долго я не мог подступиться к решению этой задачи, но как-то незаметно подобрался набор инструментов, который позволил организовать именно такую программную среду, как мне хотелось.
Если вам тоже хочется создать в сети свое личное пространство, но вы не знаете, с чего начать, или вам просто интересны такие замечательные программные продукты как Docker, Portainer, Traefik – добро пожаловать под кат.
Введение
Признаться честно, я не очень люблю командную строку. То есть, мне нравится сама идея легкого минималистичного универсального интерфейса, практически не требующего ресурсов, но черное окно с мигающим курсором вызывает у меня фрустрацию и чувство беспомощности. И я даже знаю откуда это у меня.
Когда я учился в институте (это то время, когда у меня в городе только появился интернет по карточкам и первое интернет-кафе), мой друг, который к тому времени умудрился устроится лаборантом на кафедру информатики, активно пытался подсадить меня на Линукс. И вот я, считающий себя продвинутым компьютерщиком, имеющий опыт, наверное, сотни установок винды, прихожу домой после института и уверенным движением вставляю в дисковод диск с дистрибутивом линукс… И что? И ничего.
Я уже за давностью лет не помню всех подробностей, наверно мне даже удалось его установить, но дальше был провал – я просто не понимал, что делать. Привычный способ, который работал в винде – рыться в панели управления рандомно включая разные настройки пока все не заработает (или сломается окончательно, но тогда можно было переустановить винду и начать все снова) тут не действовал. Все, что у меня было, это консоль, которая раз за разом отвергала мои попытки что-то настроить. Помню, что у меня была даже книга по линуксу, которая тоже никак не помогала — команды, которые там были приведены, в большинстве своем почему-то не работали. В общем, промучившись несколько дней я тогда решил для себя, что линукс, это какая-то ерунда, и с облегчением вернулся к привычной винде.
Сейчас все поменялось. С приходом в нашу жизнь веба в его современном виде я пересел на Node.js и волей-неволей стал проникаться идеологией консоли и Linux. Для хостинга своих разработок мне понадобился VPS, и тут оказалось, что VPS с виндой стоят гораздо дороже, так что моя жаба перевесила мои фрустрации относительно консоли, да и наличие скоростного интернета позволило мгновенно находить ответы на возникающие вопросы.
Я научился пользоваться ssh, осознал силу git и стал активно пользоваться docker’ом, но мне все также нравится использовать для своих задач графический интерфейс, и в этой статье я хочу вас познакомить с замечательным набором инструментов, которые позволяют решать мне мои повседневные задачи, не обращаясь лишний раз к консоли.
Подготовка
Я создал VPS минимальной конфигурации (vCPU: 1 core, RAM: 1 ГБ, NVMe: 20 ГБ) на macloud. Для установки на VPS я выбрал дистрибутив Debian 10. При установке я сразу добавил через панель управления SSH-ключ, чтобы было удобно заходить в консоль с помощью SSH-клиента. Для дальнейших экспериментов понадобится следующее:
Устанавливаем необходимые зависимости:
Добавляем официальный GPG ключ Docker’а:
Теперь осталось обновить список пакетов:
и установить докер:
Проверить, что все корректно установилось можно, запустив команду:
Если появилось приветствие, значит все прошло хорошо. У меня на момент написания данной статьи установилась следующая версия:
Теперь надо установить docker-compose. Для этого воспользуемся официальной инструкцией:
Для начала нам нужно получить ссылку на свежий релиз docker-compose. Список релизов можно посмотреть тут: https://github.com/docker/compose/releases
На момент написания статьи наиболее свежей была версия 1.29.2. Нам нужна версия для linux, поэтому выбираем файл с названием docker-compose-Linux-x86_64. Скопируем ссылку на него. Теперь надо в консоли ввести следующую команду (вставьте в нужное место ссылку, полученную выше):
В моем случае получилось:
Запустим команду и загрузится бинарный файл docker-compose.
Последний шаг – надо установить для него разрешение на исполнение. Это можно сделать следующей командой:
Если всё прошло нормально, то на этом процесс установки окончен, теперь можно проверить версию docker-compose. У меня получилось вот так:
Последний шаг – это включение файла подкачки, учитывая малый объем памяти он точно не будет лишним:
Создадим файл размером 4 Гб
Назначим ему необходимые права:
Инициализируем его как файл подкачки:
Проверить, появился ли файл подкачки в системе можно командой free. У меня все получилось:
Осталось последнее действие: для того, чтобы файл подкачки оставался активным после перезагрузки надо добавить в файл /etc/fstab следующую строку:
Для подобных задач мне нравится использовать файловый менеджер Midnight Commander. Это консольный файловый менеджер с классическим интерфейсом. Если вы сталкивались с Norton Commander/FAR/TotalCommander – вы легко поймете, как им пользоваться. Установить его можно следующей командой:
А запустить с помощью команды
Увидим до боли знакомую картину:
Теперь найдем нужный файл и отредактируем его:
На этом предварительная настройка закончена, можно двигаться дальше.
Portainer
Первый инструмент, с которым мне бы хотелось вас познакомить – это Portainer. Portainer – это инструмент для управления контейнерами в Docker, Swarm, Kubernetes и Azure ACI. Как написано в документации Portainer’а:
«Отрицая необходимость для пользователей использовать интерфейс командной строки, писать YAML или понимать манифесты, Portainer делает развертывание приложений и устранение неполадок настолько простым, что любой может это сделать».
Для моих целей Portainer подходит просто идеально. Давайте познакомимся с ним поближе. В соответствии с документацией https://documentation.portainer.io/v2.0/deploy/ceinstalldocker/ проще всего это сделать следующим образом:
Создадим том для хранения данных:
Теперь можно запустить Portainer следующей командой:
После запуска Portainer будет доступен по адресу http:// :9000/
При первом запуске Portainer попросит вас указать пароль администратора, после чего спросит, каким образом подключится к окружению:
Я выбрал вариант подключится к локальному Docker’у, после чего появился домашний экран Portainer’а:
Как видно, доступен локальный эндпоинт, позже можно при необходимости добавить подключения к другим узлам.
Зайдем в него, и увидим удобный дэшбоард со сводной информацией:
Здесь мы можем управлять всеми аспектами работы Docker’а. Давайте посмотрим, что у нас в контейнерах:
Здесь пока один контейнер – это сам Portainer. Интерфейс очень удобно позволяет просматривать и управлять контейнерами, а также есть возможность добавлять новые. Можете пройтись по остальным вкладкам и убедится, насколько удобный и продуманный интерфейс имеет Portainer.
Наибольший интерес представляет вкладка Stacks. Стэк – это совокупность взаимосвязанных контейнеров, которые запускаются и работают совместно. По сути, это тоже самое, что композиция Docker Compose, конфигурацию которой мы описываем в файле docker-compose.yml и потом запускаем командой docker-compose up.
Portainer дает возможность добавить стек в систему различными путями, начиная с редактирования с помощью встроенного редактора и заканчивая загрузкой с github.
Для определения стека используется формат docker-compose, именно он работает здесь под капотом. Мне при помощи этой функции удобнее всего построить из контейнеров необходимую инфраструктуру.
На этом предлагаю пока отвлечься от изучения возможностей portainer’а. Думаю, вы уже увидели, что это серьезный инструмент, благодаря которому можно практически полностью отказаться от использования CLI docker’а. Давайте теперь кратко рассмотрим, что же я хочу получить в результате на этом VPS.
У меня периодически возникает потребность в разработке «быстрых» проектов. Я так называю проекты, которые не требуют глубокой проработки. Это могут быть эксперименты, небольшие сайты, боты, сборщики информации и т.п. Все то, что не требует выстраивания цепочки CI/CD. Мне было бы крайне удобно разрабатывать и отлаживать такие приложения прямо там, где они будут работать. Также у меня довольно часто бывает ситуация, когда я нахожусь вдали от своего рабочего места с настроенной средой разработки, и, если что-то в этих моих проектах начинает работать не так как надо, хотелось бы иметь возможность быстро разобраться в ситуации и пофиксить проблему, или просто поработать над проектами пока есть свободная минутка с любого компьютера, даже если на нем нет ничего, кроме браузера и доступа в интернет.
Для удобства доступа у меня есть купленное доменное имя, и я хочу настроить для различных инструментов домены третьего уровня, так, чтобы например portainer был доступен по адресу portainer.example.com. Также я хочу, чтобы всё работало через https, и, чтобы не заморачиваться с покупкой сертификатов SSL, воспользоваться Let’s Encrypt. Еще одно требование, чтобы всё, к чему не предполагается публичный доступ было закрыто аутентификацией.
Для того, чтобы всё это реализовать, давайте познакомимся со следующим замечательным инструментом. Это…
Traefik
Traefik — это реверсивный прокси-сервер, который заточен для работы с контейнерами. Для меня важны следующие его возможности:
Чтобы процесс получения сертификата Let’s encrypt прошел успешно, перед запуском надо убедится, что записи DNS корректно настроены. Я для этих целей использую cloudflare, и в нем конфигурация должна выглядеть примерно так:
В графе «Content» должен находится адрес нашего VPS.
Если теперь скопировать получившийся docker-compose.yml на сервер выполнить следующую команду:
То после запуска по адресу portainer.example.com будет такая картина:
Причем он уже будет защищен сертификатом Let’s Encrypt:
У traefik есть очень удобный дашборд, который помогает понять, правильно ли применились настройки конфигурации. Для того, чтобы его активировать, надо добавить в docker-compose.yml следующие строки:
Также надо в настройках DNS добавить домен третьего уровня traefik.example.com. Это можно сделать по аналогии с тем, как ранее был добавлен домен для portainer. После применения настроек по адресу traefik.example.com увидим дашборд:
Как видите, Traefik оказался замечательным инструментом. Он работает в тесной связке с docker’ом, а его возможности динамической конфигурации позволяют полностью отказаться от использования конфигурационных файлов для настроек роутинга. Вместо этого мы просто прописываем все необходимые параметры в качестве labels для настраиваемого сервиса, так что все настройки оказываются в одном месте.
Теперь предлагаю немного отвлечься от настройки базовых сервисов и добавить в систему среду разработки. Это будет…
Visual Studio Code Server
Для меня всегда среда разработки или IDE, была чем-то таким серьезным. Мощный программный пакет, который устанавливается на машине разработчика, занимает много гигабайт на диске и в оперативной памяти. Пример такой IDE, которой я пользовался много лет, и до сих пор считаю, что это лучший выбор, если вы работаете со стеком технологий Microsoft, это Microsoft VisualStudio. Когда я начал изучать Node.js, я открыл для себя VSCode, и, несмотря на родственные названия, это совсем другая IDE, с совершенно иной концепцией и возможностями. Тот факт, что для отображения своего интерфейса VSCode использует движок Chrome, позволяет разнести интерфейс и сам VSCode. Благодаря такой архитектуре возник Visual Studio Code Server, который может работать на VPS, при этом интерфейс VSCode будет доступен через браузер. И нет, это не очередной онлайн редактор кода, это полноценная IDE VSCode, которая обладает всеми ее замечательными возможностями.
Чтобы добавить VSCode Server на свой VPS я в Portainer’е создам новый stack, назову его code-server и добавлю туда следующую конфигурацию:
Также перед запуском надо не забыть добавить в записи DNS домен третьего уровня code.example.com. Теперь осталось нажать кнопку Deploy the stack.
После окончания процесса в portainer’е появится новый stack, и, если мы зайдем по адресу code.example.com, то увидим такую картину (я сразу включил dark theme):
Здесь можно вести разработку также как в десктопной версии VSCode. По большому счету, единственное отличие, с которым я столкнулся, это разница в дефолтных биндингах некоторых сочетаний клавиш, но к этому быстро привыкаешь в процессе использования.
Для удобства я подключил к контейнеру code-server’a том, который смонтировал в директорию /app, так что создавать или клонировать из репозитория проекты лучше всего там, в таком случае данные не пропадут даже при пересоздании контейнера.
В данном образе уже установлен Node.js, так что мне не пришлось ничего делать, и я могу сразу приступить к работе над своими проектами. Если же вам в работе нужны другие ЯП, то обратите внимание, что создатели данного образа поддерживают каталог модов, которые позволяют добавить поддержку различных платформ. О том, как их использовать, можно почитать в описании образа на Docker Hub, а со списком официальных модов можно ознакомиться здесь: mods.linuxserver.io/?mod=code-server
Обратите также внимание на то, что в настройках контейнера указан пароль sudo. Для демонстрации я оставил его простым, но на практике лучше сделать его сложным, а еще лучше использовать свойство SUDO_PASSWORD_HASH, чтобы не хранить пароль в открытом виде. Как это сделать, можно почитать в описании образа здесь: hub.docker.com/r/linuxserver/code-server.
Как вы наверное уже заметили – на данный момент доступ к code-server никак не защищен и сейчас любой, кто зайдет по адресу code.example.com получит доступ. Это очень плохой вариант, и, хотя в настройках образа можно включить доступ по паролю, мне бы хотелось иметь единый логин для доступа ко всем ресурсам, расположенным на сервере. Для этого предлагаю познакомиться со следующим инструментом. Это будет…
KeyCloak
KeyCloak – это современный инструмент для организации доступа к распределенным системам с использованием технологии единого входа. На самом деле это единственный свободный инструмент с настолько мощной функциональностью, который мне удалось найти. Если знаете достойную альтернативу, обязательно напишите об этом в комментариях.
Для того, чтобы добавить его в мою систему, я создал в portainer’е новый стек с названием auth и добавил в него следующую конфигурацию:
После нажатия кнопки Deploy the stack, KeyCloak будет доступен по адресу auth.example.com. Если мы зайдем туда, нас встретит приветственное окно KeyCloak:
Зайдем в консоль администратора:
Имя пользователя будет admin, а начальный пароль тот, что мы установили в конфигурации стека переменной окружения KEYCLOAK_PASSWORD. После логина попадем в админку KeyCloak:
Рекомендации по первоначальной настройке KeyCloak для docker’а можно подчерпнуть в официальной документации вот здесь www.keycloak.org/getting-started/getting-started-docker.
Вкратце, надо создать новый пользовательский Realm, в нем создать пользователя и добавить нового клиента.
Для клиента необходимо установить Access Type: confidential и добавить в Valid Redirect URIs наши домены, пока это будут «https://traefik.example.com/*» и « code.example.com*»:
После установки Access Type: confidential появится вкладка Credentials, в которой можно будет забрать Secret, он нам пригодится далее при настройке.
На этом пока закончим настройку KeyCloak. Теперь нам надо подружить его с Traefik’ом. Напомню, что мы хотим закрыть от неаутентифицированных пользователей доступ к узлам code.example.com и traefik.example.com. Для этих целей у traefik есть ForwardAuth middleware, которое позволяет организовать авторизацию через внешний сервис. Чтобы обеспечить его взаимодействие KeyCloak нам понадобится промежуточный сервис, я буду использовать github.com/thomseddon/traefik-forward-auth. Он доступен также в качестве образа на Docker Hub, поэтому я просто дополню конфигурацию стека auth в portainer’е таким сервисом:
Здесь в переменной PROVIDERS_OIDC_ISSUER_URL должен быть путь к ранее созданному нами Realm в Keycloak, PROVIDERS_OIDC_CLIENT_ID должен содержать имя клиента, созданного мной ранее в данном realm’е, а PROVIDERS_OIDC_CLIENT_SECRET надо взять из вкладки Credentials данного клиента. В переменной SECRET надо забить рандомную строку.
Теперь, чтобы закрыть сервис, роутинг в который обеспечивает Traefik достаточно добавить к нему в labels следующую строку:
Для начала я решил закрыть аутентификацией code server, для чего зашел в его стек и дополнил его конфигурацию. Получилось следующее (для краткости привожу только секцию labels):
Нажмем кнопку Update Stack и попробуем зайти по адресу code.example.com. Если все сделано правильно, то появится окно логина:
После ввода корректных имени пользователя и пароля (которые до этого настроил в KeyCloak) я попал в интерфейс Code server. Все работает!
Подобным образом я закрыл от посторонних глаз дашборд traefik’а. Для этого пришлось сходить в консоль (Portainer не может вносить изменения в конфигурацию стека, который был создан не им, а Traefik я поднимал из консоли) и аналогичным образом отредактировать docker-compose.yml:
Для проверки я зашел по адресу traefik.example.com. Чтобы удостоверится, что все работает как надо, мне пришлось открыть окно браузера в режиме инкогнито, иначе система меня узнавала и не спрашивала пароль, поскольку я ранее уже логинился для доступа к code-server и поэтому KeyCloak аутентифицировал меня автоматически.
Таким образом, при помощи связки KeyCloak и Traefik мне удалось защитить от несанкционированного доступа чувствительные элементы моей системы. Преимущество данного подхода в том, что он позволяет сделать это даже там, где не предусмотрены собственные механизмы аутентификации. Есть конечно и недостатки — KeyCloak достаточно тяжелый, занимает много ресурсов, в первую очередь памяти, да и по возможностям это явный overkill, мне скорее всего не потребуется большая часть того, что он умеет. В качестве альтернативы можно бы было использовать облачный сервис, например traefik-forward-auth имеет встроенную поддержку Google OAuth.
Выводы
В этой статье мы познакомились с набором инструментов, совместное использование которых позволяет во многом упростить и автоматизировать широкий спектр задач, которые возникают сегодня в практике многих ИТ-шников. Такие настройки, как:
Конечно, при настройке мне пришлось многое делать из консоли, но в дальнейшем, при повседневном использовании построенная система позволит мне сократить ее использование, что для меня несомненно плюс.
Когда я писал эту статью, главной сложностью было собрать всю необходимую информацию воедино. Многие вещи из документации неочевидны и зачастую чтобы добиться того, чтобы система заработала нужным образом приходилось искать решение проблемы по различным issues на github и вопросам со stackoverflow. Поэтому я постарался ряд моментов осветить более подробно, и надеюсь, кому-нибудь мои изыскания помогут лучше разобраться в описываемых продуктах.
Также искренне рассчитываю на конструктивную критику в комментариях, и идеи, как можно сделать то, что я попытался здесь реализовать, лучше. Например, очень хотелось бы найти более легковесную альтернативу KeyCloak, потому как он несколько тяжеловат для такого рода задач.
Для удобства файлы конфигураций я разместил в репозитории вот тут: https://github.com/debagger/vps-docker-workspace
Благодарю за внимание!
Облачные серверы от Маклауд быстрые и безопасные.
Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!