Compare commits
6
Commits
v0.2.7
..
73f68e9a2f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
73f68e9a2f | ||
|
|
21144eb825 | ||
|
|
d0e8ca2e8d | ||
|
|
39fbfd2193 | ||
|
|
8379d734dd | ||
|
|
10c99fc216 |
+105
-467
@@ -1,279 +1,70 @@
|
|||||||
### PyCharm+iml template
|
# ==============================================================================
|
||||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
|
# .gitignore для проекта ETPGRF Site (Django + Node.js/Frontend + Docker)
|
||||||
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
# ==============================================================================
|
||||||
|
|
||||||
# User-specific stuff
|
# ------------------------------------------------------------------------------
|
||||||
.idea/**/workspace.xml
|
# 1. Среды разработки и редакторы кода (IDE & Editors)
|
||||||
.idea/**/tasks.xml
|
# ------------------------------------------------------------------------------
|
||||||
.idea/**/usage.statistics.xml
|
# JetBrains IDEs (PyCharm, WebStorm, IntelliJ IDEA и др.):
|
||||||
.idea/**/dictionaries
|
# Игнорируем полностью конфигурационную директорию .idea, чтобы локальные настройки,
|
||||||
.idea/**/shelf
|
# списки задач, кэши индексации и конфигурации раннеров не попадали в репозиторий.
|
||||||
|
.idea/
|
||||||
# AWS User-specific
|
*.iml
|
||||||
.idea/**/aws.xml
|
|
||||||
|
|
||||||
# Generated files
|
|
||||||
.idea/**/contentModel.xml
|
|
||||||
|
|
||||||
# Sensitive or high-churn files
|
|
||||||
.idea/**/dataSources/
|
|
||||||
.idea/**/dataSources.ids
|
|
||||||
.idea/**/dataSources.local.xml
|
|
||||||
.idea/**/sqlDataSources.xml
|
|
||||||
.idea/**/dynamic.xml
|
|
||||||
.idea/**/uiDesigner.xml
|
|
||||||
.idea/**/dbnavigator.xml
|
|
||||||
|
|
||||||
# Gradle
|
|
||||||
.idea/**/gradle.xml
|
|
||||||
.idea/**/libraries
|
|
||||||
|
|
||||||
# Gradle and Maven with auto-import
|
|
||||||
# When using Gradle or Maven with auto-import, you should exclude module files,
|
|
||||||
# since they will be recreated, and may cause churn. Uncomment if using
|
|
||||||
# auto-import.
|
|
||||||
# .idea/artifacts
|
|
||||||
# .idea/compiler.xml
|
|
||||||
# .idea/jarRepositories.xml
|
|
||||||
# .idea/modules.xml
|
|
||||||
# .idea/*.iml
|
|
||||||
# .idea/modules
|
|
||||||
# *.iml
|
|
||||||
# *.ipr
|
|
||||||
|
|
||||||
# CMake
|
|
||||||
cmake-build-*/
|
|
||||||
|
|
||||||
# Mongo Explorer plugin
|
|
||||||
.idea/**/mongoSettings.xml
|
|
||||||
|
|
||||||
# File-based project format
|
|
||||||
*.iws
|
*.iws
|
||||||
|
*.ipr
|
||||||
|
|
||||||
# IntelliJ
|
# Visual Studio Code:
|
||||||
out/
|
# Локальные настройки редактора, конфигурации отладки и расширений
|
||||||
|
.vscode/
|
||||||
|
*.code-workspace
|
||||||
|
|
||||||
# mpeltonen/sbt-idea plugin
|
# Временные файлы текстовых редакторов (Vim, Emacs, Nano):
|
||||||
.idea_modules/
|
*~
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*.swn
|
||||||
|
.#*
|
||||||
|
\#*#
|
||||||
|
|
||||||
# JIRA plugin
|
# ------------------------------------------------------------------------------
|
||||||
atlassian-ide-plugin.xml
|
# 2. Файлы операционных систем (OS metadata)
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
# Cursive Clojure plugin
|
# macOS: файлы кэша структуры папок и метаданных Finder
|
||||||
.idea/replstate.xml
|
|
||||||
|
|
||||||
# SonarLint plugin
|
|
||||||
.idea/sonarlint/
|
|
||||||
|
|
||||||
# Crashlytics plugin (for Android Studio and IntelliJ)
|
|
||||||
com_crashlytics_export_strings.xml
|
|
||||||
crashlytics.properties
|
|
||||||
crashlytics-build.properties
|
|
||||||
fabric.properties
|
|
||||||
|
|
||||||
# Editor-based Rest Client
|
|
||||||
.idea/httpRequests
|
|
||||||
|
|
||||||
# Android studio 3.1+ serialized cache file
|
|
||||||
.idea/caches/build_file_checksums.ser
|
|
||||||
|
|
||||||
### JetBrains template
|
|
||||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
|
|
||||||
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
|
||||||
|
|
||||||
# User-specific stuff
|
|
||||||
.idea/**/workspace.xml
|
|
||||||
.idea/**/tasks.xml
|
|
||||||
.idea/**/usage.statistics.xml
|
|
||||||
.idea/**/dictionaries
|
|
||||||
.idea/**/shelf
|
|
||||||
|
|
||||||
# AWS User-specific
|
|
||||||
.idea/**/aws.xml
|
|
||||||
|
|
||||||
# Generated files
|
|
||||||
.idea/**/contentModel.xml
|
|
||||||
|
|
||||||
# Sensitive or high-churn files
|
|
||||||
.idea/**/dataSources/
|
|
||||||
.idea/**/dataSources.ids
|
|
||||||
.idea/**/dataSources.local.xml
|
|
||||||
.idea/**/sqlDataSources.xml
|
|
||||||
.idea/**/dynamic.xml
|
|
||||||
.idea/**/uiDesigner.xml
|
|
||||||
.idea/**/dbnavigator.xml
|
|
||||||
|
|
||||||
# Gradle
|
|
||||||
.idea/**/gradle.xml
|
|
||||||
.idea/**/libraries
|
|
||||||
|
|
||||||
# Gradle and Maven with auto-import
|
|
||||||
# When using Gradle or Maven with auto-import, you should exclude module files,
|
|
||||||
# since they will be recreated, and may cause churn. Uncomment if using
|
|
||||||
# auto-import.
|
|
||||||
# .idea/artifacts
|
|
||||||
# .idea/compiler.xml
|
|
||||||
# .idea/jarRepositories.xml
|
|
||||||
# .idea/modules.xml
|
|
||||||
# .idea/*.iml
|
|
||||||
# .idea/modules
|
|
||||||
# *.iml
|
|
||||||
# *.ipr
|
|
||||||
|
|
||||||
# CMake
|
|
||||||
cmake-build-*/
|
|
||||||
|
|
||||||
# Mongo Explorer plugin
|
|
||||||
.idea/**/mongoSettings.xml
|
|
||||||
|
|
||||||
# File-based project format
|
|
||||||
*.iws
|
|
||||||
|
|
||||||
# IntelliJ
|
|
||||||
out/
|
|
||||||
|
|
||||||
# mpeltonen/sbt-idea plugin
|
|
||||||
.idea_modules/
|
|
||||||
|
|
||||||
# JIRA plugin
|
|
||||||
atlassian-ide-plugin.xml
|
|
||||||
|
|
||||||
# Cursive Clojure plugin
|
|
||||||
.idea/replstate.xml
|
|
||||||
|
|
||||||
# SonarLint plugin
|
|
||||||
.idea/sonarlint/
|
|
||||||
|
|
||||||
# Crashlytics plugin (for Android Studio and IntelliJ)
|
|
||||||
com_crashlytics_export_strings.xml
|
|
||||||
crashlytics.properties
|
|
||||||
crashlytics-build.properties
|
|
||||||
fabric.properties
|
|
||||||
|
|
||||||
# Editor-based Rest Client
|
|
||||||
.idea/httpRequests
|
|
||||||
|
|
||||||
# Android studio 3.1+ serialized cache file
|
|
||||||
.idea/caches/build_file_checksums.ser
|
|
||||||
|
|
||||||
### PyCharm template
|
|
||||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
|
|
||||||
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
|
||||||
|
|
||||||
# User-specific stuff
|
|
||||||
.idea/**/workspace.xml
|
|
||||||
.idea/**/tasks.xml
|
|
||||||
.idea/**/usage.statistics.xml
|
|
||||||
.idea/**/dictionaries
|
|
||||||
.idea/**/shelf
|
|
||||||
|
|
||||||
# AWS User-specific
|
|
||||||
.idea/**/aws.xml
|
|
||||||
|
|
||||||
# Generated files
|
|
||||||
.idea/**/contentModel.xml
|
|
||||||
|
|
||||||
# Sensitive or high-churn files
|
|
||||||
.idea/**/dataSources/
|
|
||||||
.idea/**/dataSources.ids
|
|
||||||
.idea/**/dataSources.local.xml
|
|
||||||
.idea/**/sqlDataSources.xml
|
|
||||||
.idea/**/dynamic.xml
|
|
||||||
.idea/**/uiDesigner.xml
|
|
||||||
.idea/**/dbnavigator.xml
|
|
||||||
|
|
||||||
# Gradle
|
|
||||||
.idea/**/gradle.xml
|
|
||||||
.idea/**/libraries
|
|
||||||
|
|
||||||
# Gradle and Maven with auto-import
|
|
||||||
# When using Gradle or Maven with auto-import, you should exclude module files,
|
|
||||||
# since they will be recreated, and may cause churn. Uncomment if using
|
|
||||||
# auto-import.
|
|
||||||
# .idea/artifacts
|
|
||||||
# .idea/compiler.xml
|
|
||||||
# .idea/jarRepositories.xml
|
|
||||||
# .idea/modules.xml
|
|
||||||
# .idea/*.iml
|
|
||||||
# .idea/modules
|
|
||||||
# *.iml
|
|
||||||
# *.ipr
|
|
||||||
|
|
||||||
# CMake
|
|
||||||
cmake-build-*/
|
|
||||||
|
|
||||||
# Mongo Explorer plugin
|
|
||||||
.idea/**/mongoSettings.xml
|
|
||||||
|
|
||||||
# File-based project format
|
|
||||||
*.iws
|
|
||||||
|
|
||||||
# IntelliJ
|
|
||||||
out/
|
|
||||||
|
|
||||||
# mpeltonen/sbt-idea plugin
|
|
||||||
.idea_modules/
|
|
||||||
|
|
||||||
# JIRA plugin
|
|
||||||
atlassian-ide-plugin.xml
|
|
||||||
|
|
||||||
# Cursive Clojure plugin
|
|
||||||
.idea/replstate.xml
|
|
||||||
|
|
||||||
# SonarLint plugin
|
|
||||||
.idea/sonarlint/
|
|
||||||
|
|
||||||
# Crashlytics plugin (for Android Studio and IntelliJ)
|
|
||||||
com_crashlytics_export_strings.xml
|
|
||||||
crashlytics.properties
|
|
||||||
crashlytics-build.properties
|
|
||||||
fabric.properties
|
|
||||||
|
|
||||||
# Editor-based Rest Client
|
|
||||||
.idea/httpRequests
|
|
||||||
|
|
||||||
# Android studio 3.1+ serialized cache file
|
|
||||||
.idea/caches/build_file_checksums.ser
|
|
||||||
|
|
||||||
### macOS template
|
|
||||||
# General
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.AppleDouble
|
.DS_Store?
|
||||||
.LSOverride
|
|
||||||
|
|
||||||
# Icon must end with two \r
|
|
||||||
Icon
|
|
||||||
|
|
||||||
# Thumbnails
|
|
||||||
._*
|
._*
|
||||||
|
|
||||||
# Files that might appear in the root of a volume
|
|
||||||
.DocumentRevisions-V100
|
|
||||||
.fseventsd
|
|
||||||
.Spotlight-V100
|
.Spotlight-V100
|
||||||
.TemporaryItems
|
|
||||||
.Trashes
|
.Trashes
|
||||||
.VolumeIcon.icns
|
|
||||||
.com.apple.timemachine.donotpresent
|
|
||||||
|
|
||||||
# Directories potentially created on remote AFP share
|
# Windows: кэши миниатюр и настройки отображения папок
|
||||||
.AppleDB
|
Thumbs.db
|
||||||
.AppleDesktop
|
Thumbs.db:encryptable
|
||||||
Network Trash Folder
|
ehthumbs.db
|
||||||
Temporary Items
|
ehthumbs_vista.db
|
||||||
.apdisk
|
Desktop.ini
|
||||||
|
$RECYCLE.BIN/
|
||||||
|
|
||||||
### Python template
|
# Linux: служебные файлы
|
||||||
# Byte-compiled / optimized / DLL files
|
*~
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# 3. Python и виртуальные окружения (Python & Virtual Environments)
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Байткод Python и кэши скомпилированных файлов:
|
||||||
__pycache__/
|
__pycache__/
|
||||||
*.py[cod]
|
*.py[cod]
|
||||||
*$py.class
|
*$py.class
|
||||||
|
|
||||||
# C extensions
|
|
||||||
*.so
|
*.so
|
||||||
|
|
||||||
# Distribution / packaging
|
# Виртуальные окружения (локальные папки с установленными зависимостями):
|
||||||
.Python
|
.venv/
|
||||||
|
env/
|
||||||
|
venv/
|
||||||
|
ENV/
|
||||||
|
env.bak/
|
||||||
|
venv.bak/
|
||||||
|
|
||||||
|
# Артефакты сборки, дистрибутивы и метаданные пакетов:
|
||||||
build/
|
build/
|
||||||
develop-eggs/
|
develop-eggs/
|
||||||
dist/
|
dist/
|
||||||
@@ -286,228 +77,75 @@ parts/
|
|||||||
sdist/
|
sdist/
|
||||||
var/
|
var/
|
||||||
wheels/
|
wheels/
|
||||||
share/python-wheels/
|
|
||||||
*.egg-info/
|
*.egg-info/
|
||||||
.installed.cfg
|
.installed.cfg
|
||||||
*.egg
|
*.egg
|
||||||
MANIFEST
|
MANIFEST
|
||||||
|
|
||||||
# PyInstaller
|
# Кэши инструментов статического анализа, тестирования и типизации:
|
||||||
# Usually these files are written by a python script from a template
|
.pytest_cache/
|
||||||
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
||||||
*.manifest
|
|
||||||
*.spec
|
|
||||||
|
|
||||||
# Installer logs
|
|
||||||
pip-log.txt
|
|
||||||
pip-delete-this-directory.txt
|
|
||||||
|
|
||||||
# Unit test / coverage reports
|
|
||||||
htmlcov/
|
|
||||||
.tox/
|
|
||||||
.nox/
|
|
||||||
.coverage
|
.coverage
|
||||||
.coverage.*
|
.coverage.*
|
||||||
.cache
|
htmlcov/
|
||||||
nosetests.xml
|
|
||||||
coverage.xml
|
|
||||||
*.cover
|
|
||||||
*.py,cover
|
|
||||||
.hypothesis/
|
|
||||||
.pytest_cache/
|
|
||||||
cover/
|
|
||||||
|
|
||||||
# Translations
|
|
||||||
*.mo
|
|
||||||
*.pot
|
|
||||||
|
|
||||||
# Django stuff:
|
|
||||||
*.log
|
|
||||||
local_settings.py
|
|
||||||
*.sqlite3
|
|
||||||
*.sqlite3-journal
|
|
||||||
|
|
||||||
# Flask stuff:
|
|
||||||
instance/
|
|
||||||
.webassets-cache
|
|
||||||
|
|
||||||
# Scrapy stuff:
|
|
||||||
.scrapy
|
|
||||||
|
|
||||||
# Sphinx documentation
|
|
||||||
docs/_build/
|
|
||||||
|
|
||||||
# PyBuilder
|
|
||||||
.pybuilder/
|
|
||||||
target/
|
|
||||||
|
|
||||||
# Jupyter Notebook
|
|
||||||
.ipynb_checkpoints
|
|
||||||
|
|
||||||
# IPython
|
|
||||||
profile_default/
|
|
||||||
ipython_config.py
|
|
||||||
|
|
||||||
# pyenv
|
|
||||||
# For a library or package, you might want to ignore these files since the code is
|
|
||||||
# intended to run in multiple environments; otherwise, check them in:
|
|
||||||
# .python-version
|
|
||||||
|
|
||||||
# pipenv
|
|
||||||
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
||||||
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
||||||
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
||||||
# install all needed dependencies.
|
|
||||||
#Pipfile.lock
|
|
||||||
|
|
||||||
# poetry
|
|
||||||
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
||||||
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
||||||
# commonly ignored for libraries.
|
|
||||||
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
||||||
#poetry.lock
|
|
||||||
|
|
||||||
# pdm
|
|
||||||
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
||||||
#pdm.lock
|
|
||||||
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
|
||||||
# in version control.
|
|
||||||
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
|
|
||||||
.pdm.toml
|
|
||||||
.pdm-python
|
|
||||||
.pdm-build/
|
|
||||||
|
|
||||||
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
||||||
__pypackages__/
|
|
||||||
|
|
||||||
# Celery stuff
|
|
||||||
celerybeat-schedule
|
|
||||||
celerybeat.pid
|
|
||||||
|
|
||||||
# SageMath parsed files
|
|
||||||
*.sage.py
|
|
||||||
|
|
||||||
# Environments
|
|
||||||
.env
|
|
||||||
.venv
|
|
||||||
env/
|
|
||||||
venv/
|
|
||||||
ENV/
|
|
||||||
env.bak/
|
|
||||||
venv.bak/
|
|
||||||
|
|
||||||
# Spyder project settings
|
|
||||||
.spyderproject
|
|
||||||
.spyproject
|
|
||||||
|
|
||||||
# Rope project settings
|
|
||||||
.ropeproject
|
|
||||||
|
|
||||||
# mkdocs documentation
|
|
||||||
/site
|
|
||||||
|
|
||||||
# mypy
|
|
||||||
.mypy_cache/
|
.mypy_cache/
|
||||||
.dmypy.json
|
.dmypy.json
|
||||||
dmypy.json
|
dmypy.json
|
||||||
|
|
||||||
# Pyre type checker
|
|
||||||
.pyre/
|
.pyre/
|
||||||
|
|
||||||
# pytype static type analyzer
|
|
||||||
.pytype/
|
.pytype/
|
||||||
|
.ruff_cache/
|
||||||
|
.tox/
|
||||||
|
.nox/
|
||||||
|
|
||||||
# Cython debug symbols
|
# ------------------------------------------------------------------------------
|
||||||
cython_debug/
|
# 4. Django, базы данных, медиа-файлы и секреты (Django, DB & Secrets)
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Конфигурационные файлы с секретами и локальными переменными окружения:
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
!.env.example
|
||||||
|
|
||||||
# PyCharm
|
# Базы данных SQLite (локальные тестовые и рабочие БД):
|
||||||
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
*.sqlite3
|
||||||
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
*.sqlite3-journal
|
||||||
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
*.db
|
||||||
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
*.db-journal
|
||||||
#.idea/
|
db.sqlite3
|
||||||
|
data/*.sqlite3
|
||||||
|
data/*.db
|
||||||
|
data/*.sqlite3-journal
|
||||||
|
data/*.db-journal
|
||||||
|
!data/README.md
|
||||||
|
|
||||||
### PyCharm+all template
|
# Локально загружаемые медиа-файлы (пользовательский контент: картинки блога и т.д.):
|
||||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
|
media/*
|
||||||
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
!media/README.md
|
||||||
|
!media/.gitkeep
|
||||||
|
|
||||||
# User-specific stuff
|
# Лог-файлы:
|
||||||
.idea/**/workspace.xml
|
*.log
|
||||||
.idea/**/tasks.xml
|
logs/
|
||||||
.idea/**/usage.statistics.xml
|
|
||||||
.idea/**/dictionaries
|
|
||||||
.idea/**/shelf
|
|
||||||
|
|
||||||
# AWS User-specific
|
# ------------------------------------------------------------------------------
|
||||||
.idea/**/aws.xml
|
# 5. Node.js, npm и фронтенд-сборка (Frontend Assembly)
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
# Generated files
|
# Зависимости npm (устанавливаются через npm install / assembly_via_npm.sh):
|
||||||
.idea/**/contentModel.xml
|
node_modules/
|
||||||
|
*/node_modules/
|
||||||
# Sensitive or high-churn files
|
|
||||||
.idea/**/dataSources/
|
|
||||||
.idea/**/dataSources.ids
|
|
||||||
.idea/**/dataSources.local.xml
|
|
||||||
.idea/**/sqlDataSources.xml
|
|
||||||
.idea/**/dynamic.xml
|
|
||||||
.idea/**/uiDesigner.xml
|
|
||||||
.idea/**/dbnavigator.xml
|
|
||||||
|
|
||||||
# Gradle
|
|
||||||
.idea/**/gradle.xml
|
|
||||||
.idea/**/libraries
|
|
||||||
|
|
||||||
# Gradle and Maven with auto-import
|
|
||||||
# When using Gradle or Maven with auto-import, you should exclude module files,
|
|
||||||
# since they will be recreated, and may cause churn. Uncomment if using
|
|
||||||
# auto-import.
|
|
||||||
# .idea/artifacts
|
|
||||||
# .idea/compiler.xml
|
|
||||||
# .idea/jarRepositories.xml
|
|
||||||
# .idea/modules.xml
|
|
||||||
# .idea/*.iml
|
|
||||||
# .idea/modules
|
|
||||||
# *.iml
|
|
||||||
# *.ipr
|
|
||||||
|
|
||||||
# CMake
|
|
||||||
cmake-build-*/
|
|
||||||
|
|
||||||
# Mongo Explorer plugin
|
|
||||||
.idea/**/mongoSettings.xml
|
|
||||||
|
|
||||||
# File-based project format
|
|
||||||
*.iws
|
|
||||||
|
|
||||||
# IntelliJ
|
|
||||||
out/
|
|
||||||
|
|
||||||
# mpeltonen/sbt-idea plugin
|
|
||||||
.idea_modules/
|
|
||||||
|
|
||||||
# JIRA plugin
|
|
||||||
atlassian-ide-plugin.xml
|
|
||||||
|
|
||||||
# Cursive Clojure plugin
|
|
||||||
.idea/replstate.xml
|
|
||||||
|
|
||||||
# SonarLint plugin
|
|
||||||
.idea/sonarlint/
|
|
||||||
|
|
||||||
# Crashlytics plugin (for Android Studio and IntelliJ)
|
|
||||||
com_crashlytics_export_strings.xml
|
|
||||||
crashlytics.properties
|
|
||||||
crashlytics-build.properties
|
|
||||||
fabric.properties
|
|
||||||
|
|
||||||
# Editor-based Rest Client
|
|
||||||
.idea/httpRequests
|
|
||||||
|
|
||||||
# Android studio 3.1+ serialized cache file
|
|
||||||
.idea/caches/build_file_checksums.ser
|
|
||||||
|
|
||||||
# --- ETPGRF Custom ---
|
|
||||||
# Generated frontend assets
|
|
||||||
public/static/codemirror/editor.js
|
|
||||||
frontend-assembly/dist/
|
|
||||||
frontend-assembly/node_modules/
|
frontend-assembly/node_modules/
|
||||||
|
|
||||||
|
# Логи пакетных менеджеров:
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
|
||||||
|
# Директории сборки и бандлов:
|
||||||
|
frontend-assembly/dist/
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# 6. Временные файлы и артефакты отладки
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
*.tmp
|
||||||
|
*.temp
|
||||||
|
*.bak
|
||||||
|
.output.txt
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
## [0.2.7] - 2025-03-22
|
## [0.2.7] - 2025-03-22
|
||||||
### Изменено
|
### Изменено
|
||||||
- Обновлене всех пактов, включая `etpgrf` (v0.1.5 → v0.1.6.post1).
|
- Обновление всех пактов, включая `etpgrf` (v0.1.5 → v0.1.6.post1).
|
||||||
|
|
||||||
### Исправлено
|
### Исправлено
|
||||||
- `canonical` для страниц учитывает https/http.
|
- `canonical` для страниц учитывает https/http.
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# Заметки по деплою проекту
|
||||||
|
|
||||||
|
В финальном комите перед новой версией (*ТОЛЬ ПОСЛЕ ТЕСТИРОВАНИЯ:) не забываем менять:
|
||||||
|
- `CHANGELOG.md` делать описание изменений.
|
||||||
|
- `typograph/templates/typograph/base.html` в шаблоне циферки в подвале
|
||||||
|
|
||||||
|
|
||||||
|
Затем, когда код готов к релизу, нужно обновить версию в `pyproject.toml`:
|
||||||
|
```shell
|
||||||
|
poetry version patch
|
||||||
|
```
|
||||||
|
|
||||||
|
Финальный коммит, таким образом, должен включать в себя:
|
||||||
|
- Обновление `CHANGELOG.md` с описанием изменений.
|
||||||
|
- Обновление версии в `pyproject.toml` (через `poetry version patch`).
|
||||||
|
- Обновление шаблона `base.html` (циферки в подвале).
|
||||||
|
— Обновление в `etpgrf_site/__init__.py`.
|
||||||
|
- И, конечно же, все изменения, которые были сделаны в коде.
|
||||||
|
|
||||||
|
После комита и пуша:
|
||||||
|
```shell
|
||||||
|
git add .
|
||||||
|
git commit -am "Обновление версии для релиза vX.Y.Z"
|
||||||
|
git push origin main
|
||||||
|
```
|
||||||
|
|
||||||
|
Для запуска деплоя CI/CD, через Gitea Actions, создаем `git tag` и пушим его в репозиторий:
|
||||||
|
```shell
|
||||||
|
git tag vX.Y.Z && git push origin vX.Y.Z
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
# Бэкенд: Архитектура и модули
|
||||||
|
|
||||||
|
## 1. Django Конфигурация (`etpgrf_site/etpgrf_site/`)
|
||||||
|
- **`settings.py`**:
|
||||||
|
- `DEBUG` и `SECRET_KEY` считываются из переменных окружения.
|
||||||
|
- `ADMIN_URL`: настраиваемый префикс панели администратора (по умолчанию `admin/`).
|
||||||
|
- База данных: SQLite в `data/db-etpgrf.sqlite3` с `timeout: 20` для надежности при конкурентных запросах.
|
||||||
|
- Статика: `STATICFILES_DIRS = [BASE_DIR.parent / 'public' / 'static']`, `STATIC_ROOT = BASE_DIR.parent / 'public' / 'static_collected'`.
|
||||||
|
- Медиа: `MEDIA_ROOT = BASE_DIR.parent / 'media'`, `MEDIA_URL = '/media/'`.
|
||||||
|
- Защита за прокси: в `not DEBUG` активированы `SECURE_PROXY_SSL_HEADER`, `SECURE_SSL_REDIRECT`, `SESSION_COOKIE_SECURE`, `CSRF_COOKIE_SECURE`, `USE_X_FORWARDED_HOST`, `USE_X_FORWARDED_PORT`.
|
||||||
|
- **`urls.py`**:
|
||||||
|
- `/{ADMIN_URL}` -> админка Django.
|
||||||
|
- `/` -> `typograph.urls` (главная страница типографа, API обработки и статистики).
|
||||||
|
- `/blog/` -> `blog.urls` (список постов, детальная страница поста).
|
||||||
|
- `/sitemap.xml` -> карта сайта (`PostSitemap`).
|
||||||
|
- `/<slug:slug>/` -> ловушка для статических страниц (например, `/about/`, `/privacy-policy/`, `/donate/`).
|
||||||
|
|
||||||
|
## 2. Приложение `typograph`
|
||||||
|
Отвечает за взаимодействие с библиотекой типографирования `etpgrf` и сбор агрегированной аналитики.
|
||||||
|
|
||||||
|
### Модели (`typograph/models.py`)
|
||||||
|
- **`DailyStat`**:
|
||||||
|
- Агрегированные посуточные показатели (`date` - уникальная дата).
|
||||||
|
- Метрики активности: `index_views`, `process_requests`, `copy_count`.
|
||||||
|
- Объемы данных: `chars_in`, `chars_out`, `chars_copied`.
|
||||||
|
- Производительность: `total_processing_time_ms`, вычисляемое свойство `avg_processing_time_ms`.
|
||||||
|
- `settings_stats`: JSONField со статистикой популярности опций (языки, кавычки, переносы, висячая пунктуация и т.д.).
|
||||||
|
|
||||||
|
### Представления и Эндпоинты (`typograph/views.py`)
|
||||||
|
- `index` (`/`): главная страница, инкрементирует просмотры `index_views`.
|
||||||
|
- `process_text` (`/process/`, POST):
|
||||||
|
- Принимает текст и параметры типографирования из формы.
|
||||||
|
- Инициализирует `LayoutProcessor`, `Hyphenator`, `Typographer` из пакета `etpgrf`.
|
||||||
|
- Производит замер времени обработки `time.perf_counter()`.
|
||||||
|
- Атомарно обновляет счетчики в `DailyStat`.
|
||||||
|
- Возвращает HTML-фрагмент `typograph/result_fragment.html` и заголовок `X-Processing-Time`.
|
||||||
|
- `track_copy` (`/track-copy/`, POST): фиксирует факт и длину скопированного в буфер текста.
|
||||||
|
- `get_stats_summary` (`/stats-summary/`, GET): возвращает компактный HTMX-фрагмент со статистикой для футера.
|
||||||
|
|
||||||
|
## 3. Приложение `blog`
|
||||||
|
Отвечает за публикации, статьи и произвольные статические страницы.
|
||||||
|
|
||||||
|
### Модели (`blog/models.py`)
|
||||||
|
- **`Post`**:
|
||||||
|
- `post_type`: `B` (Пост блога) или `P` (Страница).
|
||||||
|
- `title`, `slug` (автоматическая транслитерация через `pytils.translit.slugify` с обработкой коллизий).
|
||||||
|
- `is_published`, `published_at`, `updated_at`.
|
||||||
|
- `content` (HTML-разметка), `excerpt` (тизер).
|
||||||
|
- `image` (обложка для превью и Open Graph).
|
||||||
|
- SEO-поля: `seo_title`, `seo_description`, `seo_keywords`.
|
||||||
|
- Метод `get_absolute_url()`: возвращает `/blog/<slug>/` для постов или `/<slug>/` для страниц.
|
||||||
|
|
||||||
|
### Представления (`blog/views.py`)
|
||||||
|
- `post_list` (`/blog/`): список опубликованных статей блога с пагинацией.
|
||||||
|
- `post_detail` (`/blog/<slug>/`): детальная страница поста с Open Graph мета-тегами и разметкой.
|
||||||
|
- `page_detail` (`/<slug>/`): отображение статических страниц.
|
||||||
|
- `sitemaps.py`: генерация `sitemap.xml` по опубликованным записям.
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
# Деплой, окружение и регламент релизов
|
||||||
|
|
||||||
|
## 1. Конфигурация окружения (.env)
|
||||||
|
Обязательные переменные:
|
||||||
|
- `SECRET_KEY`: секретный ключ Django.
|
||||||
|
- `DEBUG`: `True` для локальной разработки, `False` для продакшена.
|
||||||
|
- `ALLOWED_HOSTS`: разрешенные хосты через запятую (например, `typograph.cube2.ru,localhost`).
|
||||||
|
- `CSRF_TRUSTED_ORIGINS`: доверенные URL (например, `https://typograph.cube2.ru,http://localhost:8000`).
|
||||||
|
- `ADMIN_URL`: путь к панели администратора (например, `mysecretadmin/`).
|
||||||
|
|
||||||
|
## 2. Docker и инфраструктура
|
||||||
|
- **`Dockerfile`**: базовый образ `python:3.13-slim`, установка Poetry, сборка зависимостей, запуск через Gunicorn.
|
||||||
|
- **`docker-compose.yml`**: конфигурация для разработки (монтирование исходного кода, базы данных и папок статики/медиа).
|
||||||
|
- **`docker-compose.prod.yml`**: конфигурация для продакшена со связанным сервисом Nginx (`config/nginx/`).
|
||||||
|
|
||||||
|
## 3. Чек-лист выпуска релиза (согласно NOTE.md)
|
||||||
|
Перед созданием релизного тега:
|
||||||
|
1. Протестировать функционал и миграции.
|
||||||
|
2. Внести описание изменений в `CHANGELOG.md`.
|
||||||
|
3. Обновить версии в:
|
||||||
|
- `pyproject.toml` (командой `poetry version patch` или вручную).
|
||||||
|
- `etpgrf_site/__init__.py` (при наличии `__version__`).
|
||||||
|
- `etpgrf_site/typograph/templates/typograph/base.html` (версия библиотеки и версия сайта в футере).
|
||||||
|
4. Закоммитить изменения:
|
||||||
|
```bash
|
||||||
|
git add .
|
||||||
|
git commit -am "Обновление версии для релиза vX.Y.Z"
|
||||||
|
git push origin main
|
||||||
|
```
|
||||||
|
5. Запустить пайплайн сборки и деплоя через Gitea Actions путем простановки тега:
|
||||||
|
```bash
|
||||||
|
git tag vX.Y.Z && git push origin vX.Y.Z
|
||||||
|
```
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# Фронтенд: Структура и сборка
|
||||||
|
|
||||||
|
## 1. Стек и библиотеки
|
||||||
|
- **HTML / Django Templates:** шаблоны `base.html`, компоненты `typograph/` и `blog/`.
|
||||||
|
- **CSS:** Bootstrap 5, Bootstrap Icons, кастомные стили `public/static/css/etpgrf.css` с поддержкой темной/светлой темы.
|
||||||
|
- **Интерактивность:**
|
||||||
|
- **HTMX:** асинхронные запросы (отправка формы типографирования, динамическое обновление плашки со статистикой без перезагрузки).
|
||||||
|
- **Alpine.js:** управление состоянием клиентских виджетов и раскрывающихся списков опций.
|
||||||
|
- **Редактор текста:** CodeMirror 6.
|
||||||
|
|
||||||
|
## 2. Сборка фронтенда и вендорных библиотек (`frontend-assembly/`)
|
||||||
|
- Каталог `frontend-assembly/` управляет сборкой редактора и подготовкой локальных копий всех сторонних библиотек для автономной работы и CDN-fallback:
|
||||||
|
- `src/editor.js`: инициализация CodeMirror 6, подсветка спецсимволов (` `, `­`, тире, кавычки), интеграция темной/светлой темы.
|
||||||
|
- `copy-vendor.js`: копирование дистрибутивов Bootstrap 5, Bootstrap Icons (включая шрифты), HTMX и Alpine.js из `node_modules` в `public/static/vendor/`.
|
||||||
|
- `package.json`: зависимости `@codemirror/*`, `bootstrap`, `bootstrap-icons`, `htmx.org`, `alpinejs`, `esbuild`.
|
||||||
|
- Команды сборки:
|
||||||
|
- `npm run build`: выполняет `build:codemirror` (сборка `editor.js`) и `build:vendor` (копирование всех библиотек в `static/vendor/`).
|
||||||
|
- `npm run build:codemirror`: компилирует бандл в `public/static/codemirror/editor.js`.
|
||||||
|
- `npm run build:vendor`: экспортирует вендорные CSS/JS/шрифты в `public/static/vendor/`.
|
||||||
|
- `npm run watch`: отслеживание изменений CodeMirror в реальном времени.
|
||||||
|
|
||||||
|
## 3. CDN Fallback стратегия (`base.html`)
|
||||||
|
- Основные библиотеки подключаются из публичных CDN (jsDelivr, unpkg) для быстрой доставки и кэширования в браузерах.
|
||||||
|
- При блокировке или недоступности CDN срабатывает автоматический fallback на локальные статические копии:
|
||||||
|
- **CSS (Bootstrap, Bootstrap Icons):** атрибут `onerror="this.onerror=null;this.href='{% static ... %}';"` на тегах `<link>`.
|
||||||
|
- **JS (HTMX, Bootstrap Bundle):** проверка глобального объекта (`window.htmx`, `window.bootstrap`) и подгрузка локальной копии через `document.write`.
|
||||||
|
- **JS (Alpine.js):** `onerror` динамически подключает локальный deferred-скрипт, а также предусмотрена резервная проверка в `DOMContentLoaded`.
|
||||||
|
|
||||||
|
## 4. Клиентская статика (`public/static/`)
|
||||||
|
- `css/etpgrf.css` — основные стили сайта, оформление типографа и блога.
|
||||||
|
- `js/base.js` — вспомогательные клиентские скрипты (обработка куки-баннера, копирование текста, переключение тем).
|
||||||
|
- `codemirror/` — собранный esm-бандл редактора.
|
||||||
|
- `vendor/` — локальные копии сторонних библиотек (`bootstrap`, `bootstrap-icons`, `htmx`, `alpinejs`).
|
||||||
|
- `svg/` и `img/` — векторные и растровые логотипы для светлой/темной темы и мета-тегов Open Graph.
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
# Архитектурный обзор проекта ETPGRF Site
|
||||||
|
|
||||||
|
## 1. Назначение проекта
|
||||||
|
**ETPGRF Site** — веб-сервис и интерфейс для онлайн-типографирования текстов на базе библиотеки `etpgrf`, а также контентная платформа (блог, справочные и статические страницы, статистика использования).
|
||||||
|
|
||||||
|
## 2. Технологический стек
|
||||||
|
- **Backend:** Python 3.13+, Django 6.0+, Poetry.
|
||||||
|
- **База данных:** SQLite 3 (файл `data/db-etpgrf.sqlite3` с увеличенным таймаутом блокировки).
|
||||||
|
- **Frontend:**
|
||||||
|
- Bootstrap 5 (CSS, сетка, компоненты, иконки bootstrap-icons).
|
||||||
|
- Alpine.js (декларативное состояние на клиенте).
|
||||||
|
- HTMX (динамическая подгрузка фрагментов, отправка форм типографирования, статистика).
|
||||||
|
- CodeMirror 6 (продвинутый редактор текста с подсветкой спецсимволов/сущностей).
|
||||||
|
- Сборщик фронтенда: `esbuild` в каталоге `frontend-assembly/`.
|
||||||
|
- **Инфраструктура & Деплой:**
|
||||||
|
- Docker & Docker Compose (`docker-compose.yml` для разработки, `docker-compose.prod.yml` для продакшена).
|
||||||
|
- Nginx (раздача статики `/static/` и медиа `/media/`, SSL-терминация, обратное проксирование к Gunicorn).
|
||||||
|
- Gunicorn (WSGI-сервер Django).
|
||||||
|
- CI/CD: Gitea Actions (автосборка Docker-образов по тегам `v*` и деплой).
|
||||||
|
|
||||||
|
## 3. Структура директорий
|
||||||
|
```
|
||||||
|
2026-etpgrf-site/
|
||||||
|
├── .github/ # Инструкции для AI и CI
|
||||||
|
│ └── copilot-instructions.md
|
||||||
|
├── _prj_blueprint/ # Быстрый контекст и документация архитектуры
|
||||||
|
├── config/ # Конфигурационные файлы Nginx
|
||||||
|
│ └── nginx/
|
||||||
|
├── data/ # Хранилище базы данных SQLite (db-etpgrf.sqlite3)
|
||||||
|
├── etpgrf_site/ # Исходный код Django
|
||||||
|
│ ├── manage.py
|
||||||
|
│ ├── etpgrf_site/ # Корневой модуль конфигурации (settings, urls, wsgi)
|
||||||
|
│ ├── typograph/ # Приложение типографа (обработка, DailyStat, UI)
|
||||||
|
│ └── blog/ # Приложение блога и статических страниц
|
||||||
|
├── frontend-assembly/ # Node.js окружение сборки CodeMirror 6 (esbuild)
|
||||||
|
├── media/ # Загружаемые медиа-файлы (обложки постов)
|
||||||
|
├── public/ # Статика проекта
|
||||||
|
│ ├── static/ # Исходная статика (css, js, img, svg, codemirror)
|
||||||
|
│ └── static_collected/ # Собранная статика collectstatic
|
||||||
|
├── Dockerfile # Сборка продакшн-образа
|
||||||
|
├── docker-compose.yml # Dev-окружение
|
||||||
|
├── docker-compose.prod.yml # Prod-окружение
|
||||||
|
├── pyproject.toml # Poetry зависимости и метаданные
|
||||||
|
├── NOTE.md # Инструкции по релизам и версионированию
|
||||||
|
└── CHANGELOG.md # История версий
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4. Ссылки на детальные описания
|
||||||
|
- [Бэкенд и логика приложений](backend.md)
|
||||||
|
- [Фронтенд и сборка](frontend.md)
|
||||||
|
- [Деплой, окружение и релизный процесс](deployment.md)
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
# CI/CD с Gitea Runner
|
||||||
|
|
||||||
|
Gitea Runner — это инструмент для выполнения CI/CD задач, интегрированный с Gitea. Он позволяет автоматизировать
|
||||||
|
процессы сборки, тестирования и развертывания приложений.
|
||||||
|
|
||||||
|
В нашем репозии входим в "Настройки" -> "Действия" -> "Ранеры" и создаем новый Runner. Для это получим регистрационный
|
||||||
|
токен.
|
||||||
|
|
||||||
|
## Настройка Gitea Runner на macOS
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker run -d --restart always \ [±main ●]
|
||||||
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||||
|
-e GITEA_INSTANCE_URL=https://git.cube2.ru \
|
||||||
|
-e GITEA_RUNNER_REGISTRATION_TOKEN=здест_полученный_токен \
|
||||||
|
-e GITEA_RUNNER_REGISTRATION_TOKEN=здесь_вставляем_полученный_токен \
|
||||||
|
-e GITEA_RUNNER_NAME=mac-mini-runner \
|
||||||
|
--name gitea-runner \
|
||||||
|
gitea/act_runner:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
Увидим:
|
||||||
|
```txt
|
||||||
|
Unable to find image 'gitea/act_runner:latest' locally
|
||||||
|
latest: Pulling from gitea/act_runner
|
||||||
|
6e174226ea69: Pull complete
|
||||||
|
adcf2c0b73c2: Pull complete
|
||||||
|
e0c151a1a72f: Pull complete
|
||||||
|
3333c50851c8: Pull complete
|
||||||
|
Digest: sha256:0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
Status: Downloaded newer image for gitea/act_runner:latest
|
||||||
|
f000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
```
|
||||||
|
|
||||||
|
## Обновление в продакшен
|
||||||
|
|
||||||
|
Наш `.gitea/workflows/docker-publish.yaml` настроен на публикацию Docker образа при создании тега, который начинается
|
||||||
|
с `v`. Образ собирается на компьютпере разработчика (см. главу Настройка Gitea Runner на macOS) и пакет загружается
|
||||||
|
в Gitea.
|
||||||
|
|
||||||
|
На хостинге работает Docker Stack с нашим проектом. Кроме `etpgrf-site-etpgrf-backend` и `etpgrf-site-etpgrf-nginx`
|
||||||
|
в нем работает `etpgrf-site-watchtower`, который следит за обновлениями образов на Gitea и если находит обновление, то
|
||||||
|
получает новый образ и перезапускает контейнер с новым образом.
|
||||||
|
|
||||||
|
Т.о. если мы хотим обновить продакшен, нам нужно просто создать новый тег в репозитории:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
git tag v0.1.x
|
||||||
|
git push origin v0.1.x
|
||||||
|
```
|
||||||
|
|
||||||
|
sudo docker exec -it etpgrf-site-etpgrf-backend-1 python etpgrf_site/manage.py createsuperuser
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
e-serg
|
||||||
|
f0b01jLq$eRyID
|
||||||
+32
-14
@@ -6,15 +6,13 @@
|
|||||||
# Для первого запуска backend-контейнера, возможно, потребуется временно изменить владельца папки `data` на root
|
# Для первого запуска backend-контейнера, возможно, потребуется временно изменить владельца папки `data` на root
|
||||||
# и раскомментировать соответствующие строки в секции etpgrf-backend (смотри комментарии в коде ниже).
|
# и раскомментировать соответствующие строки в секции etpgrf-backend (смотри комментарии в коде ниже).
|
||||||
|
|
||||||
version: '3.8'
|
# version: '3.8'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
# Бэкенд сервис
|
# Бэкенд сервис
|
||||||
etpgrf-backend:
|
etpgrf-backend:
|
||||||
# Используем готовый образ из Gitea Registry
|
# Используем готовый образ из Gitea Registry
|
||||||
image: git.cube2.ru/erjemin/2026-etpgrf-site:latest
|
image: git.cube2.ru/erjemin/2026-etpgrf-site:latest
|
||||||
# Если нужно, собрать образ из локального Dockerfile, а не скачивать готовый
|
|
||||||
# build: .
|
|
||||||
# Перезапускать всегда (если упал или сервер перезагрузился)
|
# Перезапускать всегда (если упал или сервер перезагрузился)
|
||||||
restart: always
|
restart: always
|
||||||
# Метка для Watchtower, чтобы он обновлял только этот контейнер
|
# Метка для Watchtower, чтобы он обновлял только этот контейнер
|
||||||
@@ -55,7 +53,7 @@ services:
|
|||||||
cp /app/etpgrf_site/typograph/templates/500.html /app/public/static_collected/500.html &&
|
cp /app/etpgrf_site/typograph/templates/500.html /app/public/static_collected/500.html &&
|
||||||
cp /app/etpgrf_site/typograph/templates/404.html /app/public/static_collected/404.html &&
|
cp /app/etpgrf_site/typograph/templates/404.html /app/public/static_collected/404.html &&
|
||||||
cp /app/etpgrf_site/typograph/templates/typograph/403.html /app/public/static_collected/403.html &&
|
cp /app/etpgrf_site/typograph/templates/typograph/403.html /app/public/static_collected/403.html &&
|
||||||
gunicorn --bind 0.0.0.0:8000 --chdir /app/etpgrf_site etpgrf_site.wsgi"
|
gunicorn --bind 0.0.0.0:8000 --timeout 300 --workers 2 --chdir /app/etpgrf_site etpgrf_site.wsgi"
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
# База данных (папка data должна быть создана на хосте)
|
# База данных (папка data должна быть создана на хосте)
|
||||||
@@ -65,15 +63,30 @@ services:
|
|||||||
# Медиа (папка media должна быть создана на хосте)
|
# Медиа (папка media должна быть создана на хосте)
|
||||||
- ./media:/app/media
|
- ./media:/app/media
|
||||||
|
|
||||||
|
# Переменные окружения
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
|
|
||||||
|
# Логирование (Ротация)
|
||||||
logging:
|
logging:
|
||||||
driver: "json-file"
|
driver: "json-file"
|
||||||
options:
|
options:
|
||||||
max-size: "10m"
|
max-size: "10m"
|
||||||
max-file: "3"
|
max-file: "3"
|
||||||
|
|
||||||
|
# Healthcheck отключен - вместо этого используем depends_on в nginx (service_started)
|
||||||
|
# Причина: healthcheck с Python-запросом к Django вызывал timeout workers,
|
||||||
|
# так как требовал полной загрузки Django при каждой проверке.
|
||||||
|
# See: https://github.com/erjemin/2026-etpgrf-site/issues/XXX
|
||||||
|
|
||||||
|
# Лимиты ресурсов (docker compose вне swarm)
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.40'
|
||||||
|
memory: 360M
|
||||||
|
|
||||||
|
|
||||||
# Nginx для отдачи статики и проксирования запросов к бэкенду
|
# Nginx для отдачи статики и проксирования запросов к бэкенду
|
||||||
etpgrf-nginx:
|
etpgrf-nginx:
|
||||||
image: nginx:1.25-alpine
|
image: nginx:1.25-alpine
|
||||||
@@ -86,21 +99,25 @@ services:
|
|||||||
|
|
||||||
# Внешний порт. Если у тебя на хосте уже есть Nginx (прокси),
|
# Внешний порт. Если у тебя на хосте уже есть Nginx (прокси),
|
||||||
# то можно пробросить на 127.0.0.1:8000 или использовать внутреннюю сеть.
|
# то можно пробросить на 127.0.0.1:8000 или использовать внутреннюю сеть.
|
||||||
|
# Но пока оставим так:
|
||||||
ports:
|
ports:
|
||||||
- "127.0.0.1:8080:80" # Используем 8080, чтобы не конфликтовать с Portainer (8000) или основным Nginx (80)
|
- "127.0.0.1:8080:80" # Используем 8080, чтобы не конфликтовать с Portainer (8000) или основным Nginx (80)
|
||||||
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- etpgrf-backend
|
etpgrf-backend:
|
||||||
|
condition: service_started
|
||||||
|
|
||||||
logging:
|
logging:
|
||||||
driver: "json-file"
|
driver: "json-file"
|
||||||
options:
|
options:
|
||||||
max-size: "10m"
|
max-size: "5m"
|
||||||
max-file: "3"
|
max-file: "2"
|
||||||
|
|
||||||
# Сервис для автоматического обновления образов из реестра
|
# Сервис для автоматического обновления образов из реестра
|
||||||
watchtower:
|
watchtower:
|
||||||
image: containrrr/watchtower
|
image: containrrr/watchtower
|
||||||
|
container_name: etpgrf_watchtower
|
||||||
|
restart: always
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
environment:
|
environment:
|
||||||
@@ -108,13 +125,14 @@ services:
|
|||||||
# Берем учетные данные из .env файла
|
# Берем учетные данные из .env файла
|
||||||
- REPO_USER=${REPO_USER}
|
- REPO_USER=${REPO_USER}
|
||||||
- REPO_PASS=${REPO_PASS}
|
- REPO_PASS=${REPO_PASS}
|
||||||
# Ограничиваем область видимости только этим проектом
|
- WATCHTOWER_REGISTRY_URL=git.cube2.ru
|
||||||
- WATCHTOWER_SCOPE=etpgrf
|
- WATCHTOWER_SCOPE=etpgrf
|
||||||
# Если нужно указать реестр явно (обычно watchtower сам понимает из имени образа)
|
command: --interval 1800 --cleanup
|
||||||
# - WATCHTOWER_REGISTRY_URL=git.cube2.ru
|
logging:
|
||||||
command: --interval 1800 --cleanup # Проверять каждые 30 минут
|
driver: "json-file"
|
||||||
restart: always
|
options:
|
||||||
|
max-size: "1m"
|
||||||
|
max-file: "1"
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
static_volume:
|
static_volume:
|
||||||
@@ -29,6 +29,7 @@
|
|||||||
{# Favicons #}<link rel="icon" type="image/svg+xml" href="{% static 'favicon.svg' %}" />
|
{# Favicons #}<link rel="icon" type="image/svg+xml" href="{% static 'favicon.svg' %}" />
|
||||||
{# Favicons #}<link rel="apple-touch-icon" sizes="180x180" href="{% static 'apple-touch-icon.png' %}" />
|
{# Favicons #}<link rel="apple-touch-icon" sizes="180x180" href="{% static 'apple-touch-icon.png' %}" />
|
||||||
{# Favicons #}<link rel="manifest" href="{% static 'site.webmanifest' %}" />
|
{# Favicons #}<link rel="manifest" href="{% static 'site.webmanifest' %}" />
|
||||||
|
{# Для ИИ #}<link rel="help" type="text/markdown" href="/llms.txt"/>
|
||||||
{# Bootstrap 5 CSS #}<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"/>
|
{# Bootstrap 5 CSS #}<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"/>
|
||||||
{# Bootstrap Icons #}<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css"/>
|
{# Bootstrap Icons #}<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css"/>
|
||||||
<style>
|
<style>
|
||||||
|
|||||||
@@ -3,3 +3,6 @@ Allow: /
|
|||||||
|
|
||||||
Host: https://typograph.cube2.ru
|
Host: https://typograph.cube2.ru
|
||||||
Sitemap: https://typograph.cube2.ru/sitemap.xml
|
Sitemap: https://typograph.cube2.ru/sitemap.xml
|
||||||
|
|
||||||
|
# Ссылка на файл для ИИ-моделей
|
||||||
|
Link: /llms.txt
|
||||||
|
|||||||
Reference in New Issue
Block a user