Déploiement des instances¶

Attention, le dĂ©ploiement ne doit ĂȘtre lancĂ© que si TOUS les services ont Ă©tĂ© testĂ©s et rĂ©pondent des 404 aux adresses prĂ©vues.

Cela signifie notamment, niveau infrastructure, que les entrées DNS, le/les certificats et les frontaux HTTP (haproxy et/ou nginx) sont déjà en place.

Avant de déployer une instance, il faut préparer 2 fichiers de configuration :

- le fichier modele.zip pour la configuration spécifique wcs

- le fichier recipe.json pour la configuration des instances sur les différents services

Préparation, création du fichier «modele.zip»¶

Le fichier de dĂ©ploiement ci-dessous mentionne un fichier template, modele.zip, nĂ©cessaire au paramĂ©trage de W.C.S lors du dĂ©ploiement. Ce fichier zip doit ĂȘtre placĂ© dans /var/lib/wcs/skeletons, il doit contenir un fichier site-options.cfg et un fichier config.json, voir les exemples ci-dessous.

Pour config.json :

{
    "debug": {
        "error_email": "admin@yourdomain.com"
    },
    "emails": {
        "from": "noreply@yourdomain.com"
    },
    "language": {
        "language": "fr"
    },
    "misc": {
        "charset": "utf-8",
        "homepage-redirect-url": "{{ portal_url }}"
    },
    "postgresql": {
        "createdb-connection-params": {
            "database": "postgres",
            "host": "your.postgres.db.host",
            "port": "5432",
            "user": "yourdbuser",
            "password": "yourdbpassword"
        },
        "database-template-name": "wcs_%s",
        "host": "your.postgres.db.host",
        "port": "5432",
        "user": "yourdbuser",
        "password": "yourdbpassword" }
}

L‘utilisateur postgres mentionnĂ© doit avoir le droit de crĂ©er une base de donnĂ©e.

Pour site-options.cfg :

[options]
default-to-global-view = true

workflow-resubmit-action = false
workflow-functions-only = true

formdef-captcha-option = false

default_position = 48.8336428;2.3233045

give-all-permissions-to-first-role = true

settings-disabled-screens = storage, identification, session, theme, template, users, smtp
disabled-workflow-actions = aggregationemail, jumponsubmit
disabled-fields = ranked-items, table, table-select, tablerows

disable-python-expressions = true
forbid-python-expressions = true
forbid-new-python-expressions = true
disable-jsonp-sources = true
disable-workflow-form-to-workflow-data = true
disable-internal-statistics = true

Préparation, création du fichier «recipe»¶

CrĂ©ation d’un fichier de dĂ©ploiement recipe-macollectivite-prod.json (note : fichier dĂ©jĂ  disponible sur l’infra de prĂ©-prod); la ligne « password » est Ă  complĂ©ter.

{
    "variables": {
        "hobo": "hobo-moncompte.macollectivite.fr",
        "authentic": "connexion-moncompte.macollectivite.fr",
        "combo": "moncompte.macollectivite.fr",
        "combo_agent": "agents-moncompte.macollectivite.fr",
        "passerelle": "passerelle-moncompte.macollectivite.fr",
        "wcs": "demarches-moncompte.macollectivite.fr"
    },
    "steps": [
        {"create-hobo": {
            "url": "https://${hobo}/"
        }},
        {"create-superuser": {
             "email": "admin+macollectivite@entrouvert.com",
             "password": "..."
        }},
        {"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": "modele.zip"
        }},
        {"create-passerelle": {
            "url": "https://${passerelle}/",
            "title": "Passerelle"
        }},
        {"set-theme": {
            "theme": "publik"
        }}
    ]
}

 

 

Lancement du déploiement¶

On utilise la commande «cook» proposĂ©e par le logiciel «hobo». Cette commande doit impĂ©rativement ĂȘtre exĂ©cutĂ©e par l’utilisateur «hobo», on utilise donc sudo -u hobo 
 :

# sudo -u hobo hobo-manage cook /chemin/vers/recipe-macollectivite-prod.json -v 2

Vérification du déploiement¶

A la fin du déploiement, les logiciels Publik Django packagés doivent avoir déployé les instances dans PostgreSQL (schémas visibles dans chaque base) mais surtout crée le répertoire contenant la configuration du site cible :

Ce qui est visible dans la plateforme de prĂ©-production doit l’ĂȘtre sur la plate-forme de production, donc on doit voir ceci (en retirant les preprod-) :

