updated docker and readme
2
.gitignore
vendored
|
@ -55,7 +55,7 @@ coverage.xml
|
||||||
staticfiles/
|
staticfiles/
|
||||||
|
|
||||||
# Sphinx documentation
|
# Sphinx documentation
|
||||||
docs/_build/
|
image_markuper/docs/_build/
|
||||||
|
|
||||||
# PyBuilder
|
# PyBuilder
|
||||||
target/
|
target/
|
||||||
|
|
25
README.md
|
@ -1 +1,24 @@
|
||||||
# backend
|
# ЛЦТ 9 задача, Magnum Opus backend
|
||||||
|
|
||||||
|
### Запуск
|
||||||
|
```shell
|
||||||
|
$ docker-compose -f local.yml up
|
||||||
|
```
|
||||||
|
|
||||||
|
###### API на http://127.0.0.1:8000/api/
|
||||||
|
|
||||||
|
### Стек
|
||||||
|
- Django
|
||||||
|
- Postgresql
|
||||||
|
- Celery
|
||||||
|
- DRF
|
||||||
|
- django-polymorphic
|
||||||
|
- pydicom
|
||||||
|
|
||||||
|
|
||||||
|
### Особенности
|
||||||
|
|
||||||
|
- полиморфные модели для рисунков(позволяет легко добавлять новые типы фигур)
|
||||||
|
- celery + [celery flower](http://127.0.0.1:5555) для асинхронной обработки STL и просмотра задач
|
||||||
|
- документация API в [swagger](http://127.0.0.1:8000/api/docs/) и [redoc](http://127.0.0.1:8000/api/redoc/)
|
||||||
|
- линтеры и workflow-ы для разработки
|
||||||
|
|
|
@ -13,7 +13,9 @@ RUN apt-get update && apt-get install --no-install-recommends -y \
|
||||||
# dependencies for building Python packages
|
# dependencies for building Python packages
|
||||||
build-essential \
|
build-essential \
|
||||||
# psycopg2 dependencies
|
# psycopg2 dependencies
|
||||||
libpq-dev
|
libpq-dev \
|
||||||
|
# python-magic dependencies
|
||||||
|
libmagic1
|
||||||
|
|
||||||
# Requirements are installed here to ensure they will be cached.
|
# Requirements are installed here to ensure they will be cached.
|
||||||
COPY ./requirements .
|
COPY ./requirements .
|
||||||
|
@ -41,6 +43,7 @@ RUN apt-get update && apt-get install --no-install-recommends -y \
|
||||||
libpq-dev \
|
libpq-dev \
|
||||||
# Translations dependencies
|
# Translations dependencies
|
||||||
gettext \
|
gettext \
|
||||||
|
libmagic-dev \
|
||||||
# cleaning up unused files
|
# cleaning up unused files
|
||||||
&& apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
|
&& apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
@ -66,10 +69,6 @@ COPY ./compose/local/django/celery/worker/start /start-celeryworker
|
||||||
RUN sed -i 's/\r$//g' /start-celeryworker
|
RUN sed -i 's/\r$//g' /start-celeryworker
|
||||||
RUN chmod +x /start-celeryworker
|
RUN chmod +x /start-celeryworker
|
||||||
|
|
||||||
COPY ./compose/local/django/celery/beat/start /start-celerybeat
|
|
||||||
RUN sed -i 's/\r$//g' /start-celerybeat
|
|
||||||
RUN chmod +x /start-celerybeat
|
|
||||||
|
|
||||||
COPY ./compose/local/django/celery/flower/start /start-flower
|
COPY ./compose/local/django/celery/flower/start /start-flower
|
||||||
RUN sed -i 's/\r$//g' /start-flower
|
RUN sed -i 's/\r$//g' /start-flower
|
||||||
RUN chmod +x /start-flower
|
RUN chmod +x /start-flower
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
|
|
||||||
|
|
||||||
rm -f './celerybeat.pid'
|
|
||||||
celery -A config.celery_app beat -l INFO
|
|
|
@ -3,9 +3,6 @@
|
||||||
set -o errexit
|
set -o errexit
|
||||||
set -o nounset
|
set -o nounset
|
||||||
|
|
||||||
|
cd /app/image_markuper
|
||||||
|
|
||||||
celery \
|
celery -A config flower
|
||||||
-A config.celery_app \
|
|
||||||
-b "${CELERY_BROKER_URL}" \
|
|
||||||
flower \
|
|
||||||
--basic_auth="${CELERY_FLOWER_USER}:${CELERY_FLOWER_PASSWORD}"
|
|
||||||
|
|
|
@ -3,5 +3,6 @@
|
||||||
set -o errexit
|
set -o errexit
|
||||||
set -o nounset
|
set -o nounset
|
||||||
|
|
||||||
|
cd /app/image_markuper
|
||||||
|
|
||||||
watchfiles celery.__main__.main --args '-A config.celery_app worker -l INFO'
|
exec celery -A config worker --loglevel=INFO
|
||||||
|
|
|
@ -5,5 +5,6 @@ set -o pipefail
|
||||||
set -o nounset
|
set -o nounset
|
||||||
|
|
||||||
|
|
||||||
|
python manage.py migrate users
|
||||||
python manage.py migrate
|
python manage.py migrate
|
||||||
python manage.py runserver_plus 0.0.0.0:8000
|
python manage.py runserver_plus 0.0.0.0:8000
|
||||||
|
|
|
@ -61,4 +61,4 @@ COPY ./compose/local/docs/start /start-docs
|
||||||
RUN sed -i 's/\r$//g' /start-docs
|
RUN sed -i 's/\r$//g' /start-docs
|
||||||
RUN chmod +x /start-docs
|
RUN chmod +x /start-docs
|
||||||
|
|
||||||
WORKDIR /docs
|
WORKDIR /app/image_markuper/docs
|
||||||
|
|
|
@ -4,4 +4,6 @@ set -o errexit
|
||||||
set -o pipefail
|
set -o pipefail
|
||||||
set -o nounset
|
set -o nounset
|
||||||
|
|
||||||
|
cd /app/image_markuper
|
||||||
|
|
||||||
make livehtml
|
make livehtml
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o pipefail
|
|
||||||
set -o nounset
|
|
||||||
|
|
||||||
|
|
||||||
exec celery -A config.celery_app beat -l INFO
|
|
|
@ -4,5 +4,4 @@ set -o errexit
|
||||||
set -o pipefail
|
set -o pipefail
|
||||||
set -o nounset
|
set -o nounset
|
||||||
|
|
||||||
|
|
||||||
exec celery -A config.celery_app worker -l INFO
|
exec celery -A config.celery_app worker -l INFO
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
FROM traefik:v2.2.11
|
|
||||||
RUN mkdir -p /etc/traefik/acme \
|
|
||||||
&& touch /etc/traefik/acme/acme.json \
|
|
||||||
&& chmod 600 /etc/traefik/acme/acme.json
|
|
||||||
COPY ./compose/production/traefik/traefik.yml /etc/traefik
|
|
|
@ -1,75 +0,0 @@
|
||||||
log:
|
|
||||||
level: INFO
|
|
||||||
|
|
||||||
entryPoints:
|
|
||||||
web:
|
|
||||||
# http
|
|
||||||
address: ":80"
|
|
||||||
http:
|
|
||||||
# https://docs.traefik.io/routing/entrypoints/#entrypoint
|
|
||||||
redirections:
|
|
||||||
entryPoint:
|
|
||||||
to: web-secure
|
|
||||||
|
|
||||||
web-secure:
|
|
||||||
# https
|
|
||||||
address: ":443"
|
|
||||||
|
|
||||||
flower:
|
|
||||||
address: ":5555"
|
|
||||||
|
|
||||||
certificatesResolvers:
|
|
||||||
letsencrypt:
|
|
||||||
# https://docs.traefik.io/master/https/acme/#lets-encrypt
|
|
||||||
acme:
|
|
||||||
email: "sanspie@example.com"
|
|
||||||
storage: /etc/traefik/acme/acme.json
|
|
||||||
# https://docs.traefik.io/master/https/acme/#httpchallenge
|
|
||||||
httpChallenge:
|
|
||||||
entryPoint: web
|
|
||||||
|
|
||||||
http:
|
|
||||||
routers:
|
|
||||||
web-secure-router:
|
|
||||||
rule: "Host(`akarpov.ru`) || Host(`www.akarpov.ru`)"
|
|
||||||
entryPoints:
|
|
||||||
- web-secure
|
|
||||||
middlewares:
|
|
||||||
- csrf
|
|
||||||
service: django
|
|
||||||
tls:
|
|
||||||
# https://docs.traefik.io/master/routing/routers/#certresolver
|
|
||||||
certResolver: letsencrypt
|
|
||||||
|
|
||||||
flower-secure-router:
|
|
||||||
rule: "Host(`akarpov.ru`)"
|
|
||||||
entryPoints:
|
|
||||||
- flower
|
|
||||||
service: flower
|
|
||||||
tls:
|
|
||||||
# https://docs.traefik.io/master/routing/routers/#certresolver
|
|
||||||
certResolver: letsencrypt
|
|
||||||
|
|
||||||
middlewares:
|
|
||||||
csrf:
|
|
||||||
# https://docs.traefik.io/master/middlewares/headers/#hostsproxyheaders
|
|
||||||
# https://docs.djangoproject.com/en/dev/ref/csrf/#ajax
|
|
||||||
headers:
|
|
||||||
hostsProxyHeaders: ["X-CSRFToken"]
|
|
||||||
|
|
||||||
services:
|
|
||||||
django:
|
|
||||||
loadBalancer:
|
|
||||||
servers:
|
|
||||||
- url: http://django:5000
|
|
||||||
|
|
||||||
flower:
|
|
||||||
loadBalancer:
|
|
||||||
servers:
|
|
||||||
- url: http://flower:5555
|
|
||||||
|
|
||||||
providers:
|
|
||||||
# https://docs.traefik.io/master/providers/file/
|
|
||||||
file:
|
|
||||||
filename: /etc/traefik/traefik.yml
|
|
||||||
watch: true
|
|
|
@ -1,29 +0,0 @@
|
||||||
# Minimal makefile for Sphinx documentation
|
|
||||||
#
|
|
||||||
|
|
||||||
# You can set these variables from the command line, and also
|
|
||||||
# from the environment for the first two.
|
|
||||||
SPHINXOPTS ?=
|
|
||||||
SPHINXBUILD ?= sphinx-build
|
|
||||||
SOURCEDIR = .
|
|
||||||
BUILDDIR = ./_build
|
|
||||||
APP = /app
|
|
||||||
|
|
||||||
.PHONY: help livehtml apidocs Makefile
|
|
||||||
|
|
||||||
# Put it first so that "make" without argument is like "make help".
|
|
||||||
help:
|
|
||||||
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) -c .
|
|
||||||
|
|
||||||
# Build, watch and serve docs with live reload
|
|
||||||
livehtml:
|
|
||||||
sphinx-autobuild -b html --host 0.0.0.0 --port 9000 --watch $(APP) -c . $(SOURCEDIR) $(BUILDDIR)/html
|
|
||||||
|
|
||||||
# Outputs rst files from django application code
|
|
||||||
apidocs:
|
|
||||||
sphinx-apidoc -o $(SOURCEDIR)/api $(APP)
|
|
||||||
|
|
||||||
# Catch-all target: route all unknown targets to Sphinx using the new
|
|
||||||
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
|
||||||
%: Makefile
|
|
||||||
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) -c .
|
|
|
@ -1 +0,0 @@
|
||||||
# Included so that Django's startproject comment runs against the docs directory
|
|
63
docs/conf.py
|
@ -1,63 +0,0 @@
|
||||||
# Configuration file for the Sphinx documentation builder.
|
|
||||||
#
|
|
||||||
# This file only contains a selection of the most common options. For a full
|
|
||||||
# list see the documentation:
|
|
||||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html
|
|
||||||
|
|
||||||
# -- Path setup --------------------------------------------------------------
|
|
||||||
|
|
||||||
# If extensions (or modules to document with autodoc) are in another directory,
|
|
||||||
# add these directories to sys.path here. If the directory is relative to the
|
|
||||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import django
|
|
||||||
|
|
||||||
if os.getenv("READTHEDOCS", default=False) == "True":
|
|
||||||
sys.path.insert(0, os.path.abspath(".."))
|
|
||||||
os.environ["DJANGO_READ_DOT_ENV_FILE"] = "True"
|
|
||||||
os.environ["USE_DOCKER"] = "no"
|
|
||||||
else:
|
|
||||||
sys.path.insert(0, os.path.abspath("/app"))
|
|
||||||
os.environ["DATABASE_URL"] = "sqlite:///readthedocs.db"
|
|
||||||
os.environ["CELERY_BROKER_URL"] = os.getenv("REDIS_URL", "redis://redis:6379")
|
|
||||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.local")
|
|
||||||
django.setup()
|
|
||||||
|
|
||||||
# -- Project information -----------------------------------------------------
|
|
||||||
|
|
||||||
project = "Image markuper"
|
|
||||||
copyright = """2022, sanspie"""
|
|
||||||
author = "sanspie"
|
|
||||||
|
|
||||||
|
|
||||||
# -- General configuration ---------------------------------------------------
|
|
||||||
|
|
||||||
# Add any Sphinx extension module names here, as strings. They can be
|
|
||||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
|
||||||
# ones.
|
|
||||||
extensions = [
|
|
||||||
"sphinx.ext.autodoc",
|
|
||||||
"sphinx.ext.napoleon",
|
|
||||||
]
|
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
|
||||||
# templates_path = ["_templates"]
|
|
||||||
|
|
||||||
# List of patterns, relative to source directory, that match files and
|
|
||||||
# directories to ignore when looking for source files.
|
|
||||||
# This pattern also affects html_static_path and html_extra_path.
|
|
||||||
exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
|
|
||||||
|
|
||||||
# -- Options for HTML output -------------------------------------------------
|
|
||||||
|
|
||||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
|
||||||
# a list of builtin themes.
|
|
||||||
#
|
|
||||||
html_theme = "alabaster"
|
|
||||||
|
|
||||||
# Add any paths that contain custom static files (such as style sheets) here,
|
|
||||||
# relative to this directory. They are copied after the builtin static files,
|
|
||||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
|
||||||
# html_static_path = ["_static"]
|
|
|
@ -1,38 +0,0 @@
|
||||||
How To - Project Documentation
|
|
||||||
======================================================================
|
|
||||||
|
|
||||||
Get Started
|
|
||||||
----------------------------------------------------------------------
|
|
||||||
|
|
||||||
Documentation can be written as rst files in `image_markuper/docs`.
|
|
||||||
|
|
||||||
|
|
||||||
To build and serve docs, use the commands::
|
|
||||||
|
|
||||||
docker-compose -f local.yml up docs
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Changes to files in `docs/_source` will be picked up and reloaded automatically.
|
|
||||||
|
|
||||||
`Sphinx <https://www.sphinx-doc.org/>`_ is the tool used to build documentation.
|
|
||||||
|
|
||||||
Docstrings to Documentation
|
|
||||||
----------------------------------------------------------------------
|
|
||||||
|
|
||||||
The sphinx extension `apidoc <https://www.sphinx-doc.org/en/master/man/sphinx-apidoc.html/>`_ is used to automatically document code using signatures and docstrings.
|
|
||||||
|
|
||||||
Numpy or Google style docstrings will be picked up from project files and available for documentation. See the `Napoleon <https://sphinxcontrib-napoleon.readthedocs.io/en/latest/>`_ extension for details.
|
|
||||||
|
|
||||||
For an in-use example, see the `page source <_sources/users.rst.txt>`_ for :ref:`users`.
|
|
||||||
|
|
||||||
To compile all docstrings automatically into documentation source files, use the command:
|
|
||||||
::
|
|
||||||
|
|
||||||
make apidocs
|
|
||||||
|
|
||||||
|
|
||||||
This can be done in the docker container:
|
|
||||||
::
|
|
||||||
|
|
||||||
docker run --rm docs make apidocs
|
|
|
@ -1,24 +0,0 @@
|
||||||
.. Image markuper documentation master file, created by
|
|
||||||
sphinx-quickstart.
|
|
||||||
You can adapt this file completely to your liking, but it should at least
|
|
||||||
contain the root `toctree` directive.
|
|
||||||
|
|
||||||
Welcome to Image markuper's documentation!
|
|
||||||
======================================================================
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
:caption: Contents:
|
|
||||||
|
|
||||||
howto
|
|
||||||
pycharm/configuration
|
|
||||||
users
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Indices and tables
|
|
||||||
==================
|
|
||||||
|
|
||||||
* :ref:`genindex`
|
|
||||||
* :ref:`modindex`
|
|
||||||
* :ref:`search`
|
|
|
@ -1,46 +0,0 @@
|
||||||
@ECHO OFF
|
|
||||||
|
|
||||||
pushd %~dp0
|
|
||||||
|
|
||||||
REM Command file for Sphinx documentation
|
|
||||||
|
|
||||||
|
|
||||||
if "%SPHINXBUILD%" == "" (
|
|
||||||
set SPHINXBUILD=sphinx-build -c .
|
|
||||||
)
|
|
||||||
set SOURCEDIR=_source
|
|
||||||
set BUILDDIR=_build
|
|
||||||
set APP=..\image_markuper
|
|
||||||
|
|
||||||
if "%1" == "" goto help
|
|
||||||
|
|
||||||
%SPHINXBUILD% >NUL 2>NUL
|
|
||||||
if errorlevel 9009 (
|
|
||||||
echo.
|
|
||||||
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
|
||||||
echo.installed, then set the SPHINXBUILD environment variable to point
|
|
||||||
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
|
||||||
echo.may add the Sphinx directory to PATH.
|
|
||||||
echo.
|
|
||||||
echo.Install sphinx-autobuild for live serving.
|
|
||||||
echo.If you don't have Sphinx installed, grab it from
|
|
||||||
echo.http://sphinx-doc.org/
|
|
||||||
exit /b 1
|
|
||||||
)
|
|
||||||
|
|
||||||
%SPHINXBUILD% -b %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
|
||||||
goto end
|
|
||||||
|
|
||||||
:livehtml
|
|
||||||
sphinx-autobuild -b html --open-browser -p 9000 --watch %APP% -c . %SOURCEDIR% %BUILDDIR%/html
|
|
||||||
GOTO :EOF
|
|
||||||
|
|
||||||
:apidocs
|
|
||||||
sphinx-apidoc -o %SOURCEDIR%/api %APP%
|
|
||||||
GOTO :EOF
|
|
||||||
|
|
||||||
:help
|
|
||||||
%SPHINXBUILD% -b help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
|
||||||
|
|
||||||
:end
|
|
||||||
popd
|
|
|
@ -1,70 +0,0 @@
|
||||||
Docker Remote Debugging
|
|
||||||
=======================
|
|
||||||
|
|
||||||
To connect to python remote interpreter inside docker, you have to make sure first, that Pycharm is aware of your docker.
|
|
||||||
|
|
||||||
Go to *Settings > Build, Execution, Deployment > Docker*. If you are on linux, you can use docker directly using its socket `unix:///var/run/docker.sock`, if you are on Windows or Mac, make sure that you have docker-machine installed, then you can simply *Import credentials from Docker Machine*.
|
|
||||||
|
|
||||||
.. image:: images/1.png
|
|
||||||
|
|
||||||
Configure Remote Python Interpreter
|
|
||||||
-----------------------------------
|
|
||||||
|
|
||||||
This repository comes with already prepared "Run/Debug Configurations" for docker.
|
|
||||||
|
|
||||||
.. image:: images/2.png
|
|
||||||
|
|
||||||
But as you can see, at the beginning there is something wrong with them. They have red X on django icon, and they cannot be used, without configuring remote python interpreter. To do that, you have to go to *Settings > Build, Execution, Deployment* first.
|
|
||||||
|
|
||||||
|
|
||||||
Next, you have to add new remote python interpreter, based on already tested deployment settings. Go to *Settings > Project > Project Interpreter*. Click on the cog icon, and click *Add Remote*.
|
|
||||||
|
|
||||||
.. image:: images/3.png
|
|
||||||
|
|
||||||
Switch to *Docker Compose* and select `local.yml` file from directory of your project, next set *Service name* to `django`
|
|
||||||
|
|
||||||
.. image:: images/4.png
|
|
||||||
|
|
||||||
Having that, click *OK*. Close *Settings* panel, and wait few seconds...
|
|
||||||
|
|
||||||
.. image:: images/7.png
|
|
||||||
|
|
||||||
After few seconds, all *Run/Debug Configurations* should be ready to use.
|
|
||||||
|
|
||||||
.. image:: images/8.png
|
|
||||||
|
|
||||||
**Things you can do with provided configuration**:
|
|
||||||
|
|
||||||
* run and debug python code
|
|
||||||
|
|
||||||
.. image:: images/f1.png
|
|
||||||
|
|
||||||
* run and debug tests
|
|
||||||
|
|
||||||
.. image:: images/f2.png
|
|
||||||
.. image:: images/f3.png
|
|
||||||
|
|
||||||
* run and debug migrations or different django management commands
|
|
||||||
|
|
||||||
.. image:: images/f4.png
|
|
||||||
|
|
||||||
* and many others..
|
|
||||||
|
|
||||||
Known issues
|
|
||||||
------------
|
|
||||||
|
|
||||||
* Pycharm hangs on "Connecting to Debugger"
|
|
||||||
|
|
||||||
.. image:: images/issue1.png
|
|
||||||
|
|
||||||
This might be fault of your firewall. Take a look on this ticket - https://youtrack.jetbrains.com/issue/PY-18913
|
|
||||||
|
|
||||||
* Modified files in `.idea` directory
|
|
||||||
|
|
||||||
Most of the files from `.idea/` were added to `.gitignore` with a few exceptions, which were made, to provide "ready to go" configuration. After adding remote interpreter some of these files are altered by PyCharm:
|
|
||||||
|
|
||||||
.. image:: images/issue2.png
|
|
||||||
|
|
||||||
In theory you can remove them from repository, but then, other people will lose a ability to initialize a project from provided configurations as you did. To get rid of this annoying state, you can run command::
|
|
||||||
|
|
||||||
$ git update-index --assume-unchanged image_markuper.iml
|
|
Before Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 177 KiB |
Before Width: | Height: | Size: 110 KiB |
Before Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 249 KiB |
Before Width: | Height: | Size: 229 KiB |
Before Width: | Height: | Size: 230 KiB |
Before Width: | Height: | Size: 222 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 11 KiB |
|
@ -1,15 +0,0 @@
|
||||||
.. _users:
|
|
||||||
|
|
||||||
Users
|
|
||||||
======================================================================
|
|
||||||
|
|
||||||
Starting a new project, it’s highly recommended to set up a custom user model,
|
|
||||||
even if the default User model is sufficient for you.
|
|
||||||
|
|
||||||
This model behaves identically to the default user model,
|
|
||||||
but you’ll be able to customize it in the future if the need arises.
|
|
||||||
|
|
||||||
.. automodule:: image_markuper.users.models
|
|
||||||
:members:
|
|
||||||
:noindex:
|
|
||||||
|
|
27
local.yml
|
@ -36,23 +36,6 @@ services:
|
||||||
env_file:
|
env_file:
|
||||||
- ./.envs/.local/.postgres
|
- ./.envs/.local/.postgres
|
||||||
|
|
||||||
docs:
|
|
||||||
image: image_markuper_local_docs
|
|
||||||
container_name: image_markuper_local_docs
|
|
||||||
platform: linux/x86_64
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: ./compose/local/docs/Dockerfile
|
|
||||||
env_file:
|
|
||||||
- ./.envs/.local/.django
|
|
||||||
volumes:
|
|
||||||
- ./docs:/docs:z
|
|
||||||
- ./config:/app/config:z
|
|
||||||
- ./image_markuper:/app/image_markuper:z
|
|
||||||
ports:
|
|
||||||
- "9000:9000"
|
|
||||||
command: /start-docs
|
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis:6
|
image: redis:6
|
||||||
container_name: image_markuper_local_redis
|
container_name: image_markuper_local_redis
|
||||||
|
@ -67,16 +50,6 @@ services:
|
||||||
ports: []
|
ports: []
|
||||||
command: /start-celeryworker
|
command: /start-celeryworker
|
||||||
|
|
||||||
celerybeat:
|
|
||||||
<<: *django
|
|
||||||
image: image_markuper_local_celerybeat
|
|
||||||
container_name: image_markuper_local_celerybeat
|
|
||||||
depends_on:
|
|
||||||
- redis
|
|
||||||
- postgres
|
|
||||||
ports: []
|
|
||||||
command: /start-celerybeat
|
|
||||||
|
|
||||||
flower:
|
flower:
|
||||||
<<: *django
|
<<: *django
|
||||||
image: image_markuper_local_flower
|
image: image_markuper_local_flower
|
||||||
|
|
|
@ -3,7 +3,6 @@ version: '3'
|
||||||
volumes:
|
volumes:
|
||||||
production_postgres_data: {}
|
production_postgres_data: {}
|
||||||
production_postgres_data_backups: {}
|
production_postgres_data_backups: {}
|
||||||
production_traefik: {}
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
django: &django
|
django: &django
|
||||||
|
@ -31,20 +30,6 @@ services:
|
||||||
env_file:
|
env_file:
|
||||||
- ./.envs/.production/.postgres
|
- ./.envs/.production/.postgres
|
||||||
|
|
||||||
traefik:
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: ./compose/production/traefik/Dockerfile
|
|
||||||
image: image_markuper_production_traefik
|
|
||||||
depends_on:
|
|
||||||
- django
|
|
||||||
volumes:
|
|
||||||
- production_traefik:/etc/traefik/acme:z
|
|
||||||
ports:
|
|
||||||
- "0.0.0.0:80:80"
|
|
||||||
- "0.0.0.0:443:443"
|
|
||||||
- "0.0.0.0:5555:5555"
|
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis:6
|
image: redis:6
|
||||||
|
|
||||||
|
@ -53,11 +38,6 @@ services:
|
||||||
image: image_markuper_production_celeryworker
|
image: image_markuper_production_celeryworker
|
||||||
command: /start-celeryworker
|
command: /start-celeryworker
|
||||||
|
|
||||||
celerybeat:
|
|
||||||
<<: *django
|
|
||||||
image: image_markuper_production_celerybeat
|
|
||||||
command: /start-celerybeat
|
|
||||||
|
|
||||||
flower:
|
flower:
|
||||||
<<: *django
|
<<: *django
|
||||||
image: image_markuper_production_flower
|
image: image_markuper_production_flower
|
||||||
|
|
|
@ -7,7 +7,6 @@ whitenoise==6.2.0 # https://github.com/evansd/whitenoise
|
||||||
redis==4.3.4 # https://github.com/redis/redis-py
|
redis==4.3.4 # https://github.com/redis/redis-py
|
||||||
hiredis==2.0.0 # https://github.com/redis/hiredis-py
|
hiredis==2.0.0 # https://github.com/redis/hiredis-py
|
||||||
celery==5.2.7 # pyup: < 6.0 # https://github.com/celery/celery
|
celery==5.2.7 # pyup: < 6.0 # https://github.com/celery/celery
|
||||||
django-celery-beat==2.4.0 # https://github.com/celery/django-celery-beat
|
|
||||||
flower==1.2.0 # https://github.com/mher/flower
|
flower==1.2.0 # https://github.com/mher/flower
|
||||||
|
|
||||||
# Django
|
# Django
|
||||||
|
@ -25,7 +24,7 @@ django-cors-headers==3.13.0 # https://github.com/adamchainz/django-cors-headers
|
||||||
djangorestframework-simplejwt==5.2.2
|
djangorestframework-simplejwt==5.2.2
|
||||||
# DRF-spectacular for api documentation
|
# DRF-spectacular for api documentation
|
||||||
drf-spectacular==0.24.2 # https://github.com/tfranzel/drf-spectacular
|
drf-spectacular==0.24.2 # https://github.com/tfranzel/drf-spectacular
|
||||||
|
django-polymorphic==3.1.0
|
||||||
|
|
||||||
pydicom==2.3.0
|
pydicom==2.3.0
|
||||||
numpy==1.23.4
|
numpy==1.23.4
|
||||||
|
|