Сейчас в репозитории три сайта:
eyepoint.physlab.ru
usbadc10.physlab.ru
doc.mdrive.tech
Один сайт - одна линейка товаров. Каждый из сайтов находится внутри папки sites. В ветке dev-X.X
версии сайтов с приставкой dev.
, в dev-X.X-stable
продакшен версии сайтов. В прод все сайты запускаются с помощью глобального docker-compose-файла на сервере vili.
Каждый сайт использует site_engine - набор общего кода, шаблонов, стилей и общих иконок. Однако у каждого сайта есть и свои части кода, а так же переводы и картинки. Такое частичное разделение было сделано вынужденно чтобы по максимуму избавиться от повторяющегося кода разных сайтов. Так же из-за того что данные сйтов хранятся в питоновских файлах, приходится использовать динамическую загрузку модулей в server.py
Сайты и общий код разделены по принципу: в каждой папке сайта находятся только данные сайта. (.py-файлы с описанием продуктов тоже считать данными сайта). Таким образом при изменении конкретного сайта нужно изменять его в папке sites, а если нужно изменить что-то общее, то в папке site_engine.
Для разработки сайта удобно запустить его на ПК локально. Для этого:
- Распаковать тестовое наполнение страниц загрузки. Т.е. папку download из архива
sites/<sitename>/<sitename>_download_sample.zip
скопировать вsites/<sitename>/download
- Скачать и установить python3.8
- Установить все необходимые пакеты и запустить:
python -m pip install -r requirements.txt
python server.py --site=<sitename>
Сайт появится на localhost:8080
Сайт можно разрабатывать и под windows. Для этого нужно дополнительно установить пакет gettext
Для разворачивания на серверах ЦИФ МГУ есть готовые конфигурации и инструкции в приватном репозитории https://github.com/EPC-MSU/ep-server-config. Если ты из ЦИФ и разворачиваешь новый проект на наших серверах, читай инструкцию из репозитория выше.
Для полноценной работы сайта нужно добавить контент на страницу загрузки, см. инструкцию "Добавление файлов загрузки"
В случае работы на сервере нужно пробросить volume в app/sites/<sitename>/download
. На сервере на порту 5000 должен подниматься sftp-сервер, который занимается проброской volume.
Так же в docker-compose на сервере должен быть build с указанием на Dockerfile конкретного сайта.
// TODO: Вставить сюда пример куска большого докер-компоуза
Описание всех продуктов лежит в файле sites//data/products.py. Новый продукт нужно создать по образцу, добавив имя, путь к
картинке, описание и список технических характеристик.
Картинка продукта должна лежать в папке sites//images (см. примеры других продуктов)
После добавления продукта, а также после исправления любого текста, который видит пользователь (описание, вводная часть - любое слово, любая буква в интерфейсе) нужно обновлять файлы переводов!
- Собрать файлы переводов
Для обновления переводов есть специальный скрипт scripts/update-po-files.sh Его нужно запустить из папки scripts (При этом пакет gettext должен быть установлен):
bash scripts/update-po-files.sh
Этот скрипт просмотрит четыре файла указанные в нём, один из которых общий для всех сайтов текст, другие три - в папке sites//data, найдёт все места, которые нуждаются в переводе на английский, и добавит во временный pot-файл перевода эти места. Этот же скрипт второй командой смерджит новые места с существующими переводами.
После чего нужно текст перевода в .po
нужно написать самому. Для этого удобно использовать программу Poedit. С её помощью нужно открыть файл
sites//locale/en_US/LC_MESSAGES/en.po и добавить отсутствующие переводы.
Обрати внимание: если сервер развёрнут локально (не Docker), нужно ещё скомпилировать эти переводы. За это отвечает
скрипт. Если будете вносить изменения в rebuild-locale.sh, то обновите докерфайлы.
cd scripts
bash scripts/rebuild-locale.sh
Пусть, например, для EyePoint P10 появился новый софт (помимо "прошивки" и "драйвера") - например, "плагины" (plugins)
Тогда в папке EyePoint_P10 (имя папки - как в "name" продукта, см. файл data/products) нужно создать папку plugins и
накидать туда файлы для скачивания. Имена файлов нужно давать по образцу файлов в других папках.
Затем нужно добавить новую категорию в список categories в файле data/download.py. Делать это нужно по образцу других
категорий.
После этого не забыть обновить файл перевода.
К Docker volume со скачиваемыми файлами можно подключиться удалённо через ssh. Для этого есть специальный контейнер dockershare который разворачивает ssh сервер с доступом исключительно к Docker volume.
Зайти по ssh (sftp, sshfs) можно вот так:
ssh -p 5000 root@<домен сайта> -i id_rsa
id_rsa - приватный ключ доступа. Публичный ключ доступа лежит в репозитории рядом с файлом контейнера в папке dockershare; приватный ключ должен быть у администратора. При обновлении ключей нужно заново сгенерировать пару приватный\публичный ключ, публичный ключ положить в папку с контейнером dockershare в репозиторий
Содержимое docker volume отображается в папку /drive контейнера
Для работы с папкой удобно пользоваться командой sshfs. Пример её запуска:
sshfs -p 5000 -oIdentityFile=/home/walker/Job/keys/id_rsa root@eyepoint.kea.su:/drive /home/walker/foo
/home/walker/Job/keys/id_rsa - полный путь до приватного ключа eyepoint.kea.su - доменное имя сайта (либо IP) /home/walker/foo - путь, по которому хотите смонтировать удалённую папку. Точка монтирования должна существовать.
<имя продукта>
|
|--<категория софта>
| |
| | - <имя файла в формате имя-версия.версия.версия-платформа.расширение>
| | - <имя файла в формате имя-версия.версия.версия-платформа.расширение>
| | ...
|--<категория софта>
| |
| | - <имя файла в формате имя-версия.версия.версия-платформа.расширение>
<имя продукта>
|
...
Например:
EyePoint_P10
|
|--documentation
| |
| | - manual-0.0.0-d.pdf
| | - manual-0.0.1-d.pdf
| | - newman-1.1.5-h.txt
|
|--software
| |
| | - gui-5.5.0-win32.exe
| | - gui-5.5.0-deb.rpm
|
EyePoint_S2
|
|--documentation
| |
| | - man-5.4.2-h.html
| | - man.2.2.2-y.pdf
|
|--driver
| |
| | - driver-0.0.0-win.inf
| | - driver-0.0.0-win.cat
|
Система с файлами достаточно гибкая. Версии файлов обязательны. Имена категорий софта (driver, documentation, software) и иконки нужно указать в data/download.py Подробнее о том, как добавлять новые файлы и новые категории, смотри главу "Как модифицировать" на Wiki странице
На машине с наполненным volume с именем download и развёрнутым контейнером сайта, который должен быть назван epw, делаем:
docker run --rm --volumes-from epw -v $(pwd):/backup busybox tar cvf /backup/backup.tar /app/sites/<sitename>/download
Путь /app/sites//download совпадает с путём при создании контейнера. В результате получается файл backup.tar. Переместите файл backup.tar на другой хост, например через sshfs (установите sshfs: sudo apt install sshfs) На другой системе положите файл backup.tar в текущую директорию и создайте контейнер для распаковки:
sudo docker create --mount source=download,destination=/app/sites/<sitename>/download --name unpack busybox true
Далее запустите в этом контейнере распаковку, аналогично тому, как это было описано выше для архива с примером данных (download_sample):
sudo docker run --rm --volumes-from unpack -v $(pwd):/backup busybox tar xvf /backup/backup.tar
docker container rm unpack
- Скопируйте папку sites, измените всё в ней в соответствии с названием и контентом сайт ** Докерфайл, изображения, описание внутри data
- Добавьте строки об обновлении переводов в новом сайте во все скрипты в папке scripts
- Обновите переводы
- Желательно добавьте пример архива файлов
Иконки флагов взяты с
https://github.com/HatScripts/circle-flags.git
Иконки категорий софта и футера взяты у гугла в формате svg и перекрашены добавлением fill=
https://fonts.google.com/icons?icon.set=Material+Symbols
https://ximc.ru/issues/37198
https://ximc.ru/issues/38120
https://ximc.ru/issues/36703
https://ximc.ru/issues/47312
https://ximc.ru/versions/3695