diff --git a/source/part-1-workspace/django/_index.adoc b/source/part-1-workspace/django/_index.adoc index 97c209c..be69bef 100644 --- a/source/part-1-workspace/django/_index.adoc +++ b/source/part-1-workspace/django/_index.adoc @@ -444,6 +444,45 @@ image::images/django/django-first-template.png[] -> Construction du fichier setup.cfg +==== setup.cfg + +(Repris de cookie-cutter-django) + +[source,ini] +---- +[flake8] +max-line-length = 120 +exclude = .tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules,venv + +[pycodestyle] +max-line-length = 120 +exclude = .tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules,venv + +[mypy] +python_version = 3.8 +check_untyped_defs = True +ignore_missing_imports = True +warn_unused_ignores = True +warn_redundant_casts = True +warn_unused_configs = True +plugins = mypy_django_plugin.main + +[mypy.plugins.django-stubs] +django_settings_module = config.settings.test + +[mypy-*.migrations.*] +# Django migrations should not produce any errors: +ignore_errors = True + +[coverage:run] +include = khana/* +omit = *migrations*, *tests* +plugins = + django_coverage_plugin + +---- + + === Structure finale de notre environnement Nous avons donc la strucutre finale pour notre environnement de travail: @@ -505,3 +544,11 @@ Pour démarrer, créez un environnement virtuel (comme d'habitude): Si vous explorez les différents fichiers, vous trouverez beaucoup de similitudes avec la configuration que nous vous proposions ci-dessus. En fonction de votre expérience, vous serez tenté de modifier certains paramètres, pour faire correspondre ces sources avec votre utilisation ou vos habitudes. + +NOTE: Il est aussi possible d'utiliser l'argument `--template`, suivie d'un argument reprenant le nom de votre projet (``), lors de l'initialisation d'un projet avec la commande `startproject` de `django-admin`, afin de calquer votre arborescence sur un projet existant. +La https://docs.djangoproject.com/en/stable/ref/django-admin/#startproject[documentation] à ce sujet est assez complète. + +[source,bash] +---- +django-admin.py startproject --template=https://github.com/notanumber/django-vagrant/archive/master.zip --name=Vagrantfile --extension=py --extension=sls +---- \ No newline at end of file diff --git a/source/part-1-workspace/environment/_index.adoc b/source/part-1-workspace/environment/_index.adoc index 01ed60e..3b99395 100644 --- a/source/part-1-workspace/environment/_index.adoc +++ b/source/part-1-workspace/environment/_index.adoc @@ -586,3 +586,163 @@ De plus, la plupart des plateformes de dépôts présenteront ces informations d image::images/environment/gitea-commit-message.png[] La première ligne est reprise comme titre (normalement, sur 50 caractères maximum); le reste est repris comme de la description. + +=== Un système de virtualisation + +Par "_système de virtualisation_", nous entendons n'importe quel application, système d'exploitation, système de containeurisation, ... qui permette de créer ou recréer un environnement de développement aussi proche que celui en production. +Les solutions sont nombreuses: + +* https://www.virtualbox.org/[VirtualBox] +* https://www.vagrantup.com/[Vagrant] +* https://www.docker.com/[Docker] +* https://linuxcontainers.org/lxc/[Linux Containers (LXC)] +* https://docs.microsoft.com/fr-fr/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v[Hyper-V] + +Ces quelques propositions se situent un cran plus loin que la "simple" isolation d'un environnement, puisqu'elles vous permettront de construire un environnement complet. +Elles constituent donc une étape supplémentaires dans la configuration de votre espace de travail, mais en amélioreront la qualité. + +Dans la suite, nous détaillerons Vagrant et Docker, qui constituent deux solutions automatisables et multiplateformes, dont la configuration peut faire partie intégrante de vos sources. + +==== Vagrant + + +==== Docker + + +[source,dockerfile] +---- +version: '3' + +volumes: + local_postgres_data: {} + local_postgres_data_backups: {} + +services: + django: &django + build: + context: . + dockerfile: ./compose/local/django/Dockerfile + image: khana_local_django + container_name: django + depends_on: + - postgres + volumes: + - .:/app:z + env_file: + - ./.envs/.local/.django + - ./.envs/.local/.postgres + ports: + - "8000:8000" + command: /start + + postgres: + build: + context: . + dockerfile: ./compose/production/postgres/Dockerfile + image: khana_production_postgres + container_name: postgres + volumes: + - local_postgres_data:/var/lib/postgresql/data:Z + - local_postgres_data_backups:/backups:z + env_file: + - ./.envs/.local/.postgres + + docs: + image: khana_local_docs + container_name: docs + build: + context: . + dockerfile: ./compose/local/docs/Dockerfile + env_file: + - ./.envs/.local/.django + volumes: + - ./docs:/docs:z + - ./config:/app/config:z + - ./khana:/app/khana:z + ports: + - "7000:7000" + command: /start-docs + + redis: + image: redis:5.0 + container_name: redis + + celeryworker: + <<: *django + image: khana_local_celeryworker + container_name: celeryworker + depends_on: + - redis + - postgres + + ports: [] + command: /start-celeryworker + + celerybeat: + <<: *django + image: khana_local_celerybeat + container_name: celerybeat + depends_on: + - redis + - postgres + + ports: [] + command: /start-celerybeat + + flower: + <<: *django + image: khana_local_flower + container_name: flower + ports: + - "5555:5555" + command: /start-flower + +---- + + +[source,dockerfile] +---- +FROM python:3.8-slim-buster + +ENV PYTHONUNBUFFERED 1 +ENV PYTHONDONTWRITEBYTECODE 1 + +RUN apt-get update \ + # dependencies for building Python packages + && apt-get install -y build-essential \ + # psycopg2 dependencies + && apt-get install -y libpq-dev \ + # Translations dependencies + && apt-get install -y gettext \ + # cleaning up unused files + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -rf /var/lib/apt/lists/* + +# Requirements are installed here to ensure they will be cached. +COPY ./requirements /requirements +RUN pip install -r /requirements/local.txt + +COPY ./compose/production/django/entrypoint /entrypoint +RUN sed -i 's/\r$//g' /entrypoint +RUN chmod +x /entrypoint + +COPY ./compose/local/django/start /start +RUN sed -i 's/\r$//g' /start +RUN chmod +x /start + +COPY ./compose/local/django/celery/worker/start /start-celeryworker +RUN sed -i 's/\r$//g' /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 +RUN sed -i 's/\r$//g' /start-flower +RUN chmod +x /start-flower + +WORKDIR /app + +ENTRYPOINT ["/entrypoint"] +---- diff --git a/source/part-3-django-concepts/translations.adoc b/source/part-3-django-concepts/translations.adoc new file mode 100644 index 0000000..c420f84 --- /dev/null +++ b/source/part-3-django-concepts/translations.adoc @@ -0,0 +1,8 @@ +=== Traductions + +[source,bash] +---- +python manage.py makemessages +---- + ++ plein d'explications: traductions, génération, interface (urls, breadcrumbs, ...). \ No newline at end of file