Перейти к основному содержимому

Публикация личного кабинета (Ubuntu, Apache)

Чтобы пользователи могли работать с личным кабинетом (далее — ЛК), информационная база (далее — ИБ) «Управление IT-отделом 8» должна быть опубликована на веб-сервере.

В этой статье рассмотрен случай, когда ИБ опубликована на Apache под Ubuntu.

Предусловие

Перед публикацией ЛК убедитесь, что ИБ уже опубликована и открывается в браузере. Все команды выполняются от имени администратора (через sudo).

В примерах используются такие значения — подставьте свои:

ЧтоЗначение в примерах
Папка публикации ИБ на диске/var/www/1c/it4demo
Имя публикации ИБ (адрес)it4demo
Папка ЛК на диске/var/www/1c/it4demo_lk
Адрес ЛКhttp://localhost/it4demo/lk/

Главное правило: папка ЛК лежит рядом с публикацией, а не внутри неё

Важно!

Не кладите файлы ЛК внутрь папки публикации базы — например, в /var/www/1c/it4demo/lk. Кабинет там не откроется.

Публикация 1С добавляет в настройки Apache блок вида <Directory "/var/www/1c/it4demo/"> с указанием передавать все запросы модулю 1С. Вложенные папки наследуют эту настройку, поэтому файлы кабинета уйдут в 1С вместо браузера — и вместо ЛК откроется страница 1С или ошибка 404.

Поэтому папку ЛК создаём соседней/var/www/1c/it4demo_lk рядом с /var/www/1c/it4demo.

Имя папки на диске и адрес в браузере — разные вещи: папка называется it4demo_lk, а открываться кабинет будет по адресу http://localhost/it4demo/lk/. Связывает их настройка Apache, которую вы подготовите на шаге 5.


Часть 1. Установка

Шаг 1. Скачайте и распакуйте дистрибутив

Скачайте дистрибутив личного кабинета с нашего сайта — файл вида itlk_1_0_0_full.zip (цифры в имени — версия ЛК) — и распакуйте его во временную папку:

sudo apt install unzip # если unzip ещё не установлен
unzip ~/Загрузки/itlk_1_0_0_full.zip -d ~/Загрузки/itlk
ls ~/Загрузки/itlk

В распакованной папке должны быть каталоги app, deploy, docs и файлы README.html, CHANGELOG.md.

Содержимое распакованного архива

Шаг 2. Создайте папку для файлов ЛК

sudo mkdir -p /var/www/1c/it4demo_lk

Обратите внимание: папка создаётся рядом с папкой публикации базы /var/www/1c/it4demo, а не внутри неё (см. раздел выше).

Папки it4demo и it4demo_lk рядом в каталоге 1c

Шаг 3. Скопируйте файлы ЛК

Скопируйте содержимое папки app — то есть сами файлы и папки, а не папку app целиком (точка в конце пути означает «содержимое»):

sudo cp -r ~/Загрузки/itlk/app/. /var/www/1c/it4demo_lk/
ls /var/www/1c/it4demo_lk

После копирования папка должна выглядеть так:

/var/www/1c/it4demo_lk/
├── index.html ← должен лежать здесь, а не в подпапке app
├── config.json
├── manifest.json
├── assets/
└── kb/

Выдайте права на чтение веб-серверу и проверьте, что они применились:

sudo chown -R www-data:www-data /var/www/1c/it4demo_lk
sudo chmod -R u=rwX,go=rX /var/www/1c/it4demo_lk
ls -lh /var/www/1c/it4demo_lk

В выводе ls -lh у каждой строки должно быть:

  • владелец и группа — www-data www-data;
  • у файлов права -rw-r--r--: чтение открыто всем, запись — только владельцу;
  • у папок строка начинается с d, а к правам добавлен x — без него Apache не сможет в них зайти.
Частая ошибка

Скопирована сама папка app, и получился путь /var/www/1c/it4demo_lk/app/index.html. В этом случае кабинет не откроется — перенесите содержимое на уровень выше.

Содержимое папки кабинета: index.html, владелец www-data и права на чтение

Шаг 4. Укажите адрес API

Откройте файл настроек кабинета:

sudo nano /var/www/1c/it4demo_lk/config.json

Впишите в строку apiUrl адрес обращения к API вашей базы:

{
"$schema": "./config.schema.json",
"apiUrl": "http://localhost/it4demo/hs/api/v2/"
}

Адрес строится по образцу http://[хост]/[имя публикации]/hs/api/v2/, где:

  • [хост] — адрес веб-сервера (localhost, доменное имя или IP);
  • [имя публикации] — имя, под которым опубликована ИБ.

Сохраните файл: Ctrl + O, затем Enter, выход — Ctrl + X.

Проверьте адрес сразу:

curl -I http://localhost/it4demo/hs/api/v2/

Ответ 401 Unauthorized — адрес верный, сервер запрашивает авторизацию. Ответ 404 означает, что адрес неверный: уточните путь публикации базы.

Файл config.json с заполненной строкой apiUrl

Проверка адреса API: ответ 401 Unauthorized

Шаг 5. Подготовьте файл настроек Apache

Скопируйте из архива файл deploy/apache/lk-alias.conf в каталог настроек Apache и откройте его:

sudo cp ~/Загрузки/itlk/deploy/apache/lk-alias.conf /etc/apache2/conf-available/
sudo nano /etc/apache2/conf-available/lk-alias.conf

Под шапкой из комментариев есть две пары строк: рабочая — с путями Windows, и закомментированная — с путями Ubuntu. Поменяйте их местами: поставьте # в начале первых двух строк и уберите # у следующих двух.

Было:

Define ITLK_PATH /it4demo/lk
Define ITLK_DIR C:/www/it4demo_lk

# Ubuntu:
# Define ITLK_PATH /it4demo/lk
# Define ITLK_DIR /var/www/1c/it4demo_lk

Стало:

# Define ITLK_PATH /it4demo/lk
# Define ITLK_DIR C:/www/it4demo_lk

# Ubuntu:
Define ITLK_PATH /it4demo/lk
Define ITLK_DIR /var/www/1c/it4demo_lk

Значения подставьте свои:

СтрокаЧто указатьПример
ITLK_PATHадрес, по которому будет открываться кабинет/it4demo/lk
ITLK_DIRпапка из шага 2/var/www/1c/it4demo_lk

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

Файл lk-alias.conf с заполненными строками Define

Шаг 6. Подключите файл и нужные модули

Файл настроек кабинета нужно подключить до блока публикации базы: Apache применяет первое подходящее правило, и при обратном порядке адрес /it4demo/lk перехватит публикация 1С.

Найдите, где объявлена публикация:

sudo grep -rn 'Alias' /etc/apache2/apache2.conf \
/etc/apache2/conf-enabled/ /etc/apache2/sites-enabled/

Вы ищете строку вида Alias "/it4demo" "/var/www/1c/it4demo/". Дальше действуйте по тому, в каком файле она нашлась.

Публикация в apache2.conf (так её обычно дописывает публикатор 1С). Откройте файл:

sudo nano /etc/apache2/apache2.conf

и непосредственно перед найденной строкой вставьте:

Include conf-available/lk-alias.conf

Публикация в одном из файлов conf-enabled/ (например 1c-demo.conf). Откройте apache2.conf, найдите строку IncludeOptional conf-enabled/*.conf и вставьте ту же строку Include перед ней — так настройки кабинета прочитаются раньше всего каталога.

Публикация внутри <VirtualHost> в sites-enabled/. Порядок в apache2.conf тут не поможет: директивы виртуального хоста проверяются раньше. Перенесите содержимое lk-alias.conf внутрь того же блока <VirtualHost>, выше строк публикации.

Почему не a2enconf

Команда a2enconf подключает файлы через каталог conf-enabled, а он читается в той строке apache2.conf, где стоит IncludeOptional conf-enabled/*.conf. Публикация 1С обычно дописана выше — и тогда её Alias оказывается первым, а кабинет открывается ошибкой 1С «HTTP: Not found». Явный Include перед блоком публикации от этого избавляет.

Затем включите модули, которые нужны кабинету:

sudo a2enmod headers alias

Если модули уже включены, Apache сообщит об этом — это нормально.

Строка Include перед блоком публикации 1С в apache2.conf

Шаг 7. Проверьте настройки и перезапустите Apache

Сначала — проверка синтаксиса. Она не трогает работающий сервер:

sudo apachectl configtest

Ожидаемый ответ — Syntax OK. Если вместо него выводится ошибка, в сообщении указаны файл и номер строки: чаще всего это опечатка в пути.

Важно!

Не перезапускайте Apache, пока не получите Syntax OK. С ошибкой в настройках сервер не запустится, и вместе с кабинетом станет недоступна опубликованная база 1С.

После успешной проверки примените настройки:

sudo systemctl reload apache2

Вывод apachectl configtest: Syntax OK

Шаг 8. Проверьте результат

Откройте в браузере адрес личного кабинета:

http://localhost/it4demo/lk/

Должна появиться форма входа.

Форма входа личного кабинета

Проверка после установки

Пройдите список целиком — это пара минут:

  1. Кабинет открывается, появляется форма входа.
  2. Кабинет не спрашивает адрес информационной базы. Если спрашивает — не прочитан config.json.
  3. Вход выполняется, открывается список задач.
  4. Открывается вкладка «База знаний», статьи читаются, в статьях видны схемы и цветная подсветка кода.
  5. Задача с вложением открывается, вложение скачивается без повреждений.
  6. Обновление страницы (F5) не приводит к выходу из системы.

Часть 2. Обновление версии

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

Шаг 1. Сохраните config.json

sudo cp /var/www/1c/it4demo_lk/config.json ~/config.json.backup

В нём указан адрес API вашей базы — это единственное, что нужно сохранить.

Шаг 2. Распакуйте новую версию

unzip ~/Загрузки/itlk_1_0_1_full.zip -d ~/Загрузки/itlk-new

Шаг 3. Очистите папку кабинета

sudo rm -rf /var/www/1c/it4demo_lk/*
Проверьте путь перед выполнением

Команда удаляет всё содержимое указанной папки без подтверждения. Убедитесь, что в ней написано именно /var/www/1c/it4demo_lk/*.

Именно удалите, а не копируйте поверх

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

Шаг 4. Скопируйте файлы новой версии

sudo cp -r ~/Загрузки/itlk-new/app/. /var/www/1c/it4demo_lk/

Шаг 5. Верните config.json и права

sudo cp ~/config.json.backup /var/www/1c/it4demo_lk/config.json
sudo chown -R www-data:www-data /var/www/1c/it4demo_lk
sudo chmod -R u=rwX,go=rX /var/www/1c/it4demo_lk

Шаг 6. Проверьте результат

Откройте кабинет в браузере и обновите страницу с очисткой кэша: Ctrl + F5.

Убедитесь, что версия обновилась:

head -3 /var/www/1c/it4demo_lk/manifest.json

Значение поля version должно совпадать с версией нового архива. Что изменилось в версии, описано в CHANGELOG.md в корне архива.

Файл manifest.json с полем version

Совет

Храните архив предыдущей версии, пока новая не проработает без замечаний хотя бы несколько дней. Откат выполняется тем же способом: распакуйте прежнюю версию и верните свой config.json.


Если что-то не работает

Что видноПричина и решение
Вместо кабинета — текст с HTTP: Not found и Ошибка при выполнении запроса GET к ресурсу /lkОтвечает публикация 1С: она перехватила адрес кабинета. Строка Include conf-available/lk-alias.conf должна стоять выше блока публикации в apache2.conf (шаг 6). Если вы подключали файл через a2enconf, отключите: sudo a2disconf lk-alias — и пропишите Include вручную
Открывается 1С или ошибка 404, хотя файлы на местеКроме порядка подключения (строка выше) проверьте ещё два места. Первое: папка ЛК не должна лежать внутри папки публикации /var/www/1c/it4demo — перенесите её рядом, в /var/www/1c/it4demo_lk, и поправьте ITLK_DIR. Второе: если публикация 1С описана внутри виртуального хоста (файл в /etc/apache2/sites-available/), перенесите содержимое lk-alias.conf внутрь того же блока <VirtualHost>, выше строк публикации 1С
Пустая страница, в консоли браузера — ошибки загрузки файловСкопирована сама папка app. Проверьте, что index.html лежит прямо в /var/www/1c/it4demo_lk (шаг 3)
Кабинет спрашивает адрес информационной базыНе прочитан config.json: проверьте, что файл лежит рядом с index.html, поле apiUrl заполнено и не нарушен синтаксис (лишняя запятая, одинарные кавычки)
Вход не проходит, ошибка 401Логин и пароль не приняты самой 1С. Проверьте учётную запись, войдя с ней в базу напрямую
Ошибка 403Нет прав на чтение папки. Повторите команды chown и chmod из шага 3
Список файлов вместо кабинетаНе применились настройки из lk-alias.conf: проверьте sudo apachectl configtest и что выполнены a2enconf lk-alias и systemctl reload apache2
Нет диаграмм и подсветки кода, шрифты стандартныеНе скопирована папка assets — скопируйте её из app целиком
После обновления интерфейс ведёт себя странноБраузер использует файлы из кэша. Обновите страницу с очисткой кэша: Ctrl + F5

Журнал ошибок Apache: /var/log/apache2/error.log. Посмотреть последние записи:

sudo tail -n 50 /var/log/apache2/error.log

Что приложить к обращению в поддержку

  • Файл manifest.json из папки кабинета целиком.
  • Адрес, по которому открывается кабинет, и значение apiUrl из config.json.
  • Ваш файл /etc/apache2/conf-available/lk-alias.conf.
  • Вывод команд sudo apachectl -S и sudo apachectl -M.
  • Снимок вкладки Console браузера (клавиша F12) с сообщениями об ошибках.
Важно!

Описанный в статье функционал доступен в конфигурации «Управление IT-отделом» редакции 4.0.