mirror of
https://github.com/Segate-ekb/publicator.git
synced 2024-11-16 09:58:27 +02:00
initial commit
This commit is contained in:
parent
d852634783
commit
2f6e75c8ee
25
build-publikator.sh
Normal file
25
build-publikator.sh
Normal file
@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD $DOCKER_USERNAME
|
||||
|
||||
if [ $DOCKER_SYSTEM_PRUNE = 'true' ] ; then
|
||||
docker system prune -af
|
||||
fi
|
||||
|
||||
last_arg='.'
|
||||
if [ $NO_CACHE = 'true' ] ; then
|
||||
last_arg='--no-cache .'
|
||||
fi
|
||||
|
||||
docker build \
|
||||
--pull \
|
||||
--build-arg ONEC_USERNAME=$ONEC_USERNAME \
|
||||
--build-arg ONEC_PASSWORD=$ONEC_PASSWORD \
|
||||
--build-arg ONEC_VERSION=$ONEC_VERSION \
|
||||
--build-arg DOCKER_USERNAME=$DOCKER_USERNAME \
|
||||
-t $DOCKER_USERNAME/publicator:$ONEC_VERSION \
|
||||
-f webserver/Dockerfile \
|
||||
$last_arg
|
||||
|
||||
docker push $DOCKER_USERNAME/publicator:$ONEC_VERSION
|
11
docker-compose.yaml
Normal file
11
docker-compose.yaml
Normal file
@ -0,0 +1,11 @@
|
||||
version: '3.3'
|
||||
|
||||
services:
|
||||
publikator:
|
||||
image: 192.168.1.53:5000/publicator:8.3.20.2180
|
||||
ports:
|
||||
- 998:80
|
||||
- 3333:3333
|
||||
volumes:
|
||||
- ./volumes/config.json:/opt/app/winow/config/config.json
|
||||
- ./volumes/autumn-properties.json:/opt/app/winow/autumn-properties.json
|
16
volumes/autumn-properties.json
Normal file
16
volumes/autumn-properties.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"winow": {
|
||||
"КаталогСПриложениями": "./controls",
|
||||
"Порт": 3333,
|
||||
"ЗадержкаПередЧтениемСокета": 65,
|
||||
"КаталогиСФайлами": {
|
||||
"/assets": "./view/assets"
|
||||
}
|
||||
},
|
||||
"Публикатор": {
|
||||
"КаталогПубликаций": "var/www/1C/",
|
||||
"КаталогАпач": "/usr/local/apache2/",
|
||||
"ПутьК1С": "/opt/1cv8/current/",
|
||||
"ПутьККонфигу": "./config/config.json"
|
||||
}
|
||||
}
|
85
volumes/config.json
Normal file
85
volumes/config.json
Normal file
@ -0,0 +1,85 @@
|
||||
{
|
||||
"bases": [
|
||||
{
|
||||
"Srvr": "mainframe",
|
||||
"Ref": "tg_bot",
|
||||
"publications": [
|
||||
{
|
||||
"name": "test4",
|
||||
"enable": true,
|
||||
"enableStandardOData": false,
|
||||
"ws": {
|
||||
"publishExtensionsByDefault": false,
|
||||
"wsList": [
|
||||
{
|
||||
"name": "API_ESB",
|
||||
"alias": "servicesdatastream",
|
||||
"enable": "true",
|
||||
"reuseSessions": "autouse",
|
||||
"sessionMaxAge": "20",
|
||||
"poolSize": "10",
|
||||
"poolTimeout": "5"
|
||||
}
|
||||
]
|
||||
},
|
||||
"httpServices": {
|
||||
"publishExtensionsByDefault": true,
|
||||
"publishByDefault": false,
|
||||
"hsList": [
|
||||
{
|
||||
"name": "telegram",
|
||||
"rootUrl": "telegram",
|
||||
"enable": "true",
|
||||
"reuseSessions": "autouse",
|
||||
"sessionMaxAge": "20",
|
||||
"poolSize": "10",
|
||||
"poolTimeout": "5"
|
||||
},
|
||||
{
|
||||
"name": "API_ESB2",
|
||||
"rootUrl": "servicesdatastream2",
|
||||
"enable": "true",
|
||||
"reuseSessions": "autouse",
|
||||
"sessionMaxAge": "20",
|
||||
"poolSize": "10",
|
||||
"poolTimeout": "5"
|
||||
}
|
||||
]
|
||||
},
|
||||
"oidc": {
|
||||
"providers": [
|
||||
{
|
||||
"name": "authelia",
|
||||
"title": "Authelia",
|
||||
"authenticationClaimName": "email",
|
||||
"icon": "https://www.authelia.com/images/branding/logo-cropped.png",
|
||||
"providerconfig": {
|
||||
"issuer": "https://auth.1cdevelopers.ru",
|
||||
"authorization_endpoint": "https://auth.1cdevelopers.ru/api/oidc/authorization",
|
||||
"token_endpoint": "https://auth.1cdevelopers.ru/api/oidc/token",
|
||||
"jwks_uri": "https://auth.1cdevelopers.ru/jwks.json",
|
||||
"userinfo_endpoint": "https://auth.1cdevelopers.ru/api/oidc/userinfo",
|
||||
"response_types_supported": [
|
||||
"token id_token"
|
||||
],
|
||||
"scopes_supported": [
|
||||
"openid",
|
||||
"email",
|
||||
"profile"
|
||||
]
|
||||
},
|
||||
"clientconfig": {
|
||||
"authority": "https://auth.1cdevelopers.ru/api/oidc/authorization",
|
||||
"client_id": "tg_bot",
|
||||
"redirect_uri": "https://1c.1cdevelopers.ru/tg_bot/authform.html",
|
||||
"response_type": "token id_token",
|
||||
"scope": "openid email"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
159
webserver/Dockerfile
Normal file
159
webserver/Dockerfile
Normal file
@ -0,0 +1,159 @@
|
||||
FROM alpine:latest as downloader
|
||||
|
||||
ARG ONEC_USERNAME
|
||||
ARG ONEC_PASSWORD
|
||||
ARG ONEC_VERSION
|
||||
ENV installer_type=server
|
||||
ENV downloads=downloads/platform83/${ONEC_VERSION}
|
||||
ENV RAS_PORT=1545
|
||||
ENV RAS_CLUSTER_ADDRESS=''
|
||||
ENV SRV1CV8_KEYTAB=/opt/1cv8/x86_64/${ONEC_VERSION}/usr1cv8.keytab
|
||||
ENV SRV1CV8_PORT=1540
|
||||
ENV SRV1CV8_REGPORT=1541
|
||||
ENV SRV1CV8_RANGE=1560:1591
|
||||
ENV SRV1CV8_DEBUG=-debug
|
||||
ENV SRV1CV8_DATA=/home/usr1cv8/.1cv8/1C/1cv8
|
||||
ENV SRV1CV8_SECLEV=0
|
||||
ENV SRV1CV8_PINGPERIOD=1000
|
||||
ENV SRV1CV8_PINGTIMEOUT=5000
|
||||
|
||||
COPY ./webserver/scripts/download_og.sh /download_og.sh
|
||||
|
||||
WORKDIR /tmp
|
||||
COPY ./webserver/distr ./${downloads}
|
||||
RUN rm ./${downloads}/.gitkeep
|
||||
RUN rm -rf ${downloads}/thin.client*.tar.gz
|
||||
RUN rm -rf ${downloads}/client*.tar.gz
|
||||
RUN rm -rf ${downloads}/1c_edt*.tar.gz
|
||||
RUN if [ -z "$(ls -A ${downloads})" ]; then \
|
||||
apk --no-cache add bash curl grep tar \
|
||||
&& set -x \
|
||||
&& sync; /download_og.sh; \
|
||||
fi
|
||||
RUN rm -rf ${downloads}/*thin*.tar.gz
|
||||
#RUN ls ${downloads} \
|
||||
# && for file in ${downloads}/*.tar.gz; do \
|
||||
# tar -xzf "$file" ; done
|
||||
RUN tar -xzf ${downloads}/${ONEC_VERSION}.tar.gz
|
||||
RUN rm -rf ${downloads}/*.*
|
||||
|
||||
FROM ubuntu:20.04 as base
|
||||
|
||||
# Указываем рабочий каталог и копируем конфигурационный файл раскладки
|
||||
WORKDIR /opt/1c-server/
|
||||
ADD ./webserver/selections.conf ./selections.conf
|
||||
# Устанавливаем первый пакет зависимостей
|
||||
RUN apt-get update && apt-get install -yq procps tzdata debconf-utils curl fontconfig unixodbc ttf-mscorefonts-installer libgsf-1-114 keyboard-configuration
|
||||
# Настраиваем временную зону и раскладку клавиатуры (иначе повиснем на процессе установки)
|
||||
RUN ln -fs /usr/share/zoneinfo/Europe/Moscow /etc/localtime && debconf-set-selections < selections.conf
|
||||
RUN dpkg-reconfigure -f noninteractive tzdata
|
||||
RUN dpkg-reconfigure -f noninteractive keyboard-configuration
|
||||
# Устанавливаем оставшиеся зависимости
|
||||
RUN apt-get install -yq geoclue-2.0 gstreamer1.0-plugins-bad
|
||||
# Правим локаль на русскую
|
||||
RUN export LANG=ru_RU.UTF-8
|
||||
|
||||
ARG ONEC_VERSION
|
||||
ENV installer_type=server
|
||||
ARG gosu_ver=1.11
|
||||
ARG nls_enabled=false
|
||||
ENV nls=$nls_enabled
|
||||
|
||||
COPY ./webserver/scripts/install.sh /install.sh
|
||||
COPY --from=downloader /tmp/*.* /tmp/
|
||||
WORKDIR /tmp
|
||||
|
||||
SHELL ["/bin/bash", "-c"]
|
||||
RUN ls . \
|
||||
&& chmod +x /install.sh \
|
||||
&& sync; /install.sh
|
||||
|
||||
# create symlink to current 1c:enterprise directory
|
||||
COPY ./webserver/scripts/create-symlink-to-current-1cv8.sh /create-symlink-to-current-1cv8.sh
|
||||
RUN chmod +x /create-symlink-to-current-1cv8.sh \
|
||||
&& /create-symlink-to-current-1cv8.sh \
|
||||
&& rm /create-symlink-to-current-1cv8.sh
|
||||
|
||||
ADD https://github.com/tianon/gosu/releases/download/$gosu_ver/gosu-amd64 /bin/gosu
|
||||
|
||||
RUN chmod +x /bin/gosu
|
||||
|
||||
FROM httpd:2.4
|
||||
|
||||
ARG onec_uid="999"
|
||||
ARG onec_gid="999"
|
||||
|
||||
COPY --from=base /opt /opt
|
||||
COPY --from=base /bin/gosu /bin/gosu
|
||||
|
||||
RUN set -xe \
|
||||
&& apt-get update \
|
||||
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||||
locales \
|
||||
imagemagick \
|
||||
fontconfig \
|
||||
&& rm -rf \
|
||||
/var/lib/apt/lists/* \
|
||||
/var/cache/debconf \
|
||||
&& localedef -i ru_RU -c -f UTF-8 -A /usr/share/locale/locale.alias ru_RU.UTF-8
|
||||
ENV LANG ru_RU.UTF-8
|
||||
|
||||
RUN groupadd -r grp1cv8 --gid=$onec_gid \
|
||||
&& useradd -r -g grp1cv8 --uid=$onec_uid --home-dir=/home/usr1cv8 --shell=/bin/bash usr1cv8 \
|
||||
&& mkdir -p /var/log/1C /home/usr1cv8/.1cv8/1C/1cv8/conf /opt/1cv8/current/conf \
|
||||
&& chown -R usr1cv8:grp1cv8 /var/log/1C /home/usr1cv8
|
||||
|
||||
ARG MONO_VERSION=6.12.0.122
|
||||
|
||||
RUN apt-get update \
|
||||
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||||
ca-certificates \
|
||||
gnupg \
|
||||
dirmngr \
|
||||
wget \
|
||||
&& apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF \
|
||||
&& echo "deb http://download.mono-project.com/repo/debian stable-buster main" > /etc/apt/sources.list.d/mono-official-stable.list \
|
||||
&& apt-get update \
|
||||
&& DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
|
||||
mono-runtime \
|
||||
ca-certificates-mono \
|
||||
libmono-i18n4.0-all \
|
||||
libmono-system-runtime-serialization4.0-cil \
|
||||
&& rm -rf /etc/apt/sources.list.d/mono-official-stable.list \
|
||||
&& apt-get update \
|
||||
&& cert-sync --user /etc/ssl/certs/ca-certificates.crt \
|
||||
&& rm -rf \
|
||||
/var/lib/apt/lists/* \
|
||||
/var/cache/debconf \
|
||||
/tmp/*
|
||||
|
||||
# Installing oscript
|
||||
ARG OVM_REPOSITORY_OWNER=oscript-library
|
||||
ARG OVM_VERSION=v1.0.0-RC16
|
||||
ARG ONESCRIPT_VERSION=stable
|
||||
ARG ONESCRIPT_PACKAGES="autumn winow json autumn-logos"
|
||||
|
||||
RUN wget https://github.com/${OVM_REPOSITORY_OWNER}/ovm/releases/download/${OVM_VERSION}/ovm.exe \
|
||||
&& mv ovm.exe /usr/local/bin/ \
|
||||
&& echo 'mono /usr/local/bin/ovm.exe "$@"' | tee /usr/local/bin/ovm \
|
||||
&& chmod +x /usr/local/bin/ovm \
|
||||
&& ovm use --install ${ONESCRIPT_VERSION}
|
||||
|
||||
ENV OSCRIPTBIN=/root/.local/share/ovm/current/bin
|
||||
ENV PATH="$OSCRIPTBIN:$PATH"
|
||||
|
||||
# Update and prepare oscript packages
|
||||
RUN opm install opm \
|
||||
&& opm update --all \
|
||||
&& opm install ${ONESCRIPT_PACKAGES}
|
||||
|
||||
COPY ./webserver/docker-entrypoint.sh /winow/
|
||||
COPY ./webserver/app /opt/app/winow/
|
||||
|
||||
RUN chmod 755 /winow/docker-entrypoint.sh \
|
||||
&& chmod +x /winow/docker-entrypoint.sh
|
||||
|
||||
ENTRYPOINT ["/winow/docker-entrypoint.sh"]
|
||||
|
||||
EXPOSE 80
|
||||
EXPOSE 3333
|
72
webserver/app/controls/api_v1.os
Normal file
72
webserver/app/controls/api_v1.os
Normal file
@ -0,0 +1,72 @@
|
||||
&Пластилин Перем УправлениеКонфигурацией;
|
||||
&Пластилин Перем АпачУправлятор;
|
||||
&Пластилин Перем АпачМодификаторКонфига;
|
||||
&ЛогПубликатора Перем Лог;
|
||||
|
||||
&Контроллер("/api/v1/")
|
||||
Процедура ПриСозданииОбъекта()
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&ТочкаМаршрута("getconfig.json")
|
||||
Процедура ПолучитьКонфиг(Ответ) Экспорт
|
||||
JsonСтрока = УправлениеКонфигурацией.ВернутьТекстКонфига();
|
||||
Ответ.УстановитьТипКонтента("json");
|
||||
Ответ.ТелоТекст = JsonСтрока;
|
||||
Ответ.заголовки.Вставить("Access-Control-Allow-Origin", "*");
|
||||
Ответ.УстановитьСостояниеОК();
|
||||
КонецПроцедуры
|
||||
|
||||
&ТочкаМаршрута("updateconfig")
|
||||
Процедура ПерезаписатьКонфиг(Запрос, ТелоЗапросОбъект, Ответ) Экспорт
|
||||
Если не Запрос.Метод = "POST" Тогда
|
||||
Ответ.Модель = Новый Структура();
|
||||
Ответ.Модель.Вставить("КодСостояния", 405);
|
||||
Ответ.Модель.Вставить("ТекстСообщения", "Недопустимый метод!");
|
||||
Ответ.Модель.Вставить("Запрос", Запрос);
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если не ЗначениеЗаполнено(ТелоЗапросОбъект) Тогда
|
||||
Лог.Ошибка("Некорректно заполнено тело запроса. Ожидается Json!");
|
||||
Ответ.Модель = Новый Структура();
|
||||
Ответ.Модель.Вставить("КодСостояния", 400);
|
||||
Ответ.Модель.Вставить("ТекстСообщения", "Некорректно заполнено тело запроса. Ожидается Json!");
|
||||
Ответ.Модель.Вставить("Запрос", Запрос);
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
УправлениеКонфигурацией.ЗаписатьКонфиг(Запрос.Тело);
|
||||
АпачМодификаторКонфига.ОпубликоватьБазы(УправлениеКонфигурацией.ПрочитатьКонфиг());
|
||||
Ответ.заголовки.Вставить("Access-Control-Allow-Origin", "*");
|
||||
Ответ.УстановитьСостояниеОК();
|
||||
Исключение
|
||||
Лог.Ошибка("Что-то пошло не так при записи json в базу!");
|
||||
Ответ.Модель = Новый Структура();
|
||||
Ответ.Модель.Вставить("КодСостояния", 500);
|
||||
Ответ.Модель.Вставить("ТекстСообщения", "Что-то пошло не так при записи json в базу!");
|
||||
Ответ.Модель.Вставить("Запрос", Запрос);
|
||||
Возврат;
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&ТочкаМаршрута("ws/start")
|
||||
Процедура Старт(Ответ) Экспорт
|
||||
АпачУправлятор.ЗапуститьАпач();
|
||||
Ответ.УстановитьСостояниеОК();
|
||||
КонецПроцедуры
|
||||
|
||||
&ТочкаМаршрута("ws/stop")
|
||||
Процедура Стоп(Ответ) Экспорт
|
||||
АпачУправлятор.ОстановитьАпач();
|
||||
Ответ.УстановитьСостояниеОК();
|
||||
КонецПроцедуры
|
||||
|
||||
&ТочкаМаршрута("ws/restart")
|
||||
Процедура Рестарт(Ответ) Экспорт
|
||||
АпачУправлятор.ПерезапуститьАпач();
|
||||
Ответ.УстановитьСостояниеОК();
|
||||
КонецПроцедуры
|
||||
|
20
webserver/app/controls/Индекс.os
Normal file
20
webserver/app/controls/Индекс.os
Normal file
@ -0,0 +1,20 @@
|
||||
&Пластилин Перем МенеджерОтображений Экспорт;
|
||||
|
||||
&Контроллер("/")
|
||||
Процедура ПриСозданииОбъекта()
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПолучитьМодельКонтрола() Экспорт
|
||||
Модель = Новый Структура("Заголовок", "Минималистичный веб сервер WINOW");
|
||||
|
||||
Возврат Модель;
|
||||
КонецФункции
|
||||
|
||||
&ТочкаМаршрута("")
|
||||
&Отображение("./view/index.html")
|
||||
Процедура Главная(Ответ) Экспорт
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
8
webserver/app/main.os
Normal file
8
webserver/app/main.os
Normal file
@ -0,0 +1,8 @@
|
||||
#Использовать autumn
|
||||
#Использовать winow
|
||||
#Использовать autumn-logos
|
||||
#Использовать "."
|
||||
|
||||
Поделка = Новый Поделка;
|
||||
Поделка.ПросканироватьКаталог(ОбъединитьПути(ТекущийКаталог(), "Классы"));
|
||||
Поделка.ЗапуститьПриложение();
|
6
webserver/app/view/assets/dist/css/bootstrap.min.css
vendored
Normal file
6
webserver/app/view/assets/dist/css/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
webserver/app/view/assets/dist/css/bootstrap.min.css.map
vendored
Normal file
1
webserver/app/view/assets/dist/css/bootstrap.min.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
6
webserver/app/view/assets/dist/css/bootstrap.rtl.min.css
vendored
Normal file
6
webserver/app/view/assets/dist/css/bootstrap.rtl.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
webserver/app/view/assets/dist/css/bootstrap.rtl.min.css.map
vendored
Normal file
1
webserver/app/view/assets/dist/css/bootstrap.rtl.min.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
7
webserver/app/view/assets/dist/js/bootstrap.bundle.min.js
vendored
Normal file
7
webserver/app/view/assets/dist/js/bootstrap.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
webserver/app/view/assets/dist/js/bootstrap.bundle.min.js.map
vendored
Normal file
1
webserver/app/view/assets/dist/js/bootstrap.bundle.min.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
206
webserver/app/view/index.html
Normal file
206
webserver/app/view/index.html
Normal file
@ -0,0 +1,206 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="">
|
||||
|
||||
<title>1С Публикатор</title>
|
||||
|
||||
<link href="/assets/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.0/css/all.min.css">
|
||||
|
||||
<style>
|
||||
html,
|
||||
body{
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.bd-placeholder-img {
|
||||
font-size: 1.125rem;
|
||||
text-anchor: middle;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.bd-placeholder-img-lg {
|
||||
font-size: 3.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.b-example-divider {
|
||||
height: 3rem;
|
||||
background-color: rgba(0, 0, 0, .1);
|
||||
border: solid rgba(0, 0, 0, .15);
|
||||
border-width: 1px 0;
|
||||
box-shadow: inset 0 .5em 1.5em rgba(0, 0, 0, .1), inset 0 .125em .5em rgba(0, 0, 0, .15);
|
||||
}
|
||||
|
||||
.b-example-vr {
|
||||
flex-shrink: 0;
|
||||
width: 1.5rem;
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
.bi {
|
||||
vertical-align: -.125em;
|
||||
fill: currentColor;
|
||||
}
|
||||
|
||||
.nav-scroller {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
height: 2.75rem;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
|
||||
.nav-scroller .nav {
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
padding-bottom: 1rem;
|
||||
margin-top: -1px;
|
||||
overflow-x: auto;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
#logo {
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
#editor {
|
||||
display: flex;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main>
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark" aria-label="Fifth navbar example">
|
||||
<div class="container-fluid">
|
||||
<img id="logo" src="https://www.tadviser.ru/images/7/76/1%D0%A1_%D0%9B%D0%9E%D0%93%D0%9E_PNG.png"
|
||||
alt="1C Logo">
|
||||
<a class="navbar-brand">Публикатор 1с</a>
|
||||
|
||||
<div class="collapse navbar-collapse" id="navbarsExample05">
|
||||
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" id="reload"><i class="fas fa-redo"></i> Обновить</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" id="submit"><i class="fas fa-save"></i> Сохранить конфигурацию</a>
|
||||
</li>
|
||||
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown"
|
||||
aria-expanded="false">Управление web-сервером</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a class="dropdown-item" id="restart"><i class="fas fa-sync-alt"></i>
|
||||
Перезапустить</a></li>
|
||||
<li><a class="dropdown-item" id="start"><i class="fas fa-play"></i> Запустить</a></li>
|
||||
<li><a class="dropdown-item" id="stop"> <i class="fas fa-stop"></i> Остановить</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</main>
|
||||
|
||||
<div id="editor"></div>
|
||||
|
||||
<script src="/assets/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="https://unpkg.com/monaco-editor@0.28.0/min/vs/loader.js"></script>
|
||||
<script>
|
||||
require.config({
|
||||
paths: {
|
||||
'vs': 'https://unpkg.com/monaco-editor@0.28.0/min/vs'
|
||||
}
|
||||
});
|
||||
|
||||
require(['vs/editor/editor.main'], function () {
|
||||
// Initialize the Monaco Editor
|
||||
const editor = monaco.editor.create(document.getElementById('editor'), {
|
||||
language: 'json',
|
||||
theme: 'vs-dark'
|
||||
});
|
||||
|
||||
// Load JSON from the API
|
||||
async function loadJSON() {
|
||||
const response = await fetch('./api/v1/getconfig.json');
|
||||
const data = await response.text();
|
||||
editor.setValue(data);
|
||||
}
|
||||
|
||||
// Post JSON to the API
|
||||
async function postJSON(json) {
|
||||
const response = await fetch('./api/v1/updateconfig', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: json
|
||||
});
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
// Add click event listener to the submit button
|
||||
document.getElementById('submit').addEventListener('click', async () => {
|
||||
if (confirm('Вы уверены, что хотите сохранить конфигурацию?')) {
|
||||
const json = editor.getValue();
|
||||
try {
|
||||
const response = await postJSON(json);
|
||||
if (response.ok) {
|
||||
if (confirm('Конфигурация успешно сохранена! \n Перезапустить веб-сервер?')) {
|
||||
await fetch('./api/v1/ws/restart');
|
||||
}
|
||||
} else {
|
||||
alert('Ошибка при сохранении конфигурации!');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error:', error);
|
||||
alert('Ошибка при сохранении конфигурации!');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Add click event listener to the reload button
|
||||
document.getElementById('reload').addEventListener('click', async () => {
|
||||
if (confirm('Вы уверены, что хотите обновить конфигурацию? Это заменит текущую конфигурацию в редакторе.')) {
|
||||
await loadJSON();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// Add click event listeners to the web server control buttons
|
||||
document.getElementById('restart').addEventListener('click', async () => {
|
||||
await fetch('./api/v1/ws/restart');
|
||||
});
|
||||
|
||||
document.getElementById('start').addEventListener('click', async () => {
|
||||
await fetch('./api/v1/ws/start');
|
||||
});
|
||||
|
||||
document.getElementById('stop').addEventListener('click', async () => {
|
||||
await fetch('./api/v1/ws/stop');
|
||||
});
|
||||
|
||||
// Load JSON on startup
|
||||
loadJSON();
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
278
webserver/app/Классы/АпачМодификаторКонфига.os
Normal file
278
webserver/app/Классы/АпачМодификаторКонфига.os
Normal file
@ -0,0 +1,278 @@
|
||||
#Использовать json
|
||||
&Пластилин Перем ШаблоныФайловКонфига;
|
||||
&Пластилин Перем ФайловыеОперации;
|
||||
&Пластилин Перем НастройкиПубликатора;
|
||||
&ЛогПубликатора Перем Лог;
|
||||
|
||||
|
||||
|
||||
&Желудь
|
||||
Процедура ПриСозданииОбъекта()
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПервоначальныеНастройкиАпач() Экспорт
|
||||
Лог.Отладка("Приступаем к инициализации первоначальных настроек Апач");
|
||||
|
||||
Лог.Отладка("Проверим наличие подключения нашего блока в текущей конфигурации апач");
|
||||
ДобавляемаяСтрока = СтрШаблон("Include conf/1C/base_onec_implment.conf");
|
||||
|
||||
ПутьКhttpdConf = ОбъединитьПути(НастройкиПубликатора.КаталогАпач,"conf", "httpd.conf");
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКhttpdConf);
|
||||
|
||||
Если СтрНайти(СодержимоеФайла, ДобавляемаяСтрока) = 0 Тогда
|
||||
Лог.Отладка("Не найдено упоминание конфига 1с в файле конфигурации, добавим");
|
||||
СодержимоеФайла = СодержимоеФайла+Символы.ПС+ДобавляемаяСтрока;
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ПутьКhttpdConf, СодержимоеФайла);
|
||||
КонецЕсли;
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОпубликоватьБазы(ОписаниеБаз) Экспорт
|
||||
Лог.Информация("Приступаем к публикации баз");
|
||||
СоздатьОбновитьbase_onec_implment();
|
||||
Для каждого ОписаниеБазы Из ОписаниеБаз.bases Цикл
|
||||
ОпубликоватьБазу(ОписаниеБазы);
|
||||
КонецЦикла;
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОпубликоватьБазу(СтруктураБазыДляПубликации) Экспорт
|
||||
СтрокаПодключенияКБД = СтрШаблон("Srvr=%1;Ref=%2",
|
||||
СтруктураБазыДляПубликации.Srvr,
|
||||
СтруктураБазыДляПубликации.Ref);
|
||||
Лог.Информация("Обрабатываем базу ""%1""", СтрокаПодключенияКБД);
|
||||
|
||||
Для каждого Публикация Из СтруктураБазыДляПубликации.publications Цикл
|
||||
Лог.Информация("Обрабатываем публикацию ""%1""", Публикация.name);
|
||||
СоздатьDefaultVrd(Публикация, СтрокаПодключенияКБД);
|
||||
СоздатьКонфигПубликации(Публикация.name);
|
||||
КонецЦикла;
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СоздатьОбновитьbase_onec_implment()
|
||||
Лог.Отладка("Проверим существование base_onec_implment.conf в текущей конфигурации апач");
|
||||
|
||||
ПутьККонфигу = ОбъединитьПути(НастройкиПубликатора.КаталогАпач,"conf","1C", "base_onec_implment.conf");
|
||||
|
||||
Лог.Отладка("Не найдено конфига 1с base_onec_implment.conf добавим его");
|
||||
СоздатьКаталог(ОбъединитьПути(НастройкиПубликатора.КаталогАпач,"conf","1C"));
|
||||
ИмяМодуля = ?(НастройкиПубликатора.ЭтоLinux, "wsap24.so", "wsap24.dll");
|
||||
ПутьКМодулю = ОбъединитьПути(НастройкиПубликатора.ПутьК1С, ИмяМодуля);
|
||||
|
||||
ШаблонКонфига = ШаблоныФайловКонфига.base_onec_config();
|
||||
СодержимоеФайла = СтрШаблон(ШаблонКонфига, ПутьКМодулю);
|
||||
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ПутьККонфигу, СодержимоеФайла);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СоздатьDefaultVrd(Публикация, СтрокаПодключенияКБД)
|
||||
Лог.Отладка("Приступаем к созданию vrd файла");
|
||||
|
||||
ДобавитьИнформациюОПользователеВСтрокуПодключенияКБД(СтрокаПодключенияКБД, Публикация);
|
||||
|
||||
РазрешитьЛогин = ПолучитьСтрокуРазрешитьЛогин(Публикация);
|
||||
ТекстСекцииWs = ЗаполнитьТекстСекцииWS(Публикация);
|
||||
ТекстСекцииHs = ЗаполнитьТекстСекцииhttpServices(Публикация);
|
||||
ТекстСекцииOIDC = ЗаполнитьТекстOIDC(Публикация);
|
||||
|
||||
|
||||
ШаблонVrd = ШаблоныФайловКонфига.defaultVrd();
|
||||
ТекстVrd = СтрШаблон(ШаблонVrd,
|
||||
Публикация.name,
|
||||
СтрокаПодключенияКБД,
|
||||
РазрешитьЛогин,
|
||||
ТекстСекцииWs,
|
||||
ТекстСекцииHs,
|
||||
ТекстСекцииOIDC);
|
||||
ИмяКаталога = "/"+ОбъединитьПути(НастройкиПубликатора.КаталогПубликаций, Публикация.name);
|
||||
СоздатьКаталог(ИмяКаталога);
|
||||
ПутьКФайлу = "/"+ОбъединитьПути(ИмяКаталога, "default.vrd");
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ПутьКФайлу, ТекстVrd);
|
||||
Лог.Информация("Создан vrd файл публикации. Путь к файлу: %1", ПутьКФайлу);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СоздатьКонфигПубликации(ИмяПубликации)
|
||||
Лог.Отладка("Приступаем к созданию conf файла");
|
||||
КаталогПубликации = ОбъединитьПути(НастройкиПубликатора.КаталогПубликаций, ИмяПубликации);
|
||||
ПутьКDefaultVrd = ОбъединитьПути(КаталогПубликации, "default.vrd");
|
||||
ТекстКонфига = СтрШаблон(ШаблоныФайловКонфига.КонфигПубликации(), ИмяПубликации, КаталогПубликации, ПутьКDefaultVrd);
|
||||
|
||||
ИмяФайла = СтрШаблон("%1.conf", ИмяПубликации);
|
||||
ОтносительныйКусокПути = ОбъединитьПути("conf","1C");
|
||||
ПутьКФайлу = ОбъединитьПути(НастройкиПубликатора.КаталогАпач, ОтносительныйКусокПути,ИмяФайла);
|
||||
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ПутьКФайлу, ТекстКонфига);
|
||||
Лог.Информация("Создан conf файл публикации. Путь к файлу: %1", ПутьКФайлу);
|
||||
|
||||
ДобавитьЗаписьBase_onec_implement(ОтносительныйКусокПути, ИмяФайла);
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДобавитьЗаписьBase_onec_implement(ОтносительныйКусокПути, ИмяФайла)
|
||||
Лог.Отладка("Приступаем к модификации файла со списком конфигураций");
|
||||
|
||||
ДобавляемаяСтрока = СтрШаблон("include %1/%2", ОтносительныйКусокПути ,ИмяФайла);
|
||||
|
||||
ПутьККонфигу = ОбъединитьПути(НастройкиПубликатора.КаталогАпач, ОтносительныйКусокПути, "base_onec_implment.conf");
|
||||
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ПутьККонфигу);
|
||||
|
||||
Если СтрНайти(СодержимоеФайла, ДобавляемаяСтрока) = 0 Тогда
|
||||
СодержимоеФайла = СодержимоеФайла+Символы.ПС+ДобавляемаяСтрока;
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(ПутьККонфигу, СодержимоеФайла);
|
||||
КонецЕсли;
|
||||
|
||||
Лог.Информация("Информация о публикации %1 успешно добавлена в %2", ИмяФайла, ПутьККонфигу);
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПолучитьСтрокуРазрешитьЛогин(Публикация)
|
||||
Лог.Отладка("Обработка свойства enable");
|
||||
РазрешитьЛогин = "";
|
||||
Если Публикация.Свойство("enable") Тогда
|
||||
Лог.Отладка("Нашли свойство в конфигурации. добавим его в описание");
|
||||
РазрешитьЛогин = СтрШаблон("enable=""%1""", Формат(Публикация.enable, "БЛ=false; БИ=true"));
|
||||
Иначе
|
||||
Лог.Отладка("Нет свойства в описании. Пропускаем.");
|
||||
КонецЕсли;
|
||||
|
||||
Возврат РазрешитьЛогин;
|
||||
КонецФункции
|
||||
|
||||
Процедура ДобавитьИнформациюОПользователеВСтрокуПодключенияКБД(СтрокаПодключенияКБД, Публикация)
|
||||
Лог.Отладка("Добавим информацию о пользователе для авторизаци, если она есть");
|
||||
Если Публикация.Свойство("Usr") и ЗначениеЗаполнено(Публикация.Usr) Тогда
|
||||
Лог.Отладка("Найдена инфррмация о пользователе для авторизации. Дополним строку подключения к БД");
|
||||
СтрокаПодключенияКБД = СтрокаПодключенияКБД+
|
||||
СтрШаблон("Usr=%1;Pwd=%2;",
|
||||
Публикация.Usr,
|
||||
?(Публикация.Свойство("Pwd"), Публикация.Pwd, ""));
|
||||
Иначе
|
||||
Лог.Отладка("Нет информации о пользователе. Пропускаем.");
|
||||
КонецЕсли;
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ЗаполнитьТекстСекцииWS(Публикация)
|
||||
Лог.Отладка("Заполним секуцию ws");
|
||||
ТекстWS = "";
|
||||
Если Публикация.Свойство("ws") Тогда
|
||||
Лог.Отладка("У нас есть описание блока ws");
|
||||
|
||||
ТекстPublishExtensionsByDefault = "";
|
||||
Если Публикация.ws.Свойство("publishExtensionsByDefault") Тогда
|
||||
Лог.Отладка("Нашли свойство publishExtensionsByDefault добавим его в конфигурацию");
|
||||
ТекстPublishExtensionsByDefault = СтрШаблон(" publishExtensionsByDefault=""%1"" ", Формат(Публикация.ws.publishExtensionsByDefault, "БЛ=false; БИ=true"));
|
||||
КонецЕсли;
|
||||
|
||||
Если Публикация.ws.wslist.количество() > 0 Тогда
|
||||
Лог.Отладка("У нас есть описание конкретных сервисов");
|
||||
ШаблонWS = "<ws%1>%2</ws>";
|
||||
|
||||
ОписаниеПоинтов = ПолучитьОписаниеPoint(Публикация.ws.wslist);
|
||||
|
||||
ТекстWS = СтрШаблон(ШаблонWS,
|
||||
ТекстPublishExtensionsByDefault,
|
||||
ОписаниеПоинтов);
|
||||
Иначе
|
||||
ШаблонWS = "<ws%1/>";
|
||||
ТекстWS = СтрШаблон(ШаблонWS,
|
||||
ТекстPublishExtensionsByDefault);
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
|
||||
Возврат ТекстWS;
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьОписаниеPoint(МассивПоинтов)
|
||||
Лог.Отладка("Соберем описание сервисов");
|
||||
ОписаниеПоинтов = "";
|
||||
ШаблонПоинта = ШаблоныФайловКонфига.СекцияPoint();
|
||||
Для каждого Сервис Из МассивПоинтов Цикл
|
||||
Лог.Отладка("Обрабатываем поинт %1", Сервис.name);
|
||||
ТекстПоинта = СтрШаблон(ШаблонПоинта,
|
||||
Сервис.name,
|
||||
Сервис.alias,
|
||||
Сервис.enable,
|
||||
Сервис.reuseSessions,
|
||||
Сервис.sessionMaxAge,
|
||||
Сервис.poolSize,
|
||||
Сервис.poolTimeout);
|
||||
ОписаниеПоинтов = ОписаниеПоинтов + Символы.ПС + ТекстПоинта;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат ОписаниеПоинтов;
|
||||
КонецФункции
|
||||
|
||||
Функция ЗаполнитьТекстСекцииhttpServices(Публикация)
|
||||
Лог.Отладка("Заполним секуцию httpServices");
|
||||
httpServices = "";
|
||||
Если Публикация.Свойство("httpServices") Тогда
|
||||
Лог.Отладка("У нас есть описание блока httpServices");
|
||||
|
||||
ТекстPublishExtensionsByDefault = "";
|
||||
Если Публикация.httpServices.Свойство("publishExtensionsByDefault") Тогда
|
||||
Лог.Отладка("Нашли свойство publishExtensionsByDefault добавим его в конфигурацию");
|
||||
ТекстPublishExtensionsByDefault = СтрШаблон(" publishExtensionsByDefault=""%1"" ", Формат(Публикация.httpServices.publishExtensionsByDefault, "БЛ=false; БИ=true"));
|
||||
КонецЕсли;
|
||||
|
||||
publishByDefault = "";
|
||||
Если Публикация.httpServices.Свойство("publishByDefault") Тогда
|
||||
Лог.Отладка("Нашли свойство publishByDefault добавим его в конфигурацию");
|
||||
ТекстpublishByDefault = СтрШаблон(" publishByDefault=""%1"" ", Формат(Публикация.httpServices.publishByDefault, "БЛ=false; БИ=true"));
|
||||
КонецЕсли;
|
||||
|
||||
Если Публикация.httpServices.hsList.количество() > 0 Тогда
|
||||
Лог.Отладка("У нас есть описание конкретных сервисов");
|
||||
ШаблонWS = "<httpServices%1%2>%3</httpServices>";
|
||||
|
||||
ОписаниеСервисов = ПолучитьОписаниеService(Публикация.httpServices.hsList);
|
||||
|
||||
httpServices = СтрШаблон(ШаблонWS,
|
||||
ТекстpublishByDefault,
|
||||
ТекстPublishExtensionsByDefault,
|
||||
ОписаниеСервисов);
|
||||
Иначе
|
||||
ШаблонWS = "<httpServices%1%2/>";
|
||||
httpServices = СтрШаблон(ШаблонWS,
|
||||
ТекстpublishByDefault,
|
||||
ТекстPublishExtensionsByDefault);
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
|
||||
Возврат httpServices;
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьОписаниеService(МассивСервисов)
|
||||
Лог.Отладка("Соберем описание сервисов");
|
||||
ОписаниеСервисов = "";
|
||||
ШаблонСервиса = ШаблоныФайловКонфига.СекцияService();
|
||||
Для каждого Сервис Из МассивСервисов Цикл
|
||||
Лог.Отладка("Обрабатываем сервис %1", Сервис.name);
|
||||
ТекстПоинта = СтрШаблон(ШаблонСервиса,
|
||||
Сервис.name,
|
||||
Сервис.rootUrl,
|
||||
Сервис.enable,
|
||||
Сервис.reuseSessions,
|
||||
Сервис.sessionMaxAge,
|
||||
Сервис.poolSize,
|
||||
Сервис.poolTimeout);
|
||||
ОписаниеСервисов = ОписаниеСервисов + Символы.ПС + ТекстПоинта;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат ОписаниеСервисов;
|
||||
КонецФункции
|
||||
|
||||
Функция ЗаполнитьТекстOIDC(Публикация)
|
||||
Лог.Отладка("Заполним секуцию oidc");
|
||||
ТекстOIDC = "";
|
||||
Если Публикация.Свойство("oidc") Тогда
|
||||
ПарсерJSON = Новый ПарсерJSON;
|
||||
СекцияПровайдеры = ПарсерJSON.ЗаписатьJSON(Публикация.oidc.providers);
|
||||
|
||||
ШаблонOidc = ШаблоныФайловКонфига.oidc();
|
||||
ТекстOIDC = СтрШаблон(ШаблонOidc, СекцияПровайдеры);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ТекстOIDC;
|
||||
КонецФункции
|
20
webserver/app/Классы/АпачУправлятор.os
Normal file
20
webserver/app/Классы/АпачУправлятор.os
Normal file
@ -0,0 +1,20 @@
|
||||
&ЛогПубликатора Перем Лог;
|
||||
|
||||
&Желудь
|
||||
Процедура ПриСозданииОбъекта()
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗапуститьАпач() Экспорт
|
||||
ЗапуститьПриложение("apachectl -k start", ,Истина);
|
||||
Лог.Информация("Apache успешно запущен");
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОстановитьАпач() Экспорт
|
||||
ЗапуститьПриложение("apachectl -k stop", ,Истина);
|
||||
Лог.Информация("Apache остановлен");
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПерезапуститьАпач() Экспорт
|
||||
ЗапуститьПриложение("apachectl -k restart", ,Истина);
|
||||
Лог.Информация("Apache Перезапущен");
|
||||
КонецПроцедуры
|
18
webserver/app/Классы/Запускатель.os
Normal file
18
webserver/app/Классы/Запускатель.os
Normal file
@ -0,0 +1,18 @@
|
||||
&Пластилин Перем АпачУправлятор;
|
||||
&Пластилин Перем УправлениеКонфигурацией;
|
||||
&Пластилин Перем АпачМодификаторКонфига;
|
||||
&ЛогПубликатора Перем Лог;
|
||||
|
||||
|
||||
Процедура ПриЗапускеПриложения() Экспорт
|
||||
Лог.Отладка("Запускаем приложение.");
|
||||
АпачМодификаторКонфига.ПервоначальныеНастройкиАпач();
|
||||
АпачМодификаторКонфига.ОпубликоватьБазы(УправлениеКонфигурацией.ПрочитатьКонфиг());
|
||||
АпачУправлятор.ЗапуститьАпач();
|
||||
КонецПроцедуры
|
||||
|
||||
&Рогатка
|
||||
Процедура ПриСозданииОбъекта()
|
||||
|
||||
КонецПроцедуры
|
||||
|
4
webserver/app/Классы/Логос.os
Normal file
4
webserver/app/Классы/Логос.os
Normal file
@ -0,0 +1,4 @@
|
||||
&Аннотация("ЛогПубликатора")
|
||||
&Лог("oscript.publikator")
|
||||
Процедура ПриСозданииОбъекта()
|
||||
КонецПроцедуры
|
19
webserver/app/Классы/НастройкиПубликатора.os
Normal file
19
webserver/app/Классы/НастройкиПубликатора.os
Normal file
@ -0,0 +1,19 @@
|
||||
&Деталька(Значение = "Публикатор.КаталогПубликаций", ЗначениеПоУмолчанию = "/var/www/1C/")
|
||||
Перем КаталогПубликаций Экспорт;
|
||||
|
||||
&Деталька(Значение = "Публикатор.КаталогАпач", ЗначениеПоУмолчанию = "/usr/local/apache2/")
|
||||
Перем КаталогАпач Экспорт;
|
||||
|
||||
&Деталька(Значение = "Публикатор.ПутьК1С", ЗначениеПоУмолчанию = "/opt/1cv8/current/")
|
||||
Перем ПутьК1С Экспорт;
|
||||
|
||||
&Деталька(Значение = "Публикатор.ПутьККонфигу", ЗначениеПоУмолчанию = "./config/config.json")
|
||||
Перем ПутьККонфигу Экспорт;
|
||||
|
||||
Перем ЭтоLinux Экспорт;
|
||||
|
||||
&Желудь
|
||||
Процедура ПриСозданииОбъекта()
|
||||
СистемнаяИнформация = Новый СистемнаяИнформация();
|
||||
ЭтоLinux = СтрНайти(НРег(СистемнаяИнформация.ВерсияОС), "windows") = 0;
|
||||
КонецПроцедуры
|
32
webserver/app/Классы/УправлениеКонфигурацией.os
Normal file
32
webserver/app/Классы/УправлениеКонфигурацией.os
Normal file
@ -0,0 +1,32 @@
|
||||
#Использовать json
|
||||
&Пластилин Перем ФайловыеОперации;
|
||||
&Пластилин Перем НастройкиПубликатора;
|
||||
&ЛогПубликатора Перем Лог;
|
||||
|
||||
&Желудь
|
||||
Процедура ПриСозданииОбъекта()
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПрочитатьКонфиг() Экспорт
|
||||
Лог.Отладка("Приступаем к чтению Json c настройками.");
|
||||
ПарсерJSON = Новый ПарсерJSON;
|
||||
Возврат ПарсерJSON.ПрочитатьJSON(ФайловыеОперации.ПрочитатьТекстФайла(НастройкиПубликатора.ПутьККонфигу),,,Истина);
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗаписатьКонфиг(Знач Конфиг) Экспорт
|
||||
Лог.Отладка("Приступаем к обновлению Json c настройками.");
|
||||
|
||||
Если Не ТипЗнч(Конфиг) = Тип("Строка") Тогда
|
||||
Лог.Отладка("Передана не json строка. Сериализуем.");
|
||||
ПарсерJSON = Новый ПарсерJSON;
|
||||
Конфиг = ПарсерJSON.ЗаписатьJSON(Конфиг);
|
||||
КонецЕсли;
|
||||
ФайловыеОперации.ЗаписатьТекстФайла(НастройкиПубликатора.ПутьККонфигу, Конфиг);
|
||||
Лог.Информация("Файл конфигурации успешно обновлен.");
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ВернутьТекстКонфига() Экспорт
|
||||
Возврат ФайловыеОперации.ПрочитатьТекстФайла(НастройкиПубликатора.ПутьККонфигу);
|
||||
КонецФункции
|
||||
|
||||
|
73
webserver/app/Классы/ФайловыеОперации.os
Normal file
73
webserver/app/Классы/ФайловыеОперации.os
Normal file
@ -0,0 +1,73 @@
|
||||
&ЛогПубликатора Перем Лог;
|
||||
|
||||
&Желудь
|
||||
Процедура ПриСозданииОбъекта()
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
// НовыйФайл
|
||||
// Упрощает конструктор файлов, избавит от необходимости проверять значение
|
||||
// Параметры:
|
||||
// ПутьИлиФайл - Строка или Файл - Полный путь к файлу или сам файл.
|
||||
// Если передан файл, вернется тот же объект
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Файл - Файл
|
||||
//
|
||||
Функция НовыйФайл(ПутьИлиФайл) Экспорт
|
||||
|
||||
Если ТипЗнч(ПутьИлиФайл) = Тип("Строка") Тогда
|
||||
|
||||
НовыйФайл = Новый Файл(ПутьИлиФайл);
|
||||
|
||||
ИначеЕсли ТипЗнч(ПутьИлиФайл) = Тип("Файл") Тогда
|
||||
|
||||
НовыйФайл = ПутьИлиФайл;
|
||||
|
||||
Иначе
|
||||
|
||||
ВызватьИсключение "Не удалось определить тип переданного параметра";
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат НовыйФайл;
|
||||
КонецФункции
|
||||
|
||||
// ПрочитатьТекстФайла
|
||||
// Возвращает содержимое файла, читая его в правильной кодировке
|
||||
// Параметры:
|
||||
// ПутьКФайлу - Строка - Полный путь к файлу
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - Содержимое файла
|
||||
//
|
||||
Функция ПрочитатьТекстФайла(ПутьКФайлу) Экспорт
|
||||
Лог.Отладка("Приступаем к чтению файла по пути: %1", ПутьКФайлу);
|
||||
Кодировка = КодировкаТекста.UTF8NoBOM;
|
||||
Текст = Новый ЧтениеТекста();
|
||||
Текст.Открыть(ПутьКФайлу, Кодировка);
|
||||
|
||||
СодержимоеФайла = Текст.Прочитать();
|
||||
|
||||
Текст.Закрыть();
|
||||
|
||||
Лог.Отладка("Файл успешно прочитан");
|
||||
Возврат СодержимоеФайла;
|
||||
|
||||
КонецФункции // ПрочитатьТекстФайла
|
||||
|
||||
// ЗаписатьТекстФайла
|
||||
// Определяет кодировку файла и записывает содержимое в файл
|
||||
//
|
||||
// Параметры:
|
||||
// ПутьКФайлу - Строка - Полный путь к файлу
|
||||
// СодержимоеФайла - Строка - Текст для записи
|
||||
Процедура ЗаписатьТекстФайла(ПутьКФайлу, СодержимоеФайла) Экспорт
|
||||
|
||||
Кодировка = КодировкаТекста.UTF8NoBOM;
|
||||
ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу, Кодировка, , , Символы.ПС);
|
||||
|
||||
ЗаписьТекста.Записать(СодержимоеФайла);
|
||||
ЗаписьТекста.Закрыть();
|
||||
|
||||
КонецПроцедуры // ЗаписатьТекстФайла
|
64
webserver/app/Классы/ШаблоныФайловКонфига.os
Normal file
64
webserver/app/Классы/ШаблоныФайловКонфига.os
Normal file
@ -0,0 +1,64 @@
|
||||
&Желудь
|
||||
Процедура ПриСозданииОбъекта()
|
||||
КонецПроцедуры
|
||||
|
||||
Функция defaultVrd() Экспорт
|
||||
Возврат "<?xml version=""1.0"" encoding=""UTF-8""?>
|
||||
|<point xmlns=""http://v8.1c.ru/8.2/virtual-resource-system""
|
||||
| xmlns:xs=""http://www.w3.org/2001/XMLSchema""
|
||||
| xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
|
||||
| base=""/%1""
|
||||
| ib=""%2""
|
||||
| %3>
|
||||
| %4
|
||||
| %5
|
||||
| %6
|
||||
|</point>";
|
||||
КонецФункции
|
||||
|
||||
Функция КонфигПубликации() Экспорт
|
||||
Возврат "Alias ""/%1"" ""/%2/""
|
||||
|<Directory ""/%2/"">
|
||||
| AllowOverride All
|
||||
| Options None
|
||||
| Require all granted
|
||||
| SetHandler 1c-application
|
||||
| ManagedApplicationDescriptor ""/%3""
|
||||
|</Directory>";
|
||||
КонецФункции
|
||||
|
||||
Функция СекцияPoint() Экспорт
|
||||
Возврат "<point name=""%1""
|
||||
| alias=""%2""
|
||||
| enable=""%3""
|
||||
| reuseSessions=""%4""
|
||||
| sessionMaxAge=""%5""
|
||||
| poolSize=""%6""
|
||||
| poolTimeout=""%7""/>";
|
||||
КонецФункции
|
||||
|
||||
Функция СекцияService() Экспорт
|
||||
Возврат "<service name=""%1""
|
||||
| rootUrl=""%2""
|
||||
| enable=""%3""
|
||||
| reuseSessions=""%4""
|
||||
| sessionMaxAge=""%5""
|
||||
| poolSize=""%6""
|
||||
| poolTimeout=""%7""/>";
|
||||
КонецФункции
|
||||
|
||||
Функция oidc() Экспорт
|
||||
Возврат "<openidconnect>
|
||||
| <providers>
|
||||
| <![CDATA[%1]]>
|
||||
| </providers>
|
||||
|
|
||||
|</openidconnect>";
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция base_onec_config() Экспорт
|
||||
Возврат "LoadModule _1cws_module %1
|
||||
|
|
||||
|# Тут будут описания всех подключенных конфигураций";
|
||||
КонецФункции
|
3
webserver/conf/base_onec_implment.conf
Normal file
3
webserver/conf/base_onec_implment.conf
Normal file
@ -0,0 +1,3 @@
|
||||
LoadModule _1cws_module /opt/1cv8/current/wsap24.so
|
||||
|
||||
# Тут будут описания всех подключенных конфигураций
|
546
webserver/conf/httpd.conf
Normal file
546
webserver/conf/httpd.conf
Normal file
@ -0,0 +1,546 @@
|
||||
#
|
||||
# This is the main Apache HTTP server configuration file. It contains the
|
||||
# configuration directives that give the server its instructions.
|
||||
# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
|
||||
# In particular, see
|
||||
# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
|
||||
# for a discussion of each configuration directive.
|
||||
#
|
||||
# Do NOT simply read the instructions in here without understanding
|
||||
# what they do. They're here only as hints or reminders. If you are unsure
|
||||
# consult the online docs. You have been warned.
|
||||
#
|
||||
# Configuration and logfile names: If the filenames you specify for many
|
||||
# of the server's control files begin with "/" (or "drive:/" for Win32), the
|
||||
# server will use that explicit path. If the filenames do *not* begin
|
||||
# with "/", the value of ServerRoot is prepended -- so "logs/access_log"
|
||||
# with ServerRoot set to "/usr/local/apache2" will be interpreted by the
|
||||
# server as "/usr/local/apache2/logs/access_log", whereas "/logs/access_log"
|
||||
# will be interpreted as '/logs/access_log'.
|
||||
|
||||
#
|
||||
# ServerRoot: The top of the directory tree under which the server's
|
||||
# configuration, error, and log files are kept.
|
||||
#
|
||||
# Do not add a slash at the end of the directory path. If you point
|
||||
# ServerRoot at a non-local disk, be sure to specify a local disk on the
|
||||
# Mutex directive, if file-based mutexes are used. If you wish to share the
|
||||
# same ServerRoot for multiple httpd daemons, you will need to change at
|
||||
# least PidFile.
|
||||
#
|
||||
ServerRoot "/usr/local/apache2"
|
||||
|
||||
#
|
||||
# Mutex: Allows you to set the mutex mechanism and mutex file directory
|
||||
# for individual mutexes, or change the global defaults
|
||||
#
|
||||
# Uncomment and change the directory if mutexes are file-based and the default
|
||||
# mutex file directory is not on a local disk or is not appropriate for some
|
||||
# other reason.
|
||||
#
|
||||
# Mutex default:logs
|
||||
|
||||
#
|
||||
# Listen: Allows you to bind Apache to specific IP addresses and/or
|
||||
# ports, instead of the default. See also the <VirtualHost>
|
||||
# directive.
|
||||
#
|
||||
# Change this to Listen on specific IP addresses as shown below to
|
||||
# prevent Apache from glomming onto all bound IP addresses.
|
||||
#
|
||||
#Listen 12.34.56.78:80
|
||||
Listen 80
|
||||
|
||||
#
|
||||
# Dynamic Shared Object (DSO) Support
|
||||
#
|
||||
# To be able to use the functionality of a module which was built as a DSO you
|
||||
# have to place corresponding `LoadModule' lines at this location so the
|
||||
# directives contained in it are actually available _before_ they are used.
|
||||
# Statically compiled modules (those listed by `httpd -l') do not need
|
||||
# to be loaded here.
|
||||
#
|
||||
# Example:
|
||||
# LoadModule foo_module modules/mod_foo.so
|
||||
#
|
||||
LoadModule mpm_event_module modules/mod_mpm_event.so
|
||||
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
|
||||
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
|
||||
LoadModule authn_file_module modules/mod_authn_file.so
|
||||
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
|
||||
#LoadModule authn_anon_module modules/mod_authn_anon.so
|
||||
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
|
||||
#LoadModule authn_socache_module modules/mod_authn_socache.so
|
||||
LoadModule authn_core_module modules/mod_authn_core.so
|
||||
LoadModule authz_host_module modules/mod_authz_host.so
|
||||
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
|
||||
LoadModule authz_user_module modules/mod_authz_user.so
|
||||
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
|
||||
#LoadModule authz_owner_module modules/mod_authz_owner.so
|
||||
#LoadModule authz_dbd_module modules/mod_authz_dbd.so
|
||||
LoadModule authz_core_module modules/mod_authz_core.so
|
||||
#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
|
||||
#LoadModule authnz_fcgi_module modules/mod_authnz_fcgi.so
|
||||
LoadModule access_compat_module modules/mod_access_compat.so
|
||||
LoadModule auth_basic_module modules/mod_auth_basic.so
|
||||
#LoadModule auth_form_module modules/mod_auth_form.so
|
||||
#LoadModule auth_digest_module modules/mod_auth_digest.so
|
||||
#LoadModule allowmethods_module modules/mod_allowmethods.so
|
||||
#LoadModule isapi_module modules/mod_isapi.so
|
||||
#LoadModule file_cache_module modules/mod_file_cache.so
|
||||
#LoadModule cache_module modules/mod_cache.so
|
||||
#LoadModule cache_disk_module modules/mod_cache_disk.so
|
||||
#LoadModule cache_socache_module modules/mod_cache_socache.so
|
||||
#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
|
||||
#LoadModule socache_dbm_module modules/mod_socache_dbm.so
|
||||
#LoadModule socache_memcache_module modules/mod_socache_memcache.so
|
||||
#LoadModule watchdog_module modules/mod_watchdog.so
|
||||
#LoadModule macro_module modules/mod_macro.so
|
||||
#LoadModule dbd_module modules/mod_dbd.so
|
||||
#LoadModule bucketeer_module modules/mod_bucketeer.so
|
||||
#LoadModule dumpio_module modules/mod_dumpio.so
|
||||
#LoadModule echo_module modules/mod_echo.so
|
||||
#LoadModule example_hooks_module modules/mod_example_hooks.so
|
||||
#LoadModule case_filter_module modules/mod_case_filter.so
|
||||
#LoadModule case_filter_in_module modules/mod_case_filter_in.so
|
||||
#LoadModule example_ipc_module modules/mod_example_ipc.so
|
||||
#LoadModule buffer_module modules/mod_buffer.so
|
||||
#LoadModule data_module modules/mod_data.so
|
||||
#LoadModule ratelimit_module modules/mod_ratelimit.so
|
||||
LoadModule reqtimeout_module modules/mod_reqtimeout.so
|
||||
#LoadModule ext_filter_module modules/mod_ext_filter.so
|
||||
#LoadModule request_module modules/mod_request.so
|
||||
#LoadModule include_module modules/mod_include.so
|
||||
LoadModule filter_module modules/mod_filter.so
|
||||
#LoadModule reflector_module modules/mod_reflector.so
|
||||
#LoadModule substitute_module modules/mod_substitute.so
|
||||
#LoadModule sed_module modules/mod_sed.so
|
||||
#LoadModule charset_lite_module modules/mod_charset_lite.so
|
||||
#LoadModule deflate_module modules/mod_deflate.so
|
||||
#LoadModule xml2enc_module modules/mod_xml2enc.so
|
||||
#LoadModule proxy_html_module modules/mod_proxy_html.so
|
||||
LoadModule mime_module modules/mod_mime.so
|
||||
#LoadModule ldap_module modules/mod_ldap.so
|
||||
LoadModule log_config_module modules/mod_log_config.so
|
||||
#LoadModule log_debug_module modules/mod_log_debug.so
|
||||
#LoadModule log_forensic_module modules/mod_log_forensic.so
|
||||
#LoadModule logio_module modules/mod_logio.so
|
||||
#LoadModule lua_module modules/mod_lua.so
|
||||
LoadModule env_module modules/mod_env.so
|
||||
#LoadModule mime_magic_module modules/mod_mime_magic.so
|
||||
#LoadModule cern_meta_module modules/mod_cern_meta.so
|
||||
#LoadModule expires_module modules/mod_expires.so
|
||||
LoadModule headers_module modules/mod_headers.so
|
||||
#LoadModule ident_module modules/mod_ident.so
|
||||
#LoadModule usertrack_module modules/mod_usertrack.so
|
||||
#LoadModule unique_id_module modules/mod_unique_id.so
|
||||
LoadModule setenvif_module modules/mod_setenvif.so
|
||||
LoadModule version_module modules/mod_version.so
|
||||
#LoadModule remoteip_module modules/mod_remoteip.so
|
||||
#LoadModule proxy_module modules/mod_proxy.so
|
||||
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
|
||||
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
|
||||
#LoadModule proxy_http_module modules/mod_proxy_http.so
|
||||
#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
|
||||
#LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
|
||||
#LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so
|
||||
#LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
|
||||
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
|
||||
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
|
||||
#LoadModule proxy_express_module modules/mod_proxy_express.so
|
||||
#LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so
|
||||
#LoadModule session_module modules/mod_session.so
|
||||
#LoadModule session_cookie_module modules/mod_session_cookie.so
|
||||
#LoadModule session_crypto_module modules/mod_session_crypto.so
|
||||
#LoadModule session_dbd_module modules/mod_session_dbd.so
|
||||
#LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
|
||||
#LoadModule slotmem_plain_module modules/mod_slotmem_plain.so
|
||||
#LoadModule ssl_module modules/mod_ssl.so
|
||||
#LoadModule optional_hook_export_module modules/mod_optional_hook_export.so
|
||||
#LoadModule optional_hook_import_module modules/mod_optional_hook_import.so
|
||||
#LoadModule optional_fn_import_module modules/mod_optional_fn_import.so
|
||||
#LoadModule optional_fn_export_module modules/mod_optional_fn_export.so
|
||||
#LoadModule dialup_module modules/mod_dialup.so
|
||||
#LoadModule http2_module modules/mod_http2.so
|
||||
#LoadModule proxy_http2_module modules/mod_proxy_http2.so
|
||||
#LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
|
||||
#LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
|
||||
#LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
|
||||
#LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
|
||||
LoadModule unixd_module modules/mod_unixd.so
|
||||
#LoadModule heartbeat_module modules/mod_heartbeat.so
|
||||
#LoadModule heartmonitor_module modules/mod_heartmonitor.so
|
||||
#LoadModule dav_module modules/mod_dav.so
|
||||
LoadModule status_module modules/mod_status.so
|
||||
LoadModule autoindex_module modules/mod_autoindex.so
|
||||
#LoadModule asis_module modules/mod_asis.so
|
||||
#LoadModule info_module modules/mod_info.so
|
||||
#LoadModule suexec_module modules/mod_suexec.so
|
||||
<IfModule !mpm_prefork_module>
|
||||
#LoadModule cgid_module modules/mod_cgid.so
|
||||
</IfModule>
|
||||
<IfModule mpm_prefork_module>
|
||||
#LoadModule cgi_module modules/mod_cgi.so
|
||||
</IfModule>
|
||||
#LoadModule dav_fs_module modules/mod_dav_fs.so
|
||||
#LoadModule dav_lock_module modules/mod_dav_lock.so
|
||||
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
|
||||
#LoadModule negotiation_module modules/mod_negotiation.so
|
||||
LoadModule dir_module modules/mod_dir.so
|
||||
#LoadModule imagemap_module modules/mod_imagemap.so
|
||||
#LoadModule actions_module modules/mod_actions.so
|
||||
#LoadModule speling_module modules/mod_speling.so
|
||||
#LoadModule userdir_module modules/mod_userdir.so
|
||||
LoadModule alias_module modules/mod_alias.so
|
||||
#LoadModule rewrite_module modules/mod_rewrite.so
|
||||
|
||||
<IfModule unixd_module>
|
||||
#
|
||||
# If you wish httpd to run as a different user or group, you must run
|
||||
# httpd as root initially and it will switch.
|
||||
#
|
||||
# User/Group: The name (or #number) of the user/group to run httpd as.
|
||||
# It is usually good practice to create a dedicated user and group for
|
||||
# running httpd, as with most system services.
|
||||
#
|
||||
User daemon
|
||||
Group daemon
|
||||
|
||||
</IfModule>
|
||||
|
||||
# 'Main' server configuration
|
||||
#
|
||||
# The directives in this section set up the values used by the 'main'
|
||||
# server, which responds to any requests that aren't handled by a
|
||||
# <VirtualHost> definition. These values also provide defaults for
|
||||
# any <VirtualHost> containers you may define later in the file.
|
||||
#
|
||||
# All of these directives may appear inside <VirtualHost> containers,
|
||||
# in which case these default settings will be overridden for the
|
||||
# virtual host being defined.
|
||||
#
|
||||
|
||||
#
|
||||
# ServerAdmin: Your address, where problems with the server should be
|
||||
# e-mailed. This address appears on some server-generated pages, such
|
||||
# as error documents. e.g. admin@your-domain.com
|
||||
#
|
||||
ServerAdmin you@example.com
|
||||
|
||||
#
|
||||
# ServerName gives the name and port that the server uses to identify itself.
|
||||
# This can often be determined automatically, but we recommend you specify
|
||||
# it explicitly to prevent problems during startup.
|
||||
#
|
||||
# If your host doesn't have a registered DNS name, enter its IP address here.
|
||||
#
|
||||
ServerName localhost:80
|
||||
|
||||
#
|
||||
# Deny access to the entirety of your server's filesystem. You must
|
||||
# explicitly permit access to web content directories in other
|
||||
# <Directory> blocks below.
|
||||
#
|
||||
<Directory />
|
||||
AllowOverride none
|
||||
Require all denied
|
||||
</Directory>
|
||||
|
||||
#
|
||||
# Note that from this point forward you must specifically allow
|
||||
# particular features to be enabled - so if something's not working as
|
||||
# you might expect, make sure that you have specifically enabled it
|
||||
# below.
|
||||
#
|
||||
|
||||
#
|
||||
# DocumentRoot: The directory out of which you will serve your
|
||||
# documents. By default, all requests are taken from this directory, but
|
||||
# symbolic links and aliases may be used to point to other locations.
|
||||
#
|
||||
DocumentRoot "/usr/local/apache2/htdocs"
|
||||
<Directory "/usr/local/apache2/htdocs">
|
||||
#
|
||||
# Possible values for the Options directive are "None", "All",
|
||||
# or any combination of:
|
||||
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
|
||||
#
|
||||
# Note that "MultiViews" must be named *explicitly* --- "Options All"
|
||||
# doesn't give it to you.
|
||||
#
|
||||
# The Options directive is both complicated and important. Please see
|
||||
# http://httpd.apache.org/docs/2.4/mod/core.html#options
|
||||
# for more information.
|
||||
#
|
||||
Options Indexes FollowSymLinks
|
||||
|
||||
#
|
||||
# AllowOverride controls what directives may be placed in .htaccess files.
|
||||
# It can be "All", "None", or any combination of the keywords:
|
||||
# AllowOverride FileInfo AuthConfig Limit
|
||||
#
|
||||
AllowOverride None
|
||||
|
||||
#
|
||||
# Controls who can get stuff from this server.
|
||||
#
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
#
|
||||
# DirectoryIndex: sets the file that Apache will serve if a directory
|
||||
# is requested.
|
||||
#
|
||||
<IfModule dir_module>
|
||||
DirectoryIndex index.html
|
||||
</IfModule>
|
||||
|
||||
#
|
||||
# The following lines prevent .htaccess and .htpasswd files from being
|
||||
# viewed by Web clients.
|
||||
#
|
||||
<Files ".ht*">
|
||||
Require all denied
|
||||
</Files>
|
||||
|
||||
#
|
||||
# ErrorLog: The location of the error log file.
|
||||
# If you do not specify an ErrorLog directive within a <VirtualHost>
|
||||
# container, error messages relating to that virtual host will be
|
||||
# logged here. If you *do* define an error logfile for a <VirtualHost>
|
||||
# container, that host's errors will be logged there and not here.
|
||||
#
|
||||
ErrorLog /usr/local/apache2/logs/error.log
|
||||
|
||||
#
|
||||
# LogLevel: Control the number of messages logged to the error_log.
|
||||
# Possible values include: debug, info, notice, warn, error, crit,
|
||||
# alert, emerg.
|
||||
#
|
||||
LogLevel debug
|
||||
|
||||
<IfModule log_config_module>
|
||||
#
|
||||
# The following directives define some format nicknames for use with
|
||||
# a CustomLog directive (see below).
|
||||
#
|
||||
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
|
||||
LogFormat "%h %l %u %t \"%r\" %>s %b" common
|
||||
|
||||
<IfModule logio_module>
|
||||
# You need to enable mod_logio.c to use %I and %O
|
||||
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
|
||||
</IfModule>
|
||||
|
||||
#
|
||||
# The location and format of the access logfile (Common Logfile Format).
|
||||
# If you do not define any access logfiles within a <VirtualHost>
|
||||
# container, they will be logged here. Contrariwise, if you *do*
|
||||
# define per-<VirtualHost> access logfiles, transactions will be
|
||||
# logged therein and *not* in this file.
|
||||
#
|
||||
CustomLog /proc/self/fd/1 common
|
||||
|
||||
#
|
||||
# If you prefer a logfile with access, agent, and referer information
|
||||
# (Combined Logfile Format) you can use the following directive.
|
||||
#
|
||||
#CustomLog "logs/access_log" combined
|
||||
</IfModule>
|
||||
|
||||
<IfModule alias_module>
|
||||
#
|
||||
# Redirect: Allows you to tell clients about documents that used to
|
||||
# exist in your server's namespace, but do not anymore. The client
|
||||
# will make a new request for the document at its new location.
|
||||
# Example:
|
||||
# Redirect permanent /foo http://www.example.com/bar
|
||||
|
||||
#
|
||||
# Alias: Maps web paths into filesystem paths and is used to
|
||||
# access content that does not live under the DocumentRoot.
|
||||
# Example:
|
||||
# Alias /webpath /full/filesystem/path
|
||||
#
|
||||
# If you include a trailing / on /webpath then the server will
|
||||
# require it to be present in the URL. You will also likely
|
||||
# need to provide a <Directory> section to allow access to
|
||||
# the filesystem path.
|
||||
|
||||
#
|
||||
# ScriptAlias: This controls which directories contain server scripts.
|
||||
# ScriptAliases are essentially the same as Aliases, except that
|
||||
# documents in the target directory are treated as applications and
|
||||
# run by the server when requested rather than as documents sent to the
|
||||
# client. The same rules about trailing "/" apply to ScriptAlias
|
||||
# directives as to Alias.
|
||||
#
|
||||
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
|
||||
|
||||
</IfModule>
|
||||
|
||||
<IfModule cgid_module>
|
||||
#
|
||||
# ScriptSock: On threaded servers, designate the path to the UNIX
|
||||
# socket used to communicate with the CGI daemon of mod_cgid.
|
||||
#
|
||||
#Scriptsock cgisock
|
||||
</IfModule>
|
||||
|
||||
#
|
||||
# "/usr/local/apache2/cgi-bin" should be changed to whatever your ScriptAliased
|
||||
# CGI directory exists, if you have that configured.
|
||||
#
|
||||
<Directory "/usr/local/apache2/cgi-bin">
|
||||
AllowOverride None
|
||||
Options None
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
<IfModule headers_module>
|
||||
#
|
||||
# Avoid passing HTTP_PROXY environment to CGI's on this or any proxied
|
||||
# backend servers which have lingering "httpoxy" defects.
|
||||
# 'Proxy' request header is undefined by the IETF, not listed by IANA
|
||||
#
|
||||
RequestHeader unset Proxy early
|
||||
</IfModule>
|
||||
|
||||
<IfModule mime_module>
|
||||
#
|
||||
# TypesConfig points to the file containing the list of mappings from
|
||||
# filename extension to MIME-type.
|
||||
#
|
||||
TypesConfig conf/mime.types
|
||||
|
||||
#
|
||||
# AddType allows you to add to or override the MIME configuration
|
||||
# file specified in TypesConfig for specific file types.
|
||||
#
|
||||
#AddType application/x-gzip .tgz
|
||||
#
|
||||
# AddEncoding allows you to have certain browsers uncompress
|
||||
# information on the fly. Note: Not all browsers support this.
|
||||
#
|
||||
#AddEncoding x-compress .Z
|
||||
#AddEncoding x-gzip .gz .tgz
|
||||
#
|
||||
# If the AddEncoding directives above are commented-out, then you
|
||||
# probably should define those extensions to indicate media types:
|
||||
#
|
||||
AddType application/x-compress .Z
|
||||
AddType application/x-gzip .gz .tgz
|
||||
|
||||
#
|
||||
# AddHandler allows you to map certain file extensions to "handlers":
|
||||
# actions unrelated to filetype. These can be either built into the server
|
||||
# or added with the Action directive (see below)
|
||||
#
|
||||
# To use CGI scripts outside of ScriptAliased directories:
|
||||
# (You will also need to add "ExecCGI" to the "Options" directive.)
|
||||
#
|
||||
#AddHandler cgi-script .cgi
|
||||
|
||||
# For type maps (negotiated resources):
|
||||
#AddHandler type-map var
|
||||
|
||||
#
|
||||
# Filters allow you to process content before it is sent to the client.
|
||||
#
|
||||
# To parse .shtml files for server-side includes (SSI):
|
||||
# (You will also need to add "Includes" to the "Options" directive.)
|
||||
#
|
||||
#AddType text/html .shtml
|
||||
#AddOutputFilter INCLUDES .shtml
|
||||
</IfModule>
|
||||
|
||||
#
|
||||
# The mod_mime_magic module allows the server to use various hints from the
|
||||
# contents of the file itself to determine its type. The MIMEMagicFile
|
||||
# directive tells the module where the hint definitions are located.
|
||||
#
|
||||
#MIMEMagicFile conf/magic
|
||||
|
||||
#
|
||||
# Customizable error responses come in three flavors:
|
||||
# 1) plain text 2) local redirects 3) external redirects
|
||||
#
|
||||
# Some examples:
|
||||
#ErrorDocument 500 "The server made a boo boo."
|
||||
#ErrorDocument 404 /missing.html
|
||||
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
|
||||
#ErrorDocument 402 http://www.example.com/subscription_info.html
|
||||
#
|
||||
|
||||
#
|
||||
# MaxRanges: Maximum number of Ranges in a request before
|
||||
# returning the entire resource, or one of the special
|
||||
# values 'default', 'none' or 'unlimited'.
|
||||
# Default setting is to accept 200 Ranges.
|
||||
#MaxRanges unlimited
|
||||
|
||||
#
|
||||
# EnableMMAP and EnableSendfile: On systems that support it,
|
||||
# memory-mapping or the sendfile syscall may be used to deliver
|
||||
# files. This usually improves server performance, but must
|
||||
# be turned off when serving from networked-mounted
|
||||
# filesystems or if support for these functions is otherwise
|
||||
# broken on your system.
|
||||
# Defaults: EnableMMAP On, EnableSendfile Off
|
||||
#
|
||||
#EnableMMAP off
|
||||
#EnableSendfile on
|
||||
|
||||
# Supplemental configuration
|
||||
#
|
||||
# The configuration files in the conf/extra/ directory can be
|
||||
# included to add extra features or to modify the default configuration of
|
||||
# the server, or you may simply copy their contents here and change as
|
||||
# necessary.
|
||||
|
||||
# Server-pool management (MPM specific)
|
||||
#Include conf/extra/httpd-mpm.conf
|
||||
|
||||
# Multi-language error messages
|
||||
#Include conf/extra/httpd-multilang-errordoc.conf
|
||||
|
||||
# Fancy directory listings
|
||||
#Include conf/extra/httpd-autoindex.conf
|
||||
|
||||
# Language settings
|
||||
#Include conf/extra/httpd-languages.conf
|
||||
|
||||
# User home directories
|
||||
#Include conf/extra/httpd-userdir.conf
|
||||
|
||||
# Real-time info on requests and configuration
|
||||
#Include conf/extra/httpd-info.conf
|
||||
|
||||
# Virtual hosts
|
||||
#Include conf/extra/httpd-vhosts.conf
|
||||
|
||||
# Local access to the Apache HTTP Server Manual
|
||||
#Include conf/extra/httpd-manual.conf
|
||||
|
||||
# Distributed authoring and versioning (WebDAV)
|
||||
#Include conf/extra/httpd-dav.conf
|
||||
|
||||
# Various default settings
|
||||
#Include conf/extra/httpd-default.conf
|
||||
|
||||
# Configure mod_proxy_html to understand HTML4/XHTML1
|
||||
<IfModule proxy_html_module>
|
||||
Include conf/extra/proxy-html.conf
|
||||
</IfModule>
|
||||
|
||||
# Secure (SSL/TLS) connections
|
||||
#Include conf/extra/httpd-ssl.conf
|
||||
#
|
||||
# Note: The following must must be present to support
|
||||
# starting without SSL on platforms with no /dev/random equivalent
|
||||
# but a statically compiled-in mod_ssl.
|
||||
#
|
||||
<IfModule ssl_module>
|
||||
SSLRandomSeed startup builtin
|
||||
SSLRandomSeed connect builtin
|
||||
</IfModule>
|
6
webserver/docker-entrypoint.sh
Normal file
6
webserver/docker-entrypoint.sh
Normal file
@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "starting winow"
|
||||
|
||||
cd /opt/app/winow/
|
||||
oscript main.os
|
7
webserver/scripts/create-symlink-to-current-1cv8.sh
Normal file
7
webserver/scripts/create-symlink-to-current-1cv8.sh
Normal file
@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
platform_path=$(find / -type f -name "1cv8c" -exec dirname {} \; -or -type f -name "1cv8" -exec dirname {} \; -or -type f -name "ragent" -exec dirname {} \; -or -type f -name "crserver" -exec dirname {} \; | uniq)
|
||||
|
||||
mkdir -p /opt/1cv8 \
|
||||
&& ln -s $platform_path /opt/1cv8/current
|
72
webserver/scripts/download_og.sh
Normal file
72
webserver/scripts/download_og.sh
Normal file
@ -0,0 +1,72 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -z "$ONEC_USERNAME" ]
|
||||
then
|
||||
echo "ONEC_USERNAME not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$ONEC_PASSWORD" ]
|
||||
then
|
||||
echo "ONEC_PASSWORD not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$ONEC_VERSION" ]
|
||||
then
|
||||
echo "ONEC_VERSION not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ONEC_RELEASE=`echo $ONEC_VERSION | cut -d . -f 3`
|
||||
echo "Release: "$ONEC_RELEASE
|
||||
|
||||
echo "Downloading Oneget tool from https://github.com/v8platform/oneget"
|
||||
curl -L -o oneget.tar.gz https://github.com/v8platform/oneget/releases/latest/download/oneget_Linux_x86_64.tar.gz \
|
||||
&& mkdir /tmp/oneget_tool \
|
||||
&& tar xzf oneget.tar.gz -C /tmp/oneget_tool \
|
||||
&& rm oneget.tar.gz
|
||||
|
||||
if [ ! -f /tmp/oneget_tool/oneget ]; then
|
||||
echo "Oneget not found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$ONEC_RELEASE" -lt "20" ]]; then
|
||||
package="deb"
|
||||
package_installer_type="."$installer_type
|
||||
else
|
||||
package="linux"
|
||||
package_installer_type=""
|
||||
fi
|
||||
|
||||
case "$installer_type" in
|
||||
edt)
|
||||
echo "EDT"
|
||||
/tmp/oneget_tool/oneget get "edt:linux@"$ONEC_VERSION
|
||||
;;
|
||||
server)
|
||||
/tmp/oneget_tool/oneget get "platform:"$package$package_installer_type".x64@"$ONEC_VERSION
|
||||
;;
|
||||
server32)
|
||||
/tmp/oneget_tool/oneget get "platform:"$package${package_installer_type/32/}".x32@"$ONEC_VERSION
|
||||
;;
|
||||
client)
|
||||
if [[ "$ONEC_RELEASE" -lt "20" ]]; then
|
||||
/tmp/oneget_tool/oneget get "platform:"$package".server.x64@"$ONEC_VERSION
|
||||
fi
|
||||
/tmp/oneget_tool/oneget get "platform:"$package$package_installer_type".x64@"$ONEC_VERSION
|
||||
;;
|
||||
client32)
|
||||
if [[ "$ONEC_RELEASE" -lt "20" ]]; then
|
||||
/tmp/oneget_tool/oneget get "platform:"$package".server.x32@"$ONEC_VERSION
|
||||
fi
|
||||
/tmp/oneget_tool/oneget get "platform:"$package${package_installer_type/32/}".x32@"$ONEC_VERSION
|
||||
;;
|
||||
thin-client)
|
||||
/tmp/oneget_tool/oneget get "platform:"$package"."$installer_type".x64@"$ONEC_VERSION
|
||||
;;
|
||||
thin-client32)
|
||||
/tmp/oneget_tool/oneget get "platform:"$package"."${installer_type/32/}".x32@"$ONEC_VERSION
|
||||
esac
|
||||
|
78
webserver/scripts/install.sh
Normal file
78
webserver/scripts/install.sh
Normal file
@ -0,0 +1,78 @@
|
||||
#!/bin/bash
|
||||
|
||||
ONEC_RELEASE=`echo $ONEC_VERSION | cut -d . -f 3`
|
||||
echo "Release: "$ONEC_RELEASE
|
||||
nls_install="ru"
|
||||
|
||||
if [[ "$ONEC_RELEASE" -lt "20" ]]; then
|
||||
case "$installer_type" in
|
||||
edt)
|
||||
echo "edt"
|
||||
;;
|
||||
server)
|
||||
if [ "$nls" = true ]; then \
|
||||
dpkg -i 1c-enterprise*-{common,server}*.deb; \
|
||||
else \
|
||||
dpkg -i 1c-enterprise*-{common,server}_*.deb; \
|
||||
fi
|
||||
;;
|
||||
server32)
|
||||
if [ "$nls" = true ]; then \
|
||||
dpkg -i 1c-enterprise*-{common,server,ws,crs}*.deb; \
|
||||
else \
|
||||
dpkg -i 1c-enterprise*-{common,server,ws,crs}_*.deb; \
|
||||
fi
|
||||
;;
|
||||
client)
|
||||
if [ "$nls" = true ]; then \
|
||||
dpkg -i 1c-enterprise*-{common,server}_*.deb; \
|
||||
dpkg -i 1c-enterprise*-{common,client}*.deb; \
|
||||
else \
|
||||
dpkg -i 1c-enterprise*-{common,server,client}_*.deb; \
|
||||
fi
|
||||
;;
|
||||
client32)
|
||||
;;
|
||||
thin-client)
|
||||
if [ "$nls" = true ]; then \
|
||||
dpkg -i 1c-enterprise83-thin-client*.deb; \
|
||||
else \
|
||||
dpkg -i 1c-enterprise83-thin-client_*.deb; \
|
||||
fi
|
||||
;;
|
||||
thin-client32)
|
||||
curl --fail -b /tmp/cookies.txt -o thin-client32.tar.gz -L "$THINCLIENT32LINK"
|
||||
esac
|
||||
else
|
||||
if [ "$nls" = true ]; then
|
||||
nls_install="az,ar,hy,bg,hu,el,vi,ka,kk,zh,it,es,lv,lt,de,pl,ro,ru,tr,tk,fr,uk"
|
||||
else
|
||||
nls_install="ru"
|
||||
fi
|
||||
case "$installer_type" in
|
||||
edt)
|
||||
echo "edt"
|
||||
;;
|
||||
server)
|
||||
set -x
|
||||
echo $nls_install
|
||||
./setup-full-${ONEC_VERSION}-x86_64.run --mode unattended --enable-components server,ws,$nls_install
|
||||
;;
|
||||
server32)
|
||||
./setup-full-${ONEC_VERSION}-i386.run --mode unattended --enable-components server,ws,config_storage_server,$nls_install
|
||||
;;
|
||||
client)
|
||||
./setup-full-${ONEC_VERSION}-x86_64.run --mode unattended --enable-components server,client_full,$nls_install
|
||||
;;
|
||||
client32)
|
||||
./setup-full-${ONEC_VERSION}-i386.run --mode unattended --enable-components server,client_full,$nls_install
|
||||
;;
|
||||
thin-client)
|
||||
./setup-thin-${ONEC_VERSION}-x86_64.run --mode unattended --enable-components ru
|
||||
;;
|
||||
thin-client32)
|
||||
./setup-thin-${ONEC_VERSION}-i386.run --mode unattended --enable-components ru
|
||||
;;
|
||||
|
||||
esac
|
||||
fi
|
8
webserver/scripts/remove-dst-root-ca-x3.sh
Normal file
8
webserver/scripts/remove-dst-root-ca-x3.sh
Normal file
@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
FILE=/usr/share/ca-certificates/mozilla/DST_Root_CA_X3.crt
|
||||
if [[ -f "$FILE" ]]; then
|
||||
rm -r $FILE
|
||||
update-ca-certificates
|
||||
fi
|
39
webserver/selections.conf
Normal file
39
webserver/selections.conf
Normal file
@ -0,0 +1,39 @@
|
||||
d-i keyboard-configuration/unsupported_layout boolean true
|
||||
keyboard-configuration keyboard-configuration/unsupported_layout boolean true
|
||||
d-i keyboard-configuration/unsupported_config_options boolean true
|
||||
keyboard-configuration keyboard-configuration/unsupported_config_options boolean true
|
||||
d-i keyboard-configuration/variantcode string ,
|
||||
keyboard-configuration keyboard-configuration/variantcode string ,
|
||||
d-i keyboard-configuration/variant select Russian
|
||||
keyboard-configuration keyboard-configuration/variant select Russian
|
||||
d-i keyboard-configuration/ctrl_alt_bksp boolean false
|
||||
keyboard-configuration keyboard-configuration/ctrl_alt_bksp boolean false
|
||||
d-i keyboard-configuration/switch select No temporary switch
|
||||
keyboard-configuration keyboard-configuration/switch select No temporary switch
|
||||
keyboard-configuration console-setup/detected note
|
||||
d-i keyboard-configuration/altgr select The default for the keyboard layout
|
||||
keyboard-configuration keyboard-configuration/altgr select The default for the keyboard layout
|
||||
keyboard-configuration console-setup/detect detect-keyboard
|
||||
keyboard-configuration console-setup/ask_detect boolean false
|
||||
d-i keyboard-configuration/modelcode string pc105
|
||||
keyboard-configuration keyboard-configuration/modelcode string pc105
|
||||
d-i keyboard-configuration/compose select No compose key
|
||||
keyboard-configuration keyboard-configuration/compose select No compose key
|
||||
d-i keyboard-configuration/unsupported_options boolean true
|
||||
keyboard-configuration keyboard-configuration/unsupported_options boolean true
|
||||
d-i keyboard-configuration/toggle select Alt+Shift
|
||||
keyboard-configuration keyboard-configuration/toggle select Alt+Shift
|
||||
d-i keyboard-configuration/unsupported_config_layout boolean true
|
||||
keyboard-configuration keyboard-configuration/unsupported_config_layout boolean true
|
||||
d-i keyboard-configuration/model select Generic 105-key PC (intl.)
|
||||
keyboard-configuration keyboard-configuration/model select Generic 105-key PC (intl.)
|
||||
d-i keyboard-configuration/xkb-keymap select
|
||||
keyboard-configuration keyboard-configuration/xkb-keymap select
|
||||
d-i keyboard-configuration/layout select Russian
|
||||
keyboard-configuration keyboard-configuration/layout select Russian
|
||||
d-i keyboard-configuration/optionscode string grp:alt_shift_toggle,grp_led:scroll
|
||||
keyboard-configuration keyboard-configuration/optionscode string grp:alt_shift_toggle,grp_led:scroll
|
||||
d-i keyboard-configuration/store_defaults_in_debconf_db boolean true
|
||||
keyboard-configuration keyboard-configuration/store_defaults_in_debconf_db boolean true
|
||||
d-i keyboard-configuration/layoutcode string us,ru
|
||||
keyboard-configuration keyboard-configuration/layoutcode string us,ru
|
10
webserver/test.vrd
Normal file
10
webserver/test.vrd
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
base="/test"
|
||||
ib="Srvr=mainframe;Ref=tg_bot"
|
||||
enableStandardOData="true">
|
||||
<ws publishExtensionsByDefault="true" />
|
||||
<httpServices publishByDefault="true" publishExtensionsByDefault="true"/>
|
||||
</point>
|
Loading…
Reference in New Issue
Block a user