# ls -ld /var/lib/*/tenants/*
drwxr-xr-x 3 authentic-multitenant authentic-multitenant   120 Jul 12 15:19 /var/lib/authentic2-multitenant/tenants/connexion-preprod-moncompte.macollectivite.fr
drwxr-xr-x 5 combo                 combo                   156 Jul 21 00:25 /var/lib/combo/tenants/agents-preprod-moncompte.macollectivite.fr
drwxr-xr-x 5 combo                 combo                  4096 Jul 20 10:38 /var/lib/combo/tenants/preprod-moncompte.macollectivite.fr
drwxr-xr-x 3 hobo                  hobo                     81 Apr 18 10:42 /var/lib/hobo/tenants/hobo-preprod-moncompte.macollectivite.fr
drwxr-xr-x 3 passerelle            passerelle              107 Jul 10 18:19 /var/lib/passerelle/tenants/passerelle-preprod-moncompte.macollectivite.fr
drwxr-xr-x 22 wcs                  wcs                    4096 Jul 10 18:19 /var/lib/wcs/tenants/demarches-preprod-moncompte.macollectivite.fr

Note : w.c.s. créé directement une base de données dédiée wcs_demarches_moncompte_macollectivite_fr accompagnée de son dossier dans /var/lib/wcs/tenants

Si les répertoires sont présents, alors :
  • https://moncompte.macollectivite.fr : doit afficher une page « Votre installation de Combo fonctionne (
) Le site est actuellement vide (
) »,
  • https://agents-moncompte.macollectivite.fr : mĂȘme chose,
  • https://connexion-moncompte.macollectivite.fr : doit proposer une page de connexion avec un design proche de la prĂ©-prod,
  • https://passerelle-moncompte.macollectivite.fr : doit re-diriger vers le site connexion-moncompte prĂ©cĂ©dent,
  • https://hobo-moncompte.macollectivite.fr : mĂȘme chose, redirection vers connexion-moncompte,
  • https://demarches-moncompte.macollectivite.fr : doit rediriger vers https://moncompte.macollectivite.fr/.
 

Configuration de la synchronisation automatique des rôles des comptes LDAP

Dans le fichier /var/lib/authentic2-multitenant/tenants/connexion-moncompte.macollectivite.fr/settings.json, pour l'annuaire des agents, rajouter les paramètres group_filter et group_to_role_mapping.

Le paramètre group_filter liste recursivement les groupes LDAP dont le compte est membre:

"group_filter": "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={user_dn})(sAMAccountName=*))" 

Le paramètre group_to_role_mapping contient une liste de paramètres au format suivant:

["cn=Group1,ou=Groups,dc=maville,dc=fr", ["slug-du-role1", "slug-du-role2"]]

où le pemier paramètre est le DN du groupe dans l'annuaire et le deuxième paramètre est la liste des slugs des rôles à attribuer.

Ainsi, le fichier de configuration aurait la forme suivante:

{
    "LDAP_AUTH_SETTINGS": [
        {
            "realm": "mairie-macollectivite.fr",
            "url": ["ldaps://ldap.ville.fr/"],
            "basedn": "OU=users,DC=ville,DC=fr",
            "binddn": "login",
            "bindpw": "password",
            "user_filter": "(&(objectClass=user)(sAMAccountType=805306368)(|(mail=%s)(samaccountname=%s))(|(memberOf=CN=.LD_Agents_BO,OU=macollectivite,DC=ville,DC=fr)(memberOf=CN=.LD_Agents_Publik,OU=macollectivite,DC=ville,DC=fr)))",
            "username_template": "{samaccountname[0]}@{realm}",
            "update_username": true,
            "active_directory": true,
            "attributes": [
                "mail",
                "sAMAccountName",
                "cn",
                "sn",
                "givenName",
                "userPrincipalName"
            ],
            "external_id_tuples": [["samaccountname"],["dn:noquote"]],
            "shuffle_replicas": false,
            "require_cert": "never",
            "use_tls": false,
            "set_mandatory_roles": ["Agent"],
            "user_can_change_password": false,
            "group_filter": "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={user_dn})(sAMAccountName=*))" 
            "group_to_role_mapping": [
                 ["cn=Group1,ou=Groups,dc=maville,dc=fr", ["slug-du-rôle1", "slug-du-rôle2"]],
            ]
        }
    ]
}

Vous n'avez pas trouvĂ© ce que vous cherchez ?

Une suggestion ? Écrivez-nous !

Proposez une amélioration pour la documentation

DerniĂšre mise Ă  jour le 24/07/2026 11:59