Installer Django et le site web Khaganat
Le projet Khaganat souhaite utiliser le Framework Django pour ses pages web.
Au 16 juin 2018, nous avons déjà un site en test, http://cipra.khaganat.net, sur lequel nous créons la structure du site.
À terme, ce site remplacera l'actuel.
Et sinon, là c'est du brouillon, pour m'en sortir quand je vais tenter d'installer le bouzin.
Pour plus de détails sur le projet, voir la page Khaganat web.
Cet article détaille comment installer et paramétrer le site web (la version “django”).
Installation
Django se base sur python. Votre serveur doit donc avoir les paquets python 3 et pipenv (ce qui va simplifier la suite). En cas de souci, voir Python (et Debian). Les informations les plus à jour seront dans le README du projet.
Sur debian, installez aussi gettext :
sudo apt install gettext
Configurer pipenv pour utiliser python 3 par défaut :
pipenv --three
Commencez par cloner le projet :
git clone https://git.khaganat.net/Tycho/khaganat-web.git khaganat-web cd khaganat-web
Puis modifier les variables d'environnement en créant le fichier .env
dans le dossier khaganat-web
:
nano .env
Adaptez le fichier avec les paramètres suivants. Les deux variables KHAGANAT_SECRET_KEY, KHAGANAT_HOSTNAMES et KHAGANAT_STATIC_ROOT doivent impérativement être remplies :
# KHAGANAT_SECRET_KEY (required)='' Django's secret key, keep it secret (tip='' generate one using openssl rand -base64 42). KHAGANAT_SECRET_KEY='' # KHAGANAT_DEBUG='' Debug mode, default is false. KHAGANAT_DEBUG='true' # KHAGANAT_HOSTNAMES='' Allowed hostnames, coma separated. KHAGANAT_HOSTNAMES='' # KHAGANAT_LANGUAGE_CODE='' Language code, default is fr. # KHAGANAT_TIME_ZONE='' Time zone, default is Europe/Paris. # KHAGANAT_STATIC_URL='' URL for static files, default is /static/. # KHAGANAT_STATIC_ROOT='' Absolute path to the directory where static files should be collected. # KHAGANAT_STATIC_DIRS='' CSV list of additional locations where static files may be found, default is empty. # KHAGANAT_LOGS_MIN_DAYS='' Numbers of days before logs are hidden, default is 7. # KHAGANAT_LOGS_MAX_DAYS='' Number of days before logs are published, default is 0. # KHAGANAT_LOGIN_REDIRECT_URL='' URL to redirect after user login. Will be reversed, default is index. # KHAGANAT_REGISTER_REQUIRE_VALIDATION='' require email validation upon registration, default is true. # KHAGANAT_EMAIL_HOST='' The host to use for sending email, default is localhost. # KHAGANAT_EMAIL_PORT='' Port to use for the SMTP server, default is 25. # KHAGANAT_EMAIL_HOST_USER='' Username to use for the SMTP server, default is empty (no authentication). # KHAGANAT_EMAIL_HOST_PASSWORD='' Password to use for the SMTP server, default is empty. # KHAGANAT_EMAIL_USE_STARTTLS='' Whether to use STARTTLS to connect to the SMTP server, default is False. # KHAGANAT_EMAIL_USE_TLS='' Whether to use a TLS connection to the SMTP server, default is False. # KHAGANAT_EMAIL_SUBJECT_PREFIX='' Subject-line prefix for email, default is empty. # KHAGANAT_DEFAULT_FROM_EMAIL='' Default email address to use, default is no-reply@localhost. # KHAGANAT_FORCE_HTTPS='' If True, enable the use of KHAGANAT_HTTPS_HEADER_NAME and KHAGANAT_HTTPS_HEADER_VALUE to set the SECURE_PROXY_SSL_HEADER configuration option. Default is False. # KHAGANAT_HTTPS_HEADER_NAME='' Header name for SECURE_PROXY_SSL_HEADER, default is HTTP_X_FORWARDED_PROTO. # KHAGANAT_HTTPS_HEADER_VALUE='' Header value for SECURE_PROXY_SSL_HEADER, default is https. # KHAGANAT_NSFW_TAGS='' Coma-separated list of words that triggers the content warning in logs, default is \#nsfw. # KHAGANAT_NSFW_NAME='' Name of the cookie holding the NSFW allowance, default is nsfw_allowed.
Ensuite, mettez l'environnement pipenv à jour dans ce dossier :
pipenv --three update
Puis lancer la construction du site. Si vous copiez la base de donnée d'une autre installation (par exemple de la version test vers la prod), oubliez les lignes migrate
et createsuperuser
:
pipenv run ./manage.py migrate pipenv run ./manage.py compilemessages pipenv run ./manage.py createsuperuser
Collecter les static ou non
Le script collectstatic concerne les véritables déploiements, ce n'est pas nécessaire si vous utilisez runserver (la façon de gérer les choses en développement). collectstatic
va gérer les fichiers “statiques” : css, images des thèmes. Il va les rassembler dans un répertoire dédié, où un serveur web pourra ensuite les trouver. Si vous souhaitez le mettre en place (et on insiste, c'est inutile en prod), modifiez la valeur KHAGANAT_STATIC_ROOT=
dans le fichier .env afin de pointer vers un dossier vide lors du premier déploiement, et accessible au serveur web (/var/www/html
par défaut sur Debian+Apache, par exemple).
Lancez ensuite la commande suivante :
pipenv run ./manage.py collectstatic --clear --noinput
Le serveur web
Avant d'aller plus loin il faut paramétrer apache ou nginx.
Ce qui suit est à travailler/adapter afin que ça corresponde à votre installation (et à la notre…)
Dans le cas d'un déploiement en mode développement (pas de la production !) on va utiliser un utilitaire fourni avec Django, appelé “runserver”. Ce dernier va lancer Django en utilisant un port. Si vous utilisez un serveur simple, il suffira de paramétrer Apache ou Nginx de façon basique, puis de se rendre à l'adresse “monsite.com:8000” (par défaut) après avoir lancé la commande suivante :
pipenv run ./manage.py runserver 0:8000
* 0 permet qu'on y accède même si ce n'est pas sur le réseau local (par défaut, c'est localhost)
* 8000 est le port utilisé, qu'on peut changer
* Pensez à lancer le runserver dans un shell à part, c'est un serveur donc il ne s'arrêtera pas de tourner tant que qu'on ne l'aura pas quitté (CTRL+C) ou fait planter.
L'intérêt de runserver, c'est que vous pouvez faire des modifications dans les fichiers Django, recharger la page et “ça marche” ! En production, avec une vraie configuration, il faudra lancer des commandes pour que ce soit pris en compte. Mais de toute façon, personne ne modifie un serveur en production directement.
Si comme nous, vous êtes derrière un proxy, il faudra modifier sur la config du proxy afin que cela point vers le port de votre VM.
Sur la VM du proxy, config apache (/etc/apache2/site-enabled/monsite.conf
) :
[...] ProxyPass / http://192.168.20.13:8000/ ProxyPassReverse / http://192.168.20.13:8000/ ProxyRequests off ProxyPreserveHost on <Proxy *> Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Proxy> [...]
Et sur la VM où Django est installé :
[...] ProxyRequests off ProxyPreserveHost on ProxyPass / http://192.168.20.13:8000/ <Location /> ProxyPassReverse http://192.168.20.13:8000/ Require all granted </Location> [...]
Ensuite la commande suivante fonctionnera :
pipenv run ./manage.py runserver 0:8000
Je déconseille de pointer ailleurs qu'à la racine, à moins de savoir changer les comportements de Django.
Le readme se base sur nginx. Il faudrait adapter à Debian, à notre installation avec proxy/apache, etc.
Paquets à installer sous Debian.
sudo apt install nginx-extras uwsgi uwsgi-plugin-python3
Premier lancement
Au premier lancement, il n'y a pas de page créé sur la racine du site, ce qui fait peur (pleins d'erreurs !).
Il suffit de se rendre à l'adresse monsite.net/admin/ (ou monsite.net:8000/admin/ si vous n'avez pas de reverse proxy), de vous connecter avec les identifiants renseignés à la partie “création d'un super admin”, de sélectionner le module des pages et d'ajouter une page d'accueil. Et voilà !
Récupérer le détail de Khaganat
Pour le moment, ce n'est pas sur un dépôt public.
Suffit de copier la base de donnée :
scp cipra.khaganat.net:/var/www/khaganat-web/db.sqlite3 db.sqlite3
Yakalfr lié : faire le css
C'est ici sur le taf, le détail de ce qu'il faut faire pour que Cipra aie un css qui donne une identité à Khaganat.
Astuces et trucs utiles
Exporter la navbar
Pour exporter la navbar, afin de l'intégrer dans un thème Dokuwiki par exemple :
cd /var/www/khaganat-web pipenv run ./manage.py navbar_export --lang fr --docuwiki
Le résultat sera dans build/navbar/
.
pour lister toutes les option d'export : pipenv run ./manage.py navbar_export -h