Note: L'utilisation de cette page est dépréciée, consulter "la nouvelle documentation de référence": https://doc-publik.entrouvert.com/guide-de-l-administrateur-systeme/installation/pre-requis/
Mode d'emploi pour l'installation d'une machine Publik. Il s'agit d'installer la solution sur une seule machine (physique ou virtuelle).
Cependant, sur le canevas de cette documentation, chaque composant peut également être installé sur une machine dédiée : il faut alors ajuster les règles de pare-feu et les connexions AMQP (exercice laissé au lecteur à ce stade).
Dans la zone DNS choisie, ajouter les noms des différentes briques:
publik A a.b.c.d ; addresse IP de «publik» portail CNAME publik ; portail usage (brique: combo) backoffice CNAME publik ; portail agent (brique: combo) connexion CNAME publik ; fournisseur d'identités (brique: authentic) demarches CNAME publik ; téléservices (brique: wcs) passerelle CNAME publik ; hub de webservices (brique: passerelle) hobo CNAME publik ; système de déploiement (brique: hobo)
Dans la suite du document, l'installation est faite dans la zone example.net
Publik ne fonctionne qu'en mode HTTPS.
Un ou plusieurs certificats x509 valides et reconnus doivent être disponibles qui couvrent tous les noms des briques qui seront installées.
Dans la suite de la documentation, un certificat est disponible :/etc/ssl/certs/cert-example.pem
/etc/ssl/private/cert-example.key
Idéalement la machine doit disposer d'un SMTP local capable d'émettre des courriels. L'installation et configuration de exim4-daemon-light
est en général suffisante.
Le système d'exploitation Debian 8.x (Jessie) est installé en mode minimal, i.e. uniquement le choix "utilitaires usuels du système" lors de la sélection des logiciels durant l'installation.
Dans les sources APT, ajouter les backports et le depôt Entr'ouvert :
# /etc/apt/sources.list # Debian 8 deb http://httpredir.debian.org/debian/ jessie main deb http://security.debian.org/ jessie/updates main deb http://ftp.fr.debian.org/debian jessie-updates main # Debian 8 backports deb http://ftp.fr.debian.org/debian jessie-backports main # Entr'ouvert # key: wget -q -O- https://deb.entrouvert.org/entrouvert.gpg | apt-key add - deb http://deb.entrouvert.org/ jessie main
Publik utilise les composants suivants :
Installer la version 1.8 de jessie-backports, en s'assurant au préalable que le depot est bien présent dans sources.list
# apt install -t jessie-backports python-django
# apt install nginx-full
Autoriser l'upload des "gros" fichiers: dans /etc/nginx/conf.d
créer un fichier client-max-body-size.conf
avec le contenu:
client_max_body_size 10M;
Taille à ajuster en fonction de l'usage prévu.
Les vhosts pour chaque composant Publik seront configurés en utilisant le modèle :
server { listen 443 ssl; server_name <hostname>; # indiquer ici le ou les noms des instances prévues ssl_certificate /etc/ssl/certs/cert-example.pem; # un certificat couvrant tous les noms des instances prévues ssl_certificate_key /etc/ssl/private/cert-example.key; access_log /var/log/nginx/<hostname>-access.log combined; error_log /var/log/nginx/<hostname>-error.log; location ~ ^/static/(.+)$ { root /; try_files /var/lib/<application>/tenants/$host/static/$1 /var/lib/<application>/tenants/$host/theme/static/$1 /var/lib/<application>/collectstatic/$1 =404; add_header Access-Control-Allow-Origin *; } location ~ ^/media/(.+)$ { alias /var/lib/<application>/tenants/$host/media/$1; } location / { proxy_pass http://unix:/run/<application>/<application>.sock; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-SSL on; proxy_set_header X-Forwarded-Protocol ssl; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } # catchall http → https server { listen 80; server_name <hostname>; # indiquer ici le ou les noms des instances prévues access_log /var/log/nginx/<hostname>-access.log combined; error_log /var/log/nginx/<hostname>-error.log; return 301 https://$host$request_uri; }
<hostname>
est le nom de domaine et <application>
le nom de l'application deployée.
# apt install postgresql
En tant qu'utilisateur postgres
créer les comptes et les bases pour chaque composant :
postgres@publik8$ createuser -SDR hobo ; createdb -O hobo hobo postgres@publik8$ createuser -SDR combo ; createdb -O combo combo postgres@publik8$ createuser -SDR passerelle ; createdb -O passerelle passerelle postgres@publik8$ createuser -SDR fargo ; createdb -O fargo fargo postgres@publik8$ createuser -SDR chrono ; createdb -O chrono chrono postgres@publik8$ createuser -SDR bijoe ; createdb -O bijoe bijoe postgres@publik8$ createuser -SdR wcs ; createdb -O wcs wcs_demarches_example_net postgres@publik8$ createuser -SDR authentic-multitenant ; createdb -O authentic-multitenant authentic2_multitenant
# apt install rabbitmq-server
Configuration de RabbitMQ
Prendre modèle sur l'exemple fourni avec hobo
:
# zcat /usr/share/doc/rabbitmq-server/rabbitmq.config.example.gz > /etc/rabbitmq/rabbitmq.config
Modifications des indications SSL dans /etc/rabbitmq/rabbitmq.config :
… {ssl_options, [{certfile, "/etc/ssl/certs/cert-example.pem"}, {keyfile, "/etc/ssl/private/cert-example.key"}, {versions, ['tlsv1.2', 'tlsv1.1']}]} … {listener, [{port, 15672}, {ssl, true}, {ssl_opts, [{certfile, "/etc/ssl/certs/cert-example.pem"}, {keyfile, "/etc/ssl/private/cert-example.key"}, {versions, ['tlsv1.2', 'tlsv1.1']}]}]} …
Puis relancer le service :
root@publik8# service rabbitmq-server restart
Puis ajouter un utilisateur hobo dans rabbitmq (choisir un mot de passe complexe) :
root@publik8# rabbitmqctl add_user hobo <mot-de-passe-complexe> root@publik8# rabbitmqctl set_permissions hobo ".*" ".*" ".*"
hobo
¶Installation du serveur :
# apt install hobo
Lancement de hobo (provoque l'initialisation de la base) :
root@publik8# service hobo restart
hobo-agent
¶Les instances cibles seront déployés sur la machine elle-même, on installe donc l'agent localement :
# apt install hobo-agent
Configurer l'agent afin qu'il puisse se connecter au serveur rabbitmq. Dans /etc/hobo-agent/settings.py
, modifier la variable BROKER_URL
:
BROKER_URL = 'amqp://hobo:<mot-de-passe-complexe>@<hobo hostname>:5671//?ssl=1'
Pus lancer le service hobo-agent via supervisor (à la première installation, ce dernier est démarré avant l'installation de hobo-agent) :
# supervisorctl update # supervisorctl restart hobo-agent
Installation :
# apt install authentic2-multitenant
Ajouter une configuration nginx
, en se basant sur le modèle et remplaçant <application>
par authentic2-multitenant
:
Authentic va utiliser RabbitMQ pour diffuser les informations sur les utilisateurs et les rôles. Pour cela, ajouter à la fin du fichier /etc/authentic2-multitenant/config.py
:
# extrait de /etc/authentic2-multitenant/config.py # (une ligne ajoutée fin du fichier) # Role provisionning via local RabbitMQ HOBO_ROLE_EXPORT = True
Puis relancer le service pour prendre en compte la nouvelle configuration :
# service authentic2-multitenant restart
Afin de pouvoir utiliser l'authentification via FranceConnect il faut installer le paquet supplémentaire python-authentic2-auth-fc
:
# apt install python-authentic2-auth-fc
Installation :
# apt install combo
Création d'une configuration nginx en se basant sur le modèle et remplaçant <application>
par combo
.
Combo est utilisé pour les portails usager et agent, le <hostname>
couvrira les deux sites, par exemple :
# extrait de /etc/nginx/sites-available/combo server { … server_name portail-agent.example.net portail-usager.example.net; … }
Installation du paquet wcs-au-quotidien
:
# apt install wcs-au-quotidien
Un ensemble de paramètres, spécifiés dans des fichiers de configuration peut-être défini lors de la création d'une instance w.c.s.
Un archive zip contenant ses fichiers de configuration doit être placée dans le répértoire /var/lib/wcs/skeletons
. Par exemple /var/lib/wcs/skeletons/publik.zip
(fichier joint à cette page).
Configuration nginx :
# /etc/nginx/sites-available/wcs server { listen 443 ssl; server_name <hostname>; ssl_certificate /etc/ssl/certs/cert-example.pem; ssl_certificate_key /etc/ssl/private/cert-example.key; access_log /var/log/nginx/wcs-access.log combined; error_log /var/log/nginx/wcs-error.log; location ~ ^/static/(.+)$ { root /; try_files /var/lib/wcs/$host/static/$1 /var/lib/wcs/$host/theme/static/$1 /var/lib/wcs/collectstatic/$1 /var/lib/wcs-au-quotidien/collectstatic/$1 =404; } location /qo { alias /usr/share/wcs/qommon/; } location /apache-errors { alias /usr/share/auquotidien/apache-errors/; } location /themes { root /; try_files /var/lib/wcs/$host$uri /var/lib/wcs-au-quotidien/$host$uri /usr/share/wcs/$uri =404; } location /robots.txt { alias /usr/local/share/auquo-robots.txt; } location /rpc_relay.html { alias /usr/share/auquotidien/rpc_relay.html; } location / { proxy_pass http://unix:/run/wcs/wcs.sock; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-SSL on; proxy_set_header X-Forwarded-Protocol ssl; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } # catchall http → https server { listen 80; server_name <hostname>; access_log /var/log/nginx/wcs-access.log combined; error_log /var/log/nginx/wcs-error.log; return 301 https://$host$request_uri; }
Installation :
# apt install passerelle
Création d'une configuration nginx à partir du modèle en remplaçant <application>
par passerelle
.
Installation :
# apt install fargo
Création d'une configuration nginx à partir du modèle en remplaçant <application>
par fargo
.
Un ensemble de thèmes est fourni par le paquet publik-base-theme
, donc le thème de base «publik» utile pour déployer des instances initialement (sans thème spécifique).
Installation :
# apt install publik-base-theme
Créer un fichier «recipe.json» (dans /tmp
par exemple) sur ce modèle :
{ "variables": { "hobo": "hobo.example.net", "authentic": "connexion.example.net", "combo": "portail.example.net", "combo_agent": "backoffice.example.net", "passerelle": "passerelle.example.net", "wcs": "demarches.example.net", "fargo": "portdoc.example.net" }, "steps": [ {"create-hobo": { "url": "https://${hobo}/" }}, {"create-superuser": { "email": "superuser@example.net", "password": "example" }}, {"create-authentic": { "url": "https://${authentic}/", "title": "Connexion" }}, {"set-idp": { }}, {"create-combo": { "url": "https://${combo}/", "title": "Compte citoyen", "template_name": "portal-user" }}, {"create-combo": { "url": "https://${combo_agent}/", "slug": "portal-agent", "title": "Portail agent", "template_name": "portal-agent" }}, {"create-wcs": { "url": "https://${wcs}/", "title": "Démarches", "template_name": "publik.zip" }}, {"create-passerelle": { "url": "https://${passerelle}/", "title": "Passerelle" }}, {"create-fargo": { "url": "https://${fargo}/", "title": "Porte doc" }}, {"set-theme": { "theme": "publik" }} ] }
L'utiliser sur la commande cook
de hobo-manage
(à lancer en tant qu'utilisateur hobo
!) :
# sudo -u hobo hobo-manage cook /tmp/recipe.json
Attention : la commande cook
arrête d'envoyer des instructions de déploiement au bout d'un timeout de 30 secondes. Sur des systèmes peu véloces, il faudra éventuellement relancer la commande plusieurs fois, jusqu'à ce que son exécution se déroule sans aucune erreur.
!! Cette étape n'est pas nécessaire si le deploiement de l'instance w.c.s a été fait en utilisant un template de configuration (variable template_name
dans le fichier recipe) activant le stockage des données en SQL.
Le système de déploiement n'utilise pas automatiquement le stockage SQL de w.c.s. Il faut donc, une fois l'instance créée, la convertir manuellement. Pour cela :
/var/lib/wcs/demarches.example.net/site-options.cfg
:# extrait de /var/lib/wcs/demarches.example.net/site-options.cfg [options] postgresql = true # … autres options laissées inchangées
wcs-au-quotidien
) :# sudo -u wcs wcsctl -f /etc/wcs/wcs-au-quotidien.cfg convert-to-sql --dbname=wcs_demarches_example_net demarches.example.net
Se rendre sur https://connexion.example.net/manage/roles/ et créer un premier rôle nommé par exemple «Support et Débogage»
Se rendre sur https://connexion.example.net/manage/users/ et créer un utilisateur :Après quelques secondes, vérifier que l'utilisateur est bien provisionné sur w.c.s. https://demarches.example.net/backoffice/users/ et qu'il a bien les rôles «Administrateur du site» et «Support et Débogage»
L'installation est prête. Il reste à effectuer le paramétrage de base du système puis à commencer la configuration de Publik.