diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8d28c037..f9fde42e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,25 +1,51 @@ -image: python:3.8 - stages: - test - quality-assurance -before_script: - - pip install tox - +# Debian Buster py37-django22: - image: python:3.7 stage: test + image: debian:buster-backports + before_script: + - > + apt-get update && + apt-get install -t buster-backports -y python3-django python3-django-crispy-forms + python3-django-extensions python3-django-filters python3-django-polymorphic + python3-djangorestframework python3-django-cas-server python3-psycopg2 python3-pil + python3-babel python3-lockfile python3-pip python3-phonenumbers ipython3 + gettext libjs-bootstrap4 fonts-font-awesome tox && + rm -rf /var/lib/apt/lists/* script: tox -e py37-django22 +# Ubuntu 20.04 py38-django22: - image: python:3.8 stage: test + image: ubuntu:20.04 + before_script: + # Fix tzdata prompt + - ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime && echo Europe/Paris > /etc/timezone + - > + apt-get update && + apt-get install -y python3-django python3-django-crispy-forms + python3-django-extensions python3-django-filters python3-django-polymorphic + python3-djangorestframework python3-django-cas-server python3-psycopg2 python3-pil + python3-babel python3-lockfile python3-pip python3-phonenumbers ipython3 + gettext libjs-bootstrap4 fonts-font-awesome tox && + rm -rf /var/lib/apt/lists/* script: tox -e py38-django22 linters: - image: python:3.8 stage: quality-assurance + image: debian:buster-backports + before_script: + - > + apt-get update && + apt-get install -t buster-backports -y python3-django python3-django-crispy-forms + python3-django-extensions python3-django-filters python3-django-polymorphic + python3-djangorestframework python3-django-cas-server python3-psycopg2 python3-pil + python3-babel python3-lockfile python3-pip python3-phonenumbers ipython3 + gettext libjs-bootstrap4 fonts-font-awesome tox && + rm -rf /var/lib/apt/lists/* script: tox -e linters # Be nice to new contributors, but please use `tox` diff --git a/Dockerfile b/Dockerfile index 60acc6e3..ef2531a0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,27 +1,26 @@ -FROM python:3-alpine +FROM debian:buster-backports +# Force the stdout and stderr streams to be unbuffered ENV PYTHONUNBUFFERED 1 -# Install LaTeX requirements -RUN apk add --no-cache gettext texlive texmf-dist-latexextra texmf-dist-fontsextra nginx gcc libc-dev libffi-dev postgresql-dev libxml2-dev libxslt-dev jpeg-dev +# Install Django, external apps, LaTeX and dependencies +RUN apt-get update && \ + apt-get install -t buster-backports -y python3-django python3-django-crispy-forms \ + python3-django-extensions python3-django-filters python3-django-polymorphic \ + python3-djangorestframework python3-django-cas-server python3-psycopg2 python3-pil \ + python3-babel python3-lockfile python3-pip python3-phonenumbers ipython3 \ + uwsgi uwsgi-plugin-python3 \ + texlive-latex-extra texlive-fonts-extra texlive-lang-french \ + gettext libjs-bootstrap4 fonts-font-awesome && \ + rm -rf /var/lib/apt/lists/* -RUN apk add --no-cache bash +# Instal PyPI requirements +COPY requirements.txt /var/www/note_kfet/ +RUN pip3 install -r /var/www/note_kfet/requirements.txt --no-cache-dir -RUN mkdir /code -WORKDIR /code -COPY requirements /code/requirements -RUN pip install gunicorn ptpython --no-cache-dir -RUN pip install -r requirements/base.txt -r requirements/cas.txt -r requirements/production.txt --no-cache-dir +# Copy code +WORKDIR /var/www/note_kfet +COPY . /var/www/note_kfet/ -COPY . /code/ - -# Configure nginx -RUN mkdir /run/nginx -RUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log -RUN ln -sf /code/nginx_note.conf_docker /etc/nginx/conf.d/nginx_note.conf -RUN rm /etc/nginx/conf.d/default.conf - -ENTRYPOINT ["/code/entrypoint.sh"] -EXPOSE 80 - -CMD ["./manage.py", "shell_plus", "--ptpython"] +EXPOSE 8080 +ENTRYPOINT ["/var/www/note_kfet/entrypoint.sh"] diff --git a/README.md b/README.md index 7087b120..76cc69a3 100644 --- a/README.md +++ b/README.md @@ -14,21 +14,25 @@ Sinon vous pouvez suivre les étapes ici. ### Installation avec Debian/Ubuntu 1. **Installation des dépendances APT.** + On tire les dépendances le plus possible à partir des dépôts de Debian. + On a besoin d'un environnement LaTeX pour générer les factures. ```bash - $ sudo apt install nginx python3 python3-pip python3-dev uwsgi uwsgi-plugin-python3 python3-venv git acl - ``` - - La génération des factures de l'application trésorerie nécessite une installation de LaTeX suffisante, - - ```bash - $ sudo apt install texlive-latex-extra texlive-fonts-extra texlive-lang-french + $ sudo apt update + $ sudo apt install -t buster-backports -y python3-django python3-django-crispy-forms \ + python3-django-extensions python3-django-filters python3-django-polymorphic \ + python3-djangorestframework python3-django-cas-server python3-psycopg2 python3-pil \ + python3-babel python3-lockfile python3-pip python3-phonenumbers ipython3 \ + uwsgi uwsgi-plugin-python3 \ + texlive-latex-extra texlive-fonts-extra texlive-lang-french \ + gettext libjs-bootstrap4 fonts-font-awesome \ + nginx python3-venv git acl ``` 2. **Clonage du dépot** dans `/var/www/note_kfet`, ```bash - $ mkdir -p /var/www/note_kfet && cd /var/www/note_kfet + $ sudo mkdir -p /var/www/note_kfet && cd /var/www/note_kfet $ sudo chown www-data:www-data . $ sudo chmod g+rwx . $ sudo -u www-data git clone git@gitlab.crans.org:bde/nk20.git . @@ -39,8 +43,7 @@ Sinon vous pouvez suivre les étapes ici. ```bash $ python3 -m venv env $ source env/bin/activate - (env)$ pip3 install -r requirements/base.txt - (env)$ pip3 install -r requirements/prod.txt # uniquement en prod, nécessite une base postgres + (env)$ pip3 install -r requirements.txt (env)$ deactivate # sortir de l'environnement ``` @@ -144,30 +147,44 @@ Sinon vous pouvez suivre les étapes ici. Il est possible de travailler sur une instance Docker. -1. Cloner le dépôt là où vous voulez : +Pour construire l'image Docker `nk20`, - $ git clone git@gitlab.crans.org:bde/nk20.git +``` +git clone https://gitlab.crans.org/bde/nk20/ && cd nk20 +docker build . -t nk20 +``` -2. Copiez le fichier `.env_example` à la racine du projet vers le fichier `.env`, - et mettez à jour vos variables d'environnement +Ensuite pour lancer la note Kfet en tant que vous (option `-u`), +l'exposer sur son port 80 (option `-p`) et monter le code en écriture (option `-v`), -3. Dans le fichier `docker_compose.yml`, qu'on suppose déjà configuré, - ajouter les lignes suivantes, en les adaptant à la configuration voulue : +``` +docker run -it --rm -u $(id -u):$(id -g) -v "$(pwd):/var/www/note_kfet/" -p 80:8080 nk20 +``` - nk20: - build: /chemin/vers/nk20 - volumes: - - /chemin/vers/nk20:/code/ - env_file: /chemin/vers/nk20/.env - restart: always - labels: - - traefik.domain=ndd.example.com - - traefik.frontend.rule=Host:ndd.example.com - - traefik.port=8000 +Si vous souhaitez lancer une commande spéciale, vous pouvez l'ajouter à la fin, par exemple, -4. Enjoy : +``` +docker run -it --rm -u $(id -u):$(id -g) -v "$(pwd):/var/www/note_kfet/" -p 80:8080 nk20 python3 ./manage.py createsuperuser +``` - $ docker-compose up -d nk20 +#### Avec Docker Compose + +On vous conseilles de faire un fichier d'environnement `.env` en prenant exemple sur `.env_example`. + +Pour par exemple utiliser le Docker de la note Kfet avec Traefik pour réaliser le HTTPS, + +```YAML +nk20: + build: /chemin/vers/le/code/nk20 + volumes: + - /chemin/vers/le/code/nk20:/var/www/note_kfet/ + env_file: /chemin/vers/le/code/nk20/.env + restart: always + labels: + - traefik.domain=ndd.example.com + - traefik.frontend.rule=Host:ndd.example.com + - traefik.port=8080 +``` ### Lancer un serveur de développement @@ -183,7 +200,7 @@ un serveur de développement par exemple sur son ordinateur. $ python3 -m venv venv $ source venv/bin/activate - (env)$ pip install -r requirements/base.txt + (env)$ pip install -r requirements.txt 3. Copier le fichier `.env_example` vers `.env` à la racine du projet et mettre à jour ce qu'il faut diff --git a/ansible/roles/1-apt-basic/tasks/main.yml b/ansible/roles/1-apt-basic/tasks/main.yml index eba6e5c3..105fbf36 100644 --- a/ansible/roles/1-apt-basic/tasks/main.yml +++ b/ansible/roles/1-apt-basic/tasks/main.yml @@ -13,6 +13,8 @@ - git - acl - gettext + - libjs-bootstrap4 + - fonts-font-awesome - texlive-latex-extra - texlive-fonts-extra - texlive-lang-french diff --git a/ansible/roles/4-nginx/templates/nginx_note.conf b/ansible/roles/4-nginx/templates/nginx_note.conf index 9be2d980..b195e739 100644 --- a/ansible/roles/4-nginx/templates/nginx_note.conf +++ b/ansible/roles/4-nginx/templates/nginx_note.conf @@ -53,7 +53,7 @@ server { # Finally, send all non-media requests to the Django server. location / { uwsgi_pass note; - include /var/www/note_kfet/uwsgi_params; # the uwsgi_params file you installed + include /etc/nginx/uwsgi_params; } ssl_certificate /etc/letsencrypt/live/nk20-beta.crans.org/fullchain.pem; diff --git a/apps/member/templates/member/base.html b/apps/member/templates/member/base.html index bb99595e..e1e9335b 100644 --- a/apps/member/templates/member/base.html +++ b/apps/member/templates/member/base.html @@ -69,11 +69,11 @@ SPDX-License-Identifier: GPL-3.0-or-later {% endif %} {% if can_lock_note %} {% elif can_unlock_note %} {% endif %} @@ -181,4 +181,4 @@ SPDX-License-Identifier: GPL-3.0-or-later }); } -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/apps/member/templates/member/user_list.html b/apps/member/templates/member/user_list.html index ce0b14a7..a41d7e69 100644 --- a/apps/member/templates/member/user_list.html +++ b/apps/member/templates/member/user_list.html @@ -7,7 +7,7 @@ SPDX-License-Identifier: GPL-3.0-or-later {% block content %} {% if "member.change_profile_registration_valid"|has_perm:user %} - {% trans "Registrations" %} + {% trans "Registrations" %} {% endif %} diff --git a/apps/permission/templates/permission/all_rights.html b/apps/permission/templates/permission/all_rights.html index 107f8f25..69b74714 100644 --- a/apps/permission/templates/permission/all_rights.html +++ b/apps/permission/templates/permission/all_rights.html @@ -13,7 +13,7 @@ SPDX-License-Identifier: GPL-3.0-or-later