{{>toc}} 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/ h1. Installation d'une machine Publik sur base Debian 8 (Jessie) 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). h1. Prérequis h2. DNS 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@ h2. Certificat x509 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 : * clé publique certifiée : @/etc/ssl/certs/cert-example.pem@ * clé privée : @/etc/ssl/private/cert-example.key@ h2. Messagerie SMTP 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. h1. Installation et paramétrage du système d'exploitation Debian 8 (Jessie) 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. h2. Ajout des depots 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 mainh1. Installation des composants de base Publik utilise les composants suivants : h3. Framework Web Django 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-djangoh3. Serveur web nginx
# apt install nginx-fullAutoriser 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_nameou @; # 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/ -access.log combined; error_log /var/log/nginx/ -error.log; location ~ ^/static/(.+)$ { root /; try_files /var/lib/ /tenants/$host/static/$1 /var/lib/ /tenants/$host/theme/static/$1 /var/lib/ /collectstatic/$1 =404; add_header Access-Control-Allow-Origin *; } location ~ ^/media/(.+)$ { alias /var/lib/ /tenants/$host/media/$1; } location / { proxy_pass http://unix:/run/ / .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 ; # indiquer ici le ou les noms des instances prévues access_log /var/log/nginx/ -access.log combined; error_log /var/log/nginx/ -error.log; return 301 https://$host$request_uri; }
# apt install postgresqlEn 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_multitenanth3. Messagerie RabbitMQ
# apt install rabbitmq-serverConfiguration de RabbitMQ Prendre modèle sur l'exemple fourni avec @hobo@ :
# zcat /usr/share/doc/rabbitmq-server/rabbitmq.config.example.gz > /etc/rabbitmq/rabbitmq.configModifications 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 restartPuis ajouter un utilisateur hobo dans rabbitmq (choisir un mot de passe complexe) :
root@publik8# rabbitmqctl add_user hoboh1. Les composants Publik h2. Système de déploiement @hobo@ Installation du serveur :root@publik8# rabbitmqctl set_permissions hobo ".*" ".*" ".*"
# apt install hoboLancement de hobo (provoque l'initialisation de la base) :
root@publik8# service hobo restarth2. Agent de déploiement @hobo-agent@ Les instances cibles seront déployés sur la machine elle-même, on installe donc l'agent localement :
# apt install hobo-agentConfigurer 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:Pus lancer le service hobo-agent via supervisor (à la première installation, ce dernier est démarré avant l'installation de hobo-agent) :@ :5671//?ssl=1'
# supervisorctl update # supervisorctl restart hobo-agenth2. Fournisseur d'identités Authentic Installation :
# apt install authentic2-multitenantAjouter une configuration @nginx@, en se basant sur le [[InstallationJessie##Serveur-web-nginx|modèle]] et remplaçant @
# extrait de /etc/authentic2-multitenant/config.py # (une ligne ajoutée fin du fichier) # Role provisionning via local RabbitMQ HOBO_ROLE_EXPORT = TruePuis relancer le service pour prendre en compte la nouvelle configuration :
# service authentic2-multitenant restarth3. Authentification via FranceConnect Afin de pouvoir utiliser l'authentification via FranceConnect il faut installer le paquet supplémentaire @python-authentic2-auth-fc@:
# apt install python-authentic2-auth-fch2. Portails citoyen et agent Combo Installation :
# apt install comboCréation d'une configuration nginx en se basant sur le [[InstallationJessie##Serveur-web-nginx|modèle]] et remplaçant @
# extrait de /etc/nginx/sites-available/combo server { … server_name portail-agent.example.net portail-usager.example.net; … }h2. Démarches w.c.s. Installation du paquet @wcs-au-quotidien@ :
# apt install wcs-au-quotidienUn 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_nameh2. Hub de webservices Passerelle Installation :; 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 ; access_log /var/log/nginx/wcs-access.log combined; error_log /var/log/nginx/wcs-error.log; return 301 https://$host$request_uri; }
# apt install passerelleCréation d'une configuration nginx à partir du [[InstallationJessie##Serveur-web-nginx|modèle]] en remplaçant @
# apt install fargoCréation d'une configuration nginx à partir du [[InstallationJessie##Serveur-web-nginx|modèle]] en remplaçant @
# apt install publik-base-themeh1. Création des instances : hobo «cooking» 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.jsonAttention : 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. h1. Finalisations h2. Passage de w.c.s. en SQL *!! 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 : # Ajouter « postgresql = true » dans la section « options » du fichiers @/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# Lancer la conversion proprement dite (en tant qu'utilisateur @wcs-au-quotidien@) :
# sudo -u wcs wcsctl -f /etc/wcs/wcs-au-quotidien.cfg convert-to-sql --dbname=wcs_demarches_example_net demarches.example.neth2. Amorce de la configuration de w.c.s. par création d'un premier utilisateur 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 : * dans la collectivité «Collectivité par défaut» * avec le statut super-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» h1. Fin ... et début ! L'installation est prête. Il reste à effectuer le paramétrage de base du système puis à commencer la configuration de Publik.