Хостим OneScript.Web приложение

Публикация № 855526

Разработка - Языки и среды - OneScript

28
Удобная возможность для размещения своего OneScript.Web приложение, это завернуть его в docker. Остается вопрос: где разместить контейнер, сделать это можно на vscale или DO, но хочется упростить и не делать установку самого docker на хосте. Один из вариантов - это сервис now https://zeit.co/.

Вводная

Сервис now позволяет хостить node.js, docker или статику и есть бесплатный план, на котором можно разместить до 3 инстансев. Для развертывания своего приложение как контейнер, достаточно добавить в проект файл Dockerfile такого содержания:

FROM evilbeaver/oscript-web:dev

COPY src /app

и потом в командной строке выполнить

now

Но лучше более развернуто сказать, что мы хотим

now /pach/to/project/ --docker --public --token MyToken --nane MyProjectName -l --regions bru1

в консоли нам будет написан адрес 3го уровня, по которому надо развернуть наше приложение. Адрес будет состоять из MyProjectName-НекийНаборСлучайныхСимволов.now.sh. При каждом развертывании у нас будет новый адрес приложения, но есть возможность назначить этот инстанс для домена в виде MyProjectName.now.sh. Для этого в консоли надо выполнить:

now alias --token MyToken set MyProjectName-НекийНаборСлучайныхСимволов.now.sh MyProjectName.now.sh

Помним, что на бесплатном плане у нас есть возможность развернуть только 3 инстраса, Что же делать с ранее развернутыми?

now rm --token MyToken MyProjectName -s -y

Этой командой мы скажем, что надо удалить все развертывания кроме того, которое привязано к основному домену, т.е то, что было установлено по команде now alias.

Также лучше отключить автоматическое скалирование приложения, так как одно развертывание может так же быть увеличено по количеству инстансев.

rem скажем что для региона sfo1 нам вообще не нужен скейл

now scale --token MyToken MyProjectName.now.sh sfo1 0 0

rem а для региона bru1 минимум 1 и максимум 1 инстанс

now scale --token MyToken MyProjectName.now.sh bru1 1 1

Если в приложении не предусмотрено, что данные между инстрасами приложения будут консистентны, лучше выполнить настройки, указанные выше.

В итоге мы получаем сервис, имеющий домен с защищенным сертификатом. Такое приложение можно использовать, например, для навыков Алисы, ботов и тому подобного.

У бесплатного плана есть еще ряд особенностей, весь код приложения доступен по адресу MyProjectName.now.sh/_src, там же можно увидеть лог работы приложения, лог также имеет ограничение, после определенного количества выводов информации в него, сообщения заменяются информацией о том, что лимит лога исчерпан и надо подумать о приобретении платного плана, зато ошибки, вызванные исключением, нормально выводятся даже несмотря на исчерпанный лимит. Еще неприятной особенностью является то, что инстанс уходит в режим сна после того, как в течение какого-то времени к нему никто не обращался, но после очередного обращения, сервис быстро пробуждается. Но пробуждается он в том состоянии, в котором был развернут, т.е. если в процессе работы были накоплены какие то данные в памяти или в файле, после ухода в сон и пробуждения, они будут потеряны.

Сквозной пример

Идея для примера взята из статьи Проверка билетов на сайте ФИФА на чемпионат мира 2018, адрес развернутого сервиса - https://tickets-fifa.now.sh, репозиторий проекта - https://gitlab.com/pallid/tickets-fifa.

Для начала надо решить проблему с засыпанием. Варианты:

  • периодически делать обращение к сервису самом
  • сделать задачу в планировщике
  • добавить приложение в систему для мониторинга
  • реализовать обращение внутри самого сервиса

Последние два варианта самое то, тем более если у нас несколько приложений в экосистеме, то предпоследний просто необходим. Но давайте сделаем последний вариант.

Предположим, что ранее уже была реализована задача для мониторинга, и приложение отвечает некой информацией по адресу https://tickets-fifa.now.sh/status

status

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

Процедура ВыполнитьНастройкиНезасыпания()

    СчетчикДляЗапросаСтатуса = 0;
    АдресПриложения = ПолучитьПеременнуюСреды("ADDRESS_APP");
    Если АдресПриложения = Неопределено Тогда
        АдресПриложения = "localhost";
    КонецЕсли;

    Лог.Информация("АДРЕС ПРИЛОЖЕНИЯ - %1", АдресПриложения);
    ПортПриложения = ПолучитьПеременнуюСреды("PORT_APP");
    Если ПортПриложения = Неопределено Тогда
        ПортПриложения = 5000;
    КонецЕсли;

    Лог.Информация("ПОРТ ПРИЛОЖЕНИЯ - %1", ПортПриложения);

КонецПроцедуры

далее в комадне развертывания указать эти переменные, добавив

-e ADDRESS_APP=https://MyProjectName.now.sh -e PORT_APP=443

так же в методе основного регламентного задания добавить вызов ПолезнаяНагрузкаДляНезасыпания()

Процедура ПолезнаяНагрузкаДляНезасыпания()

    СчетчикДляЗапросаСтатуса = НастройкиПриложения.СчетчикДляЗапросаСтатуса;
    Лог.Отладка("СчетчикДляЗапросаСтатуса - %1", СчетчикДляЗапросаСтатуса);

    Если СчетчикДляЗапросаСтатуса >= 30 Тогда
        Лог.Отладка("ПолезнаяНагрузкаДляНезасыпания - будет выполнен запрос статуса");
        ПолучитьСтатусПриложения();
        СчетчикДляЗапросаСтатуса = 0;
    КонецЕсли;

    СчетчикДляЗапросаСтатуса = СчетчикДляЗапросаСтатуса + 1;
    НастройкиПриложения.СчетчикДляЗапросаСтатуса = СчетчикДляЗапросаСтатуса;

КонецПроцедуры

Процедура ПолучитьСтатусПриложения() Экспорт

    Адрес = НастройкиПриложения.АдресПриложения;
    Порт = НастройкиПриложения.ПортПриложения;
    HTTPСоединение = Новый HTTPСоединение(Адрес, Порт);
    Ресурс = "/status";
    Запрос = Новый HTTPЗапрос;
    Запрос.АдресРесурса = Ресурс;
    Ответ = HTTPСоединение.Получить(Запрос);

    Результат = ОбщегоНазначения.ПрочитатьОтветЗапроса(Ответ);

КонецПроцедуры

Таким образом после каждых 30 итераций основного регламента будет выполнено получение статуса приложения, так как к нашему сервису будет постоянное обращение, приложение не уйдет в сон.

Непрерывная сборка и доставка

Рецепт для Gitlab-ci

image: "pallid/now-for-oscript:latest"

stages:
  - build
  - deploy
 
build:
  stage: build

  script:
  - grep '%ver' -P -R -I -l ./src/packagedef | xargs sed -i 's/%ver/'$CI_COMMIT_REF_NAME'/g'
  - mkdir ./build
  - opm build . -mf ./src/packagedef -out ./build
  - mv ./build/$CI_PROJECT_NAME-$CI_COMMIT_REF_NAME.ospx ./$CI_PROJECT_NAME-$CI_COMMIT_REF_NAME.ospx
  artifacts:
    name: "$CI_PROJECT_NAME-$CI_COMMIT_REF_NAME"
    paths:
    - $CI_PROJECT_NAME-$CI_COMMIT_REF_NAME.ospx
  only:
    - tags  

"deploy to now":
  stage: deploy
  variables:
    GIT_STRATEGY: none
  script:
  - opm install -f $CI_PROJECT_NAME-$CI_COMMIT_REF_NAME.ospx -dest .
  - cd ./$CI_PROJECT_NAME/src && opm install -l && cd ..
  - NOW_URL=$(now --docker -p --token ${NOW_TOKEN} -n ${CI_PROJECT_NAME} -l --regions bru1 -e ADDRESS_APP=https://${CI_PROJECT_NAME}.now.sh -e PORT_APP=443)
  - echo "app deploy to $NOW_URL"
  - echo "create alias for ${NOW_URL} to ${CI_PROJECT_NAME}.now.sh"
  - now ls ${CI_PROJECT_NAME} -t ${NOW_TOKEN} | head -6
  - now alias -t ${NOW_TOKEN} set ${NOW_URL} ${CI_PROJECT_NAME}.now.sh
  - now rm -t ${NOW_TOKEN} ${CI_PROJECT_NAME} -s -y
  artifacts:
    when: on_failure
    paths:
    - .
    expire_in: 1 day
  only:
    - tags  

При установке тега будет выполняться сборка пакета и его развертывание в now. Для работы взят образ “pallid/now-for-oscript:latest” на основе “evilbeaver/onescript:latest” с добавление cli для now. При развертывании будет выполнено переподключение домена к новому инстансу и удаление неиспользуемых.

 

UPD  от 23.08.2018

К сожалению данный вариант развертывания на сервисе now больше не пригоден, так как теперь в сервисе появились ограничения на размер образа. Максимальный размер 100mb, размер образа evilbeaver/oscript-web:dev ~190mb

28

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. Evil Beaver 6291 04.07.18 15:56 Сейчас в теме
Отдельное спасибо за пост по os.web

Небольшое уточнение:

https://gitlab.com/pallid/tickets-fifa/blob/master/src/main.os#L18

Вот тут у вас второй маршрут работать не будет, т.к. он перекрывается первым. Адрес /status подпадает под шаблон "{controller=home}/{action=index}", поскольку home - это значение по умолчанию. При переходе по адресу /status контроллер примет значение status и отдельный маршрут под него не нужен.

В остальном - классно, спасибо!
2. pallid 215 04.07.18 16:01 Сейчас в теме
(1) Большое спасибо за os.web

Понял, исправлю
ZhdanovR; +1 Ответить
3. pallid 215 23.08.18 12:48 Сейчас в теме
К сожалению данный вариант развертывания на сервисе now больше не пригоден, так как теперь в сервисе появились ограничения на размер образа. Максимальный размер 100mb, размер образа evilbeaver/oscript-web:dev ~190mb
SerebanSK; +1 Ответить
Оставьте свое сообщение

См. также

Автоматическое сравнение-объединение баз данных с мини-конфигурацией 2

Статья Программист Компонента, плагин (dll, vbs,..) v8 Windows Бесплатно (free) OneScript

Представляю вашему вниманию скрипт на OneScript для автоматического сравнения-объединения по правилам ("мержевания") конфигураций нескольких баз с мини-конфигурацией.

14.10.2019    343    artkor    2       

АИТП. Подсистема взаимодействия с рабочими серверами OneScript 20

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) OneScript

В статье описан механизм взаимодействия конфигурации АИТП с рабочими серверами OneScript.

22.05.2019    2922    blackhole321    33       

1Script.Web. Интернет-приложения на языке 1С 119

Статья Программист Нет файла v8 Бесплатно (free) WEB OneScript

Запросы рынка таковы, что любое современное клиент-серверное приложение должно иметь веб-интерфейс. Почему бы не писать такие приложения на языке 1С? Андрей Овсянкин расскажет о возможностях разработки веб-приложений на базе 1Script, рассмотрит перспективы этого направления и в качестве демонстрации покажет «боевое» веб-приложение на новом движке – кроссплатформенную консоль администрирования парка кластеров 1С.

20.05.2019    11633    Evil Beaver    32       

Создание высокодоступной фермы рабочих серверов OneScript в ОС Centos 7 12

Статья Системный администратор Программист Нет файла Linux Бесплатно (free) OneScript

В статье описана методика создания высокодоступной фермы рабочих серверов OneScript, для конфигурации АИТП.

14.05.2019    2514    blackhole321    0       

Разворачиваем рабочий сервер OneScript для конфигурации АИТП 26

Статья Системный администратор Программист Нет файла v8 Linux Бесплатно (free) OneScript

В статье описана методика развертывания рабочего сервера OneScript для конфигурации АИТП, на ОС CentOS 7.

09.05.2019    3639    blackhole321    0       

Хостим OneScript.Web приложение (heroku) 18

Статья Программист Нет файла Бесплатно (free) OneScript

Развертывание oscript.web в heroku.

19.12.2018    3970    pallid    4       

Добавляем онлайн-чат в web-приложение OneScript 16

Статья Программист Нет файла v8 Бесплатно (free) OneScript

В статье рассмотрено подключение онлайн-чата к web-приложению на основе http-сервисов OneScript

24.06.2018    5347    blackhole321    1       

Сказ про то, как я DevOps-ом занимался (OneScript, Deployka, Jenkins) 112

Статья Системный администратор Программист Нет файла v8 1cv8.cf ИТ-компания Бесплатно (free) OneScript DevOps Jenkins

Решаем задачу: автоматизировать обновление тестовых баз 1С из хранилища конфигурации при появлении в нём новых изменений. Данная статья родилась в муках хождения по граблям и поиска безопасного форватора среди подводных камней. Изложение постарался представить в виде инструкции для новичка, в которой собрал всё, с чем пришлось столкнуться. Сам я не DevOps-ер, ни на что не претендую, просто делюсь опытом :)

17.06.2018    14893    stas_ganiev    33       

Макеты в http-сервисах OneScript 10

Статья Программист Нет файла v8 Бесплатно (free) OneScript

В статье описана библиотека, реализующая механизм макетов в http-сервисах OneScript, аналогично платформе 1С:Предприятие.

03.06.2018    5801    blackhole321    1       

Перечисления в http-сервисах OneScript 7

Статья Программист Нет файла v8 Бесплатно (free) OneScript

В статье описывается библиотека, реализующая механизм перечислений в http-сервиах OneScript, аналогичный механизму платформы 1С:Предприятие

03.06.2018    5432    blackhole321    13       

Обработки в http-сервисах OneScript 11

Статья Системный администратор Программист Нет файла Бесплатно (free) OneScript

В статье описана библиотека, реализующая механизм обработок в http-сервисах OneScript.

25.05.2018    5605    blackhole321    0       

Расширенные методы загрузки внешних библиотек в http-сервисах OneScript 5

Статья Программист Нет файла Бесплатно (free) OneScript

В статье описаны расширенные методы загрузки внешних библиотек в http-сервисах OneScript на примере механизма фоновых заданий.

25.05.2018    5403    blackhole321    0       

Сборка, тестирование, доставка приложения на onescript с помощью gitlab-ci 33

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) OneScript

Сборка, тестирование, доставка приложения на onescript с помощью gitlab-ci на примере портирования на onescript функции daСклонение.

14.05.2018    9480    pallid    3       

OneScript в облаке или Развертываем http-сервис OneScript на хостинге 23

Статья Программист Нет файла Бесплатно (free) OneScript

В статье описан процесс развертывания web-приложения, созданного на базе http-сервисов OneScript на бесплатном хостинге.

05.05.2018    7199    blackhole321    0       

TMSSQL - работа с базами данных MS SQL Server в скриптах на OneScript и из командной строки 56

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) OneScript

Представляю вашему вниманию библиотеку TMSQL для работы с базами данных на MS SQL Server. Библиотека подключается в качестве модуля или класса в скрипты, написанные на OneScript, а также может работать как независимое консольное приложение.

26.04.2018    11195    Tavalik    22       

Развертывание http-сервиса OneScript на Raspberry Pi 26

Статья Системный администратор Нет файла Бесплатно (free) OneScript

В статье описан процесс настройки, а также процесс развертывания http-сервиса (web-приложения) OneScript на Raspbian (Raspberry Pi 2).

23.04.2018    8387    blackhole321    10       

Создаем свою библиотеку для OneScript 147

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) OneScript

Как упаковать свою библиотеку в пакет? Что такое загрузчик и зачем он нужен? Как вообще создать свою библиотеку? Разбираемся на примере.

06.03.2018    16783    nixel    35       

Развертывание http-сервиса (web-приложения) OneScript на Ubuntu Server 16.04 43

Статья Системный администратор Программист Нет файла Ubuntu Бесплатно (free) OneScript

В статье описан процесс настройки сервера, а также процесс развертывания http-сервиса (web-приложения) OneScript на Ubuntu Server 16.04

04.03.2018    12580    blackhole321    14       

Обзор имеющихся библиотек OneScript 299

Статья Системный администратор Программист Нет файла v8 Бесплатно (free) OneScript

Экосистема OneScript активно развивается. Количество пользователей данного интерпретатора и имеющихся библиотек неуклонно растет, количество решаемых проблем - тоже. Однако остро встает вопрос некоторой разобщенности и размазанности информации по имеющимся библиотекам, их функциональности и проблемам, которые они решают. Данная статья призвана навести порядок в этой теме.

14.11.2017    30721    nixel    85       

Начало работы с OneScript 136

Статья Системный администратор Программист Нет файла Бесплатно (free) OneScript

Краткая инструкция по установке и начале работы с OneScript. Пишу потому что сам много шишек набил, пока нашел все инструменты. В статье рассмотрены: 1) Установка OneScript. 2) Установка редактора кода. 3) Настройка редактора кода под OneScript. 4) Запуск скриптов из редактора кода 5) Полезные ссылки

18.10.2017    30382    DmitrySinichnikov    50       

С чего начать разработку скриптов на OneScript? Первые шаги 155

Статья Программист Нет файла Бесплатно (free) OneScript

После моего доклада на INFOSTART 2017 EVENT COMMUNITY ко мне многие обращались с таким вопросом: с чего начать разработку скриптов на OneScript? В этой статье привожу набор ссылок и некий порядок действий (как его вижу я) для людей, не знакомым с этим инструментом.

11.10.2017    21663    Tavalik    12       

Вебинтерфейс для OneScript и 1С 27

Статья Программист Нет файла v8 Россия Windows Бесплатно (free) OneScript

Пример создания вебинтерфейса для OneScript с использованием библиотеки UfaScript.osb

30.06.2017    11172    andreosh    7       

OneScript и Ajax. POST-запрос и мои дальнейшие планы с фантазиями о будущем 11

Статья Программист Нет файла v8 Россия Бесплатно (free) OneScript

Моя библиотека для OneScript (версия 3.0 от 09.06.2017 см.GitHab UfaScript) https://github.com/andreosh/UfaScript теперь позволяет посылать POST-запросы на сервер без использования сторонних библиотек типа jquery.

09.06.2017    15786    andreosh    3       

Как сделать OneScript объектно-ориентированным 10

Статья Программист Нет файла Россия Бесплатно (free) OneScript

Описание метода создания объектов на OneScript и метода передачи функции в качестве параметра.

16.04.2017    6801    andreosh    7