🌱 Add README, improve settings
This commit is contained in:
parent
c30a0cdf86
commit
c7f753cf09
|
@ -3,7 +3,7 @@ FROM python:3-alpine
|
||||||
ENV PYTHONUNBUFFERED 1
|
ENV PYTHONUNBUFFERED 1
|
||||||
|
|
||||||
# Install LaTeX requirements
|
# Install LaTeX requirements
|
||||||
RUN apk add --no-cache gettext texlive nginx gcc libc-dev libffi-dev postgresql-dev
|
RUN apk add --no-cache gettext texlive nginx gcc libc-dev libffi-dev postgresql-dev mariadb-connector-c-dev
|
||||||
|
|
||||||
RUN apk add --no-cache bash
|
RUN apk add --no-cache bash
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
# Plateforme d'inscription du TFJM²
|
||||||
|
|
||||||
|
La plateforme du TFJM² est née pour l'édition 2020 du tournoi. D'abord codée en PHP, elle a subi une refonte totale en
|
||||||
|
Python, à l'aide du framework Web [Django](https://www.djangoproject.com/).
|
||||||
|
|
||||||
|
Cette plateforme permet aux participants et encadrants de s'inscrire et de déposer leurs autorisations nécessaires.
|
||||||
|
Ils pourront ensuite déposer leurs solutions et notes de synthèse pour le premier tour en temps voulu. La plateforme
|
||||||
|
offre également un accès pour les organisateurs et les jurys leur permettant de communiquer avec les équipes et de
|
||||||
|
récupérer les documents nécessaires.
|
||||||
|
|
||||||
|
Un wiki plus détaillé arrivera ultérieurement. L'interface organisateur et jury est vouée à être plus poussée.
|
||||||
|
|
||||||
|
L'instance de production est disponible à l'adresse [inscription.tfjm.org](https://inscription.tfjm.org).
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Le plus simple pour installer la plateforme est d'utiliser l'image Docker incluse, qui fait tourner un serveur Nginx
|
||||||
|
exposé sur le port 80 avec le serveur Django. Ci-dessous une configuration Docker-Compose, à adapter selon vos besoins :
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
inscription-tfjm:
|
||||||
|
build: ./inscription-tfjm
|
||||||
|
links:
|
||||||
|
- postgres
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
env_file:
|
||||||
|
- ./inscription-tfjm.env
|
||||||
|
volumes:
|
||||||
|
# - ./inscription-tfjm:/code
|
||||||
|
- ./inscription-tfjm/media:/code/media
|
||||||
|
```
|
||||||
|
|
||||||
|
Le volume `/code` n'est à ajouter uniquement en développement, et jamais en production.
|
||||||
|
|
||||||
|
Il faut remplir les variables d'environnement suivantes :
|
||||||
|
|
||||||
|
```env
|
||||||
|
TFJM_STAGE= # dev ou prod
|
||||||
|
TFJM_YEAR=2021 # Année de la session du TFJM²
|
||||||
|
DJANGO_DB_TYPE= # MySQL, PostgreSQL ou SQLite (par défaut)
|
||||||
|
DJANGO_DB_HOST= # Hôte de la base de données
|
||||||
|
DJANGO_DB_NAME= # Nom de la base de données
|
||||||
|
DJANGO_DB_USER= # Utilisateur de la base de données
|
||||||
|
DJANGO_DB_PASSWORD= # Mot de passe pour accéder à la base de données
|
||||||
|
SMTP_HOST= # Hôte SMTP pour l'envoi de mails
|
||||||
|
SMTP_PORT=465 # Port du serveur SMTP
|
||||||
|
SMTP_HOST_USER= # Utilisateur du compte SMTP
|
||||||
|
SMTP_HOST_PASSWORD= # Mot de passe du compte SMTP
|
||||||
|
FROM_EMAIL=contact@tfjm.org # Nom de l'expéditeur des mails
|
||||||
|
SERVER_EMAIL=contact@tfjm.org # Adresse e-mail expéditrice
|
||||||
|
```
|
||||||
|
|
||||||
|
Si le type de base de données sélectionné est SQLite, la variable `DJANGO_DB_HOST` sera utilisée en guise de chemin vers
|
||||||
|
le fichier de base de données (par défaut, `db.sqlite3`).
|
||||||
|
|
||||||
|
En développement, il est recommandé d'utiliser SQLite pour des raisons de simplicité. Les paramètres de mail ne seront
|
||||||
|
pas utilisés, et les mails qui doivent être envoyés seront envoyés dans la console.
|
||||||
|
|
||||||
|
En production, il est recommandé de ne pas utiliser SQLite pour des raisons de performances.
|
||||||
|
|
||||||
|
La dernière différence entre le développment et la production est qu'en développement, chaque modification d'un fichier
|
||||||
|
est détectée et le serveur se relance automatiquement dès lors.
|
||||||
|
|
||||||
|
Une fois le site lancé, le premier compte créé sera un compte administrateur.
|
|
@ -8,6 +8,7 @@ django-polymorphic
|
||||||
django-tables2
|
django-tables2
|
||||||
djangorestframework
|
djangorestframework
|
||||||
django-rest-polymorphic
|
django-rest-polymorphic
|
||||||
|
mysqlclient
|
||||||
psycopg2-binary
|
psycopg2-binary
|
||||||
ptpython
|
ptpython
|
||||||
gunicorn
|
gunicorn
|
|
@ -179,6 +179,27 @@ CRISPY_TEMPLATE_PACK = 'bootstrap4'
|
||||||
|
|
||||||
DJANGO_TABLES2_TEMPLATE = 'django_tables2/bootstrap4.html'
|
DJANGO_TABLES2_TEMPLATE = 'django_tables2/bootstrap4.html'
|
||||||
|
|
||||||
|
_db_type = os.getenv('DJANGO_DB_TYPE', 'sqlite').lower()
|
||||||
|
|
||||||
|
if _db_type == 'mysql' or _db_type.startswith('postgres') or _db_type == 'psql':
|
||||||
|
DATABASES = {
|
||||||
|
'default': {
|
||||||
|
'ENGINE': 'django.db.backends.mysql' if _db_type == 'mysql' else 'django.db.backends.postgresql_psycopg2',
|
||||||
|
'NAME': os.environ.get('DJANGO_DB_NAME', 'tfjm'),
|
||||||
|
'USER': os.environ.get('DJANGO_DB_USER', 'tfjm'),
|
||||||
|
'PASSWORD': os.environ.get('DJANGO_DB_PASSWORD', 'CHANGE_ME_IN_ENV_SETTINGS'),
|
||||||
|
'HOST': os.environ.get('DJANGO_DB_HOST', 'localhost'),
|
||||||
|
'PORT': os.environ.get('DJANGO_DB_PORT', ''), # Use default port
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
DATABASES = {
|
||||||
|
'default': {
|
||||||
|
'ENGINE': 'django.db.backends.sqlite3',
|
||||||
|
'NAME': os.path.join(BASE_DIR, os.getenv('DJANGO_DB_HOST', 'db.sqlite3')),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if os.getenv("TFJM_STAGE", "dev") == "prod":
|
if os.getenv("TFJM_STAGE", "dev") == "prod":
|
||||||
from .settings_prod import *
|
from .settings_prod import *
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -1,15 +1,4 @@
|
||||||
# Database
|
# Database
|
||||||
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases
|
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases
|
||||||
|
|
||||||
import os
|
|
||||||
|
|
||||||
from tfjm.settings import BASE_DIR
|
|
||||||
|
|
||||||
DATABASES = {
|
|
||||||
'default': {
|
|
||||||
'ENGINE': 'django.db.backends.sqlite3',
|
|
||||||
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
|
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
|
||||||
|
|
|
@ -1,16 +1,5 @@
|
||||||
import os
|
import os
|
||||||
|
|
||||||
DATABASES = {
|
|
||||||
'default': {
|
|
||||||
'ENGINE': 'django.db.backends.postgresql_psycopg2',
|
|
||||||
'NAME': os.environ.get('DJANGO_DB_NAME', 'tfjm'),
|
|
||||||
'USER': os.environ.get('DJANGO_DB_USER', 'tfjm'),
|
|
||||||
'PASSWORD': os.environ.get('DJANGO_DB_PASSWORD', 'CHANGE_ME_IN_ENV_SETTINGS'),
|
|
||||||
'HOST': os.environ.get('DJANGO_DB_HOST', 'localhost'),
|
|
||||||
'PORT': os.environ.get('DJANGO_DB_PORT', ''), # Use default port
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Break it, fix it!
|
# Break it, fix it!
|
||||||
DEBUG = False
|
DEBUG = False
|
||||||
|
|
||||||
|
@ -22,13 +11,13 @@ SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', 'CHANGE_ME_IN_ENV_SETTINGS')
|
||||||
# Emails
|
# Emails
|
||||||
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
||||||
EMAIL_USE_SSL = True
|
EMAIL_USE_SSL = True
|
||||||
EMAIL_HOST = os.getenv("EMAIL_HOST")
|
EMAIL_HOST = os.getenv("SMTP_HOST")
|
||||||
EMAIL_PORT = os.getenv("EMAIL_PORT")
|
EMAIL_PORT = os.getenv("SMTP_PORT")
|
||||||
EMAIL_HOST_USER = os.getenv("EMAIL_HOST_USER")
|
EMAIL_HOST_USER = os.getenv("SMTP_HOST_USER")
|
||||||
EMAIL_HOST_PASSWORD = os.getenv("EMAIL_HOST_PASSWORD")
|
EMAIL_HOST_PASSWORD = os.getenv("SMTP_HOST_PASSWORD")
|
||||||
|
|
||||||
DEFAULT_FROM_EMAIL = 'Contact TFJM² <contact@tfjm.org>'
|
DEFAULT_FROM_EMAIL = os.getenv('FROM_EMAIL', 'Contact TFJM² <contact@tfjm.org>')
|
||||||
SERVER_EMAIL = 'contact@tfjm.org'
|
SERVER_EMAIL = os.getenv('SERVER_EMAIL', 'contact@tfjm.org')
|
||||||
|
|
||||||
# Security settings
|
# Security settings
|
||||||
SECURE_CONTENT_TYPE_NOSNIFF = False
|
SECURE_CONTENT_TYPE_NOSNIFF = False
|
||||||
|
|
Loading…
Reference in New Issue