Attention ! Gitlab fournissant maintenant nativement des certificats Let’s Encrypt aux domaines personnalisés des Gitlab Pages, nous avons coupé notre service qui le faisait automatiquement pour vous.

Il est impératif, pour que votre domaine personnalisé continue à avoir un certificat Let’s Encrypt à jour, d’activer la fonctionnalité native dans les paramètres de votre projet. Cette activation remplacera votre certificat actuel par un nouveau certificat Let’s Encrypt géré par Gitlab.

Voir les détails sur https://docs.framasoft.org/fr/gitlab/gitlab-pages-le.html

Commit 5782349e authored by Marien Fressinaud's avatar Marien Fressinaud

doc: Add documentation about deploying in prod

parent b2dc2618
......@@ -46,6 +46,8 @@ Téléchargez maintenant le projet Git avec la commande :
```console
$ git clone git@framagit.org:marien.fressinaud/reflets.git
$ # OU
$ git clone https://framagit.org/marien.fressinaud/reflets.git
$ cd reflets
```
......@@ -96,7 +98,7 @@ données avec :
```console
reflets$ FLASK_APP=src FLASK_ENV=development flask db-init
reflets$ FLASK_APP=src FLASK_ENV=development flask create-user admin --password secret
reflets$ FLASK_APP=src FLASK_ENV=development flask user-create admin --password secret
reflets$ # ou avec la commande make
reflets$ make db-setup
```
......@@ -123,6 +125,164 @@ code.
Vous pouvez désormais vous connecter en allant sur [127.0.0.1:5000](http://127.0.0.1:5000/)
et en saisissant les identifiants donnés plus haut.
## Déployer en production (Nginx + uWSGI)
Nous supposons dans cette partie que vous disposez :
- d'un serveur sous Linux accessible à distance
- d'un nom de domaine pointant sur ce serveur (ex. mon-domaine.net)
Dans notre cas, nous voulons que Reflets soit accessible à l'adresse
`http://mon-domaine.net/reflets`.
Commencez par installer Nginx et uWSGI depuis votre gestionnaire de paquets.
Nous supposons également que vous avez installé les dépendances comme précisé
plus haut. Vous devrez également avoir initialisé la base de données, mais
faites attention à préciser le bon environnement (i.e. `production`) et à
utiliser un nom d'utilisateur et un mot de passe plus sécurisés. vous devrez
donc taper les commandes à la main sans passer par le raccourci `make` :
```console
reflets$ FLASK_APP=src FLASK_ENV=production flask db-init
reflets$ FLASK_APP=src FLASK_ENV=production flask user-create NOM_UTILISATEUR
reflets$ # Un mot de passe devrait vous être demandé
```
Si vous souhaitez vous connecter par LDAP, vous n'avez pas besoin de créer
d'utilisateur. Vous pouvez préciser la variable d'environnement
`REFLETS_DATABASE` indiquant un chemin particulier pour votre base de données.
Créez ensuite un fichier de configuration Nginx (ex. `/etc/nginx/sites-enabled/reflets.conf`) :
```nginx
server {
listen 80;
listen [::]:80;
server_name mon-domaine.net;
location /reflets {
try_files $uri @reflets;
}
location @reflets {
include uwsgi_params;
uwsgi_pass unix:/tmp/reflets.sock;
}
}
```
Cette configuration dit à Nginx de transférer toutes les requêtes arrivant à
`http://mon-domaine.net/reflets` sur une socket Unix, `/tmp/reflets.sock`. Il
faut donc maintenant configurer uWSGI qui va mettre cette socket en place.
Créez un fichier de configuration (ex. `/etc/uwsgi/apps-enabled/reflets.ini`) :
```ini
[uwsgi]
env = FLASK_ENV=production
env = REFLETS_DATABASE=/path/to/reflets/instance/db.sqlite
env = REFLETS_SECRET_KEY=a-random-string
uid = www-data
gid = www-data
chdir = /path/to/reflets/
home = /path/to/reflets/env/
mount = /reflets=src:create_app()
manage-script-name = true
master = true
processes = 2
socket = /tmp/reflets.sock
```
Vous devez adapter ce fichier, en particulier les variables d'environnement :
- `REFLETS_DATABASE` indique le chemin vers la base de données SQLite ; elle
peut se situer n'importe où sur le serveur tant que l'utilisateur `www-data`
peut écrire dedans
- `REFLETS_SECRET_KEY` est une chaîne aléatoire, générée par exemple avec
OpenSSL (`openssl rand -base64 42`)
Vous devrez également adapter les chemins de `chdir` et de `home` (c'est cette
dernière qui va permettre de trouver les dépendances installées dans
l'environnement Python).
Vous noterez le chemin vers la socket qui doit évidemment être le même que
celui définit dans la configuration Nginx.
Bien sûr, sentez-vous libre d'adapter cette configuration à votre situation et
de compléter les fichiers de configuration avec les options pertinentes (nous
ne souhaitons pas être exhaustifs pour des raisons de clareté).
Une fois ces fichiers écrits, il faut redémarrer les services. Si vous utilisez
systemd, vous devrez lancer en `root` :
```console
# # Vérifiez d'abord que vous n'avez pas fait d'erreur dans la configuration Nginx
# nginx -t
# systemctl reload nginx
# systemctl restart uwsgi
```
Si tout est bien configuré, vous devriez maintenant pouvoir vous connecter à
l'adresse `http://mon-domaine.net/reflets`. Il ne vous reste plus qu'à
récupérer un certificat HTTPS avec [Let's Encrypt](https://letsencrypt.org/)
par exemple.
Vous aurez peut-être des problèmes d'accès aux fichiers, vérifiez bien que
l'utilisateur `www-data` a accès au répertoire contenant le code de Reflets :
```console
# chown -R www-data:www-data /path/to/reflets
# # Et si vous avez déplacé votre base de données
# chown www-data:www-data /path/to/db.sqlite
```
## Configurer un serveur LDAP (facultatif)
Pour faire fonctionner LDAP, vous devrez définir 4 variables d'environnement
supplémentaires lors du déploiement de Reflets (dans le fichier de
configuration de uWSGI par exemple) :
- `REFLETS_LDAP_AUTH_SERVER` qui définit l'url vers le serveur LDAP (commençant
par `ldap://` ou, de préférence, `ldaps://`)
- `REFLETS_LDAP_DN` correspond au DN (_Distinguished Name_) dans lequel
chercher les utilisateurs (ex. `ou=users,dc=mon-domaine,dc=net`)
- `REFLETS_LDAP_USERNAME` est le nom d'utilisateur avec lequel se connecter au
LDAP (ex. `uid=ldap,ou=users,dc=mon-domaine,dc=net`)
- `REFLETS_LDAP_PASSWORD` correspond évidemment au mot de passe de
l'utilisateur
Une fois ces variables définies, Reflets va automatiquement détecter que vous
souhaitez vous connecter avec LDAP. Vous pouvez vérifier qu'il est configuré en
vous rendant sur la page de connexion qui doit désormais afficher `Connexion
(LDAP)`, puis essayez de vous connecter.
## Mettre Reflets à jour
Pour mettre à jour Reflets, il y a peu de choses à faire. Cela consiste
seulement (pour le moment) à récupérer la dernière version du code avec Git :
```console
reflets$ git checkout master
reflets$ # Vérifiez que vous n'avez pas fait de modifications
reflets$ git status
reflets$ # Si tout est bon
reflets$ git pull
```
N'oubliez pas de redémarrer le service `uwsgi` pour qu'il prenne en compte le
nouveau code :
```console
# systemctl restart uwsgi
```
Si des vérifications supplémentaires exceptionnelles sont à faire, elles seront
listées dans un fichier `CHANGELOG` (qui n'existe pas encore).
## Ajouter des dépendances
Avant d'ajouter une dépendance au projet, merci de réfléchir à son utilité. Si
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment