diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..5af3f91 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,17 @@ +*.md +.cache +.vscode +node_modules/ +docker-compose.yml +**/Dockerfile +.git* +#source +#.npmrc +.eslintrc.json +#./package*.json +yarn.lock +config/ +Jenkinsfile* +ecosystem.config.js +.env* +/site \ No newline at end of file diff --git a/.readthedocs.yaml b/.readthedocs.yaml deleted file mode 100644 index 43068e3..0000000 --- a/.readthedocs.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# .readthedocs.yaml -# Read the Docs configuration file -# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details - -# Required -version: 2 -build: - os: "ubuntu-22.04" - tools: - python: "3.8" - -python: - install: - - requirements: mkdocs/requirements.txt - -mkdocs: - configuration: mkdocs.yml - -# Optionally set the version of Python and requirements required to build your docs -#python: -# version: "3.8" -# install: -# - requirements: mkdocs/requirements.txt \ No newline at end of file diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..70e19de --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,65 @@ +node { + cleanWs() + checkout scm + + docker_tag = 'latest' + projectname ='doc' + + packagejson = readJSON file: 'package.json' + docker_tag = packagejson['version'] + projectname = packagejson['name'] + + image_name = 'dhub.lex.lan:5001/doc/' + projectname; + image_doc = image_name + ':' + docker_tag; + image_doc_latest = image_name + ':latest'; +} +pipeline { + agent { + label 'jenkins-node-01' + } + options { + timestamps() + buildDiscarder logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '5') + ansiColor('xterm') + } + + stages { + stage('Check') { + steps { + echo 'Checking..' + + sh label: '', script: 'docker --version' + + //sh "printenv | sort" + } + } + stage('Docker build') { + steps { + echo 'Docker build....' + + sh label: '', script: 'docker build -f ./docker/Dockerfile --build-arg docker_registry=dhub.lex.lan:5000 -t ' + image_doc + ' .' + } + } + stage('Docker tag latest') { + steps { + sh label: 'tag image_doc latest', script: 'docker tag ' + image_doc + ' ' + image_doc_latest + } + } + stage('docker push'){ + steps { + script { + docker.withRegistry('http://dhub.lex.lan:5001/', '6173afa3-27b0-4357-8b97-9d1ee071784c') { + docker.image(image_doc).push() + docker.image(image_doc_latest).push() + } + } + } + } + stage('docker cleanup'){ + steps { + sh label: '', script: 'docker rmi ' + image_doc + sh label: '', script: 'docker rmi ' + image_doc_latest + } + } + } +} \ No newline at end of file diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..488a084 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,40 @@ +FROM alpine:3.20 AS builder + +ENV PYTHONUNBUFFERED=1 + +RUN apk add --no-cache \ + ca-certificates \ + bash \ + git \ + openssh-client \ + python3 \ + python3-dev \ + py3-pip \ + build-base \ + weasyprint + +RUN python -m venv /src/env +ENV PATH="/src/env/bin:$PATH" + +WORKDIR /src + +COPY requirements.txt /src/ +RUN pip install --upgrade pip && \ + pip install -r /src/requirements.txt && \ + rm -rf /tmp/* /var/cache/apk/* + +FROM builder as makestatic + +COPY docs /src/docs/ +COPY zensical.toml /src/ + +RUN cp -r /src/mkdocs.yml /src/ 2>/dev/null || true +RUN cp -r /src/custom_theme /src/overrides 2>/dev/null || true +RUN cd /src && zensical build --config-file zensical.toml + + +FROM nginx:alpine + +COPY docker/default.conf /etc/nginx/conf.d/default.conf +COPY --from=makestatic /src/site /sites/app.lexema.ru/docs +EXPOSE 80 \ No newline at end of file diff --git a/docker/default.conf b/docker/default.conf new file mode 100644 index 0000000..2395804 --- /dev/null +++ b/docker/default.conf @@ -0,0 +1,23 @@ + +server { + listen 80; + + # location / { + root /sites/app.lexema.ru/docs; + # } + #expires $expires; + + client_max_body_size 500M; + + gzip on; + gzip_comp_level 4; + gzip_types text/html text/plain text/css application/javascript; + + proxy_redirect off; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-NginX-Proxy true; + +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..345aff6 --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "name": "ecm-user-manuals", + "version": "0.0.1", + "description": "ecm-user-manuals doc" +} \ No newline at end of file diff --git a/readme.md b/readme.md index 3ee03cc..637b688 100644 --- a/readme.md +++ b/readme.md @@ -1,26 +1,23 @@ -Для разработки и проверки документации можно использовать команды -* mkdocs serve (с созданием pdf файлов) -* mkdocs serve -f dev.yml (без создания pdf файлов) -* mkdocs build -f admin-manuals.yml (с созданием pdf файла с инструкциями для администратора) -Перед запуском надо установить mkdocs и его расширения. Сделать это можно при помощи команды, запущенной в папке mkdocs -``` -pip install -r requirements.txt -``` +# Разработка документации (Zensical) -Чтобы включить увеличение изображения, необходимо добавить . Если не работает (а это происходит при работе плагина img2fig), то использовать html-вариант. Автоматический конвертер первого варианта во второй (zoom.py) есть в bitedo-doc и документации ERP. -``` -а) ![Рис 1](examplel.png) -б) Рис 1 -``` +## Локальная разработка с live-превью -В случае ошибки **no library called "cairo" was found** необходимо скачать библиотеки: +**Zensical** имеет встроенный dev-сервер с **live-reload** — это полноценная и более быстрая замена старой команде `mkdocs serve`. -https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer +### Как запустить -https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases +1. Установите Zensical: -Если при запуске команды **mkdocs serve -f dev.yml** появляется ошибка что данная команда не определена, то в переменнах средах укажите путь: **C:\Users\User\AppData\Roaming\Python\Python310\Scripts** +```bash +pip install zensical +Перейдите в корень проекта и запустите dev-сервер: -333 \ No newline at end of file +zensical serve + +Или явно указав конфигурационный файл: + +zensical serve --config-file zensical.toml + +Страница для dev разработки http://localhost:8000/ \ No newline at end of file diff --git a/readme_old.md b/readme_old.md new file mode 100644 index 0000000..3ee03cc --- /dev/null +++ b/readme_old.md @@ -0,0 +1,26 @@ +Для разработки и проверки документации можно использовать команды +* mkdocs serve (с созданием pdf файлов) +* mkdocs serve -f dev.yml (без создания pdf файлов) +* mkdocs build -f admin-manuals.yml (с созданием pdf файла с инструкциями для администратора) + +Перед запуском надо установить mkdocs и его расширения. Сделать это можно при помощи команды, запущенной в папке mkdocs +``` +pip install -r requirements.txt +``` + +Чтобы включить увеличение изображения, необходимо добавить . Если не работает (а это происходит при работе плагина img2fig), то использовать html-вариант. Автоматический конвертер первого варианта во второй (zoom.py) есть в bitedo-doc и документации ERP. +``` +а) ![Рис 1](examplel.png) +б) Рис 1 +``` + +В случае ошибки **no library called "cairo" was found** необходимо скачать библиотеки: + +https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer + +https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases + +Если при запуске команды **mkdocs serve -f dev.yml** появляется ошибка что данная команда не определена, то в переменнах средах укажите путь: **C:\Users\User\AppData\Roaming\Python\Python310\Scripts** + + +333 \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..5274d73 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,9 @@ +zensical +mkdocs-glightbox==0.4.0 +weasyprint==52.5 +mkdocs-with-pdf +pymdown-extensions +mkdocs-literate-nav +mkdocs-section-index +mkdocs-include-markdown-plugin +mkdocs-video \ No newline at end of file diff --git a/zensical.toml b/zensical.toml new file mode 100644 index 0000000..a34df0d --- /dev/null +++ b/zensical.toml @@ -0,0 +1,56 @@ +[project] +site_name = "Руководство администратора Lexema-ECM" +site_description = "Официальная документация по администрированию системы Lexema-ECM" +site_author = "ООО \"Лексема\"" + +docs_dir = "docs" +site_dir = "site" + +[project.theme] +name = "material" +variant = "classic" + +palette.primary = "green" +palette.accent = "orange" + +features = [ + "navigation.instant", + "navigation.top", + "navigation.tracking", + "toc.follow", + "toc.integrate", + "navigation.tabs.sticky", + "search.suggest", + "header.autohide", + "navigation.path", +] + +[project.markdown_extensions] +toc = { separator = "_", permalink = "#" } +attr_list = {} +admonition = {} +sane_lists = {} +def_list = {} + +[project.markdown_extensions.pymdownx.highlight] +[project.markdown_extensions.pymdownx.superfences] +[project.markdown_extensions.pymdownx.details] +[project.markdown_extensions.pymdownx.tabbed] +alternate_style = true + +[project.markdown_extensions.pymdownx.tasklist] +custom_checkbox = true + +[project.plugins] +glightbox = { zoomable = true } +search = { lang = ["ru", "en"] } +"section-index" = {} +"include-markdown" = {} +"literate-nav" = { nav_file = "SUMMARY.md" } +"mkdocs-video" = {} + + +extra_css = ["css/extra.css"] +extra_javascript = ["javascripts/extra.js"] + +copyright = "© ООО \"Лексема\"" \ No newline at end of file