Скрипт в браузере (ttyd + file browser)

Средний рейтинг
Еще нет оценок
Мой рейтинг:

Всем привет.

Понадобилось сделать вот такое вот по работе, а именно запуск скрипта в окне браузера, а потом управлением выходными файлами из этого скрипта.

Делал с существующими ограничениями, т.к. невозможностью использования VPN, внешний доступ к скрипту и файлам.

Для этого нагуглил решения:

  • ttyd
  • file browser.

Рассмотрим их установку и настройку, а так же донастройку nginx. ОС — Ubuntu 20.04.6 LTS \ Ubuntu 24.0.4.6 LTS

Не забывайте про безопасность, а именно — ограничение доступа к ресурсу. Хотя бы минимальную связку, если всё это делается для внешнего доступа:

auth basic + fail2ban + ip access (при возможности).

Итак…

Начнем с TTYD.

Обновление репозитория и установка пакета:

Просмотр:

вывод:

Справка по ttyd:

ttyd

[свернуть]

Сделал скрипт для запуска моего скрипта и публикации порта — start_ttyd.sh:

—writable — у меня в скрипте есть интерактивные элементы и это для возможности их использования.

  • -p 7681 — ключ и порт для открытия
  • /home/[username]/start_script.sh — путь до скрипта (в качестве примера).

Сделаем его исполняемым:

Запустить скрипт. Теперь можно в браузере проверить доступность: http://[ip_address or FQDN]:7681

и в окне браузера должен отобразиться ваш скрипт.

Если работает, то отлично, если нет, то смотрите вывод — там все ошибки. Еще помогает такое — просмотр логирования в реальном времени:

Мне для постоянного доступа потребовалось создать сервисный файл:

с таким содержимым:

Обновление systemctl и включение сервиса:

или двумя командами:

Проверить состояние:

и вывод:

Мне это для того, что бы если сервер перезагрузится, то скрипт уже был запущен и доступен по web.

Настройка nginx:

Теперь перейдя по адресу https://[fqdn]/script/ — в окне браузера будет отображаться запущенный скрипт, с которым можно работать.

Здесь доступ разрешен только определенным  ip-адресам. В случае если адрес другой, то переадресовать на Яндекс.

Теперь 2-я часть. Управление файлами.

Используемый скрипт может как читать файл, так и записывать. Внешнему пользователю требовалось не только иметь возможность скачать, но и загрузить файл, удалить, скачать несколько файлов для один раз. В таком случае простая возможность публикации файлов через web-server Apache2\nginx мне не подходила.

Я воспользовался таким решением — file browser.

Установка:

Вывод:

Важно! При первом запуске создается файл filebrowser.db, т.ч. убедитесь что есть права на каталог и от какого польователя запускаете.

Иначае будет такая ошибка

Ниже будет расписан daemon-файл, после запуска которого может возникнуть эта ошибка из-за невозможности записать в него данные.

[свернуть]

Запуск в ручном режиме:

  • -r — каталог, в котором размещаются файлы,
  • -p 8080 — открыть порт с соответствующим номером,
  • -a — какой адрес слушать (тут только локальный для безопасности).
справка filebrowser

[свернуть]

После запуска будет сгенерирован пароль от учетной записи admin

Я перезапустил с локальным адресом для демонстрации скриншотов

Вводим логин — admin, и сгенерированный ранее пароль

В тестовом каталоге — my_files — я создал тестовые файлы и папки для наглядности. Их видно в интерфейсе.

а это в самой системе

[свернуть]

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

Не вижу смысла подробно всё это описывать, т.к. любой администратор в состоянии сам разобраться.

Теперь надо создать daemon-файл для управления filebrowser. Ну что бы после перезагрузки он сам поднимался и т.п.

Вот мой файл — /etc/systemd/system/filebrowser.service

содержимое файла:

Все параметры заданы для примера, у вас должны быть свои. И не забывайте про права доступа — rwx — на файлы и каталоги filebrowser и предоставляемых для доступа.

Обновление systemct daemon и активация серсвиса:

Узнать расположение бинарного файла можно такой командой:

Теперь моя конфигурация.

Filebrowser  у меня запущен как сервис выше. Далее, что бы те, кому нужен доступ, могли получить доступ я добавил на внешний nginx в конфиг работающего сайта вот такую локацию (location):

Теперь они могут зайти по адресу:  https://[fqdn]/my_files/ и увидеть страницу с filebrowser.

Это я привел в качестве примера, т.к. такое было требование из-за невозможности использовать VPN, что было бы намного правильнее и безопаснее.

Тут есть ограничение по ip-адресу для этой локации, но еще есть выше уровнем доступ по сертификату. Т.е. сначала запрашивается сертификат, потом проверяются адреса доступа. Если всё совпадает, то доступ предоставляется, если нет — редирект на Яндекс.

Все настройки приведены для примера, вы устанавливаете свои.

Файл:

zip-архив установочного файла file browser — file_browser_get_sh

 

 

 

 

 

 

 

 

 

If you found an error, highlight it and press Shift + Enter or to inform us.

Дмитрий

родился, учился, работаю-учусь

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии