diff --git a/Makefile b/Makefile index 1baa974..e24c2d2 100644 --- a/Makefile +++ b/Makefile @@ -5,8 +5,7 @@ NAME = publik-infra all: DIST_FILES = \ - prometheus-entrouvert-exporter \ - sysadmin-doc + prometheus-entrouvert-exporter clean: rm -rf sdist diff --git a/debian/control b/debian/control index a4ac3b3..43bfe00 100644 --- a/debian/control +++ b/debian/control @@ -2,19 +2,9 @@ Source: publik-infra Section: unknown Priority: optional Maintainer: Christophe Siraut -Build-Depends: debhelper-compat (= 12), - python3-all, - python3-recommonmark, - python3-sphinx, - python3-stemmer, +Build-Depends: debhelper-compat (= 12), python3-all Standards-Version: 4.1.3 Homepage: https://git.entrouvert.org -X-Python3-Version: >= 3.2 - -Package: publik-sysadmin-doc -Architecture: all -Depends: ${misc:Depends} -Description: Documentation for doc-publik.entrouvert.com/guide-de-l-administrateur-systeme/ Package: prometheus-entrouvert-exporter Architecture: all diff --git a/debian/publik-sysadmin-doc.docs b/debian/publik-sysadmin-doc.docs deleted file mode 100644 index b9d6d20..0000000 --- a/debian/publik-sysadmin-doc.docs +++ /dev/null @@ -1 +0,0 @@ -sysadmin-doc/_build/* diff --git a/debian/rules b/debian/rules index d8f1f4d..31906df 100755 --- a/debian/rules +++ b/debian/rules @@ -3,10 +3,6 @@ %: dh $@ -override_dh_auto_build: - dh_auto_build - cd sysadmin-doc; make html - override_dh_installsystemd: dh_installsystemd --name=prometheus-system-exporter dh_installsystemd --name=prometheus-uwsgi-exporter diff --git a/sysadmin-doc/Makefile b/sysadmin-doc/Makefile deleted file mode 100644 index e13c075..0000000 --- a/sysadmin-doc/Makefile +++ /dev/null @@ -1,225 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = _build - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " applehelp to make an Apple Help Book" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " epub3 to make an epub3" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " xml to make Docutils-native XML files" - @echo " pseudoxml to make pseudoxml-XML files for display purposes" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - @echo " coverage to run coverage check of the documentation (if enabled)" - @echo " dummy to check syntax errors of document sources" - -.PHONY: clean -clean: - rm -rf $(BUILDDIR)/* - -.PHONY: html -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -.PHONY: dirhtml -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -.PHONY: singlehtml -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -.PHONY: pickle -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -.PHONY: json -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -.PHONY: htmlhelp -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -.PHONY: qthelp -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/InfrastructuredePublik.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/InfrastructuredePublik.qhc" - -.PHONY: applehelp -applehelp: - $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp - @echo - @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." - @echo "N.B. You won't be able to view it unless you put it in" \ - "~/Library/Documentation/Help or install it in your application" \ - "bundle." - -.PHONY: devhelp -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/InfrastructuredePublik" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/InfrastructuredePublik" - @echo "# devhelp" - -.PHONY: epub -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -.PHONY: epub3 -epub3: - $(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3 - @echo - @echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3." - -.PHONY: latex -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -.PHONY: latexpdf -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -.PHONY: latexpdfja -latexpdfja: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through platex and dvipdfmx..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -.PHONY: text -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -.PHONY: man -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -.PHONY: texinfo -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -.PHONY: info -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -.PHONY: gettext -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -.PHONY: changes -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -.PHONY: linkcheck -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -.PHONY: doctest -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." - -.PHONY: coverage -coverage: - $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage - @echo "Testing of coverage in the sources finished, look at the " \ - "results in $(BUILDDIR)/coverage/python.txt." - -.PHONY: xml -xml: - $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml - @echo - @echo "Build finished. The XML files are in $(BUILDDIR)/xml." - -.PHONY: pseudoxml -pseudoxml: - $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml - @echo - @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." - -.PHONY: dummy -dummy: - $(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy - @echo - @echo "Build finished. Dummy builder generates no files." diff --git a/sysadmin-doc/architecture-1.md b/sysadmin-doc/architecture-1.md deleted file mode 100644 index 92d5a85..0000000 --- a/sysadmin-doc/architecture-1.md +++ /dev/null @@ -1,32 +0,0 @@ -# Présentation générale - -Publik est un ensemble de composants : on parle des *briques* de la -solution. Elles sont représentées ci-dessous sous la forme de carrés. Elles -sont accessibles par les humains via le web au travers d’interfaces -*frontoffice* ou *backoffice*. - -Le composant *passerelle* assure la connexion avec des systèmes tiers en -traduisant les webservices de Publik au format des protocoles des logiciels -cibles. - -![Logo Publik](images/architecture.png) - -Liste des briques disponibles : - -- Authentic : gestion des identités, *identity provider* -- Combo : portails usager et agent -- w.c.s. : formulaires et workflows -- Passerelle : connecteurs vers systèmes tiers -- Fargo : porte-documents -- Chrono : prise de rendez-vous -- Hobo : système de déploiement - -Un système Publik installé ne comporte pas obligatoirement toutes les -briques. - -## Haute disponibilité - -Lors d'installations critiques nous recommandons de doubler chacun des -services, et la mise-en-place d'une interface de stockage distribuée. Un -serveur proxy est en charge de la terminaison SSL, de la répartition de la -charge et la tolérance aux pannes. diff --git a/sysadmin-doc/architecture-2.md b/sysadmin-doc/architecture-2.md deleted file mode 100644 index 29f8dbb..0000000 --- a/sysadmin-doc/architecture-2.md +++ /dev/null @@ -1,92 +0,0 @@ -# Présentation d'une brique - -Une brique Entrouvert est un paquet Debian standard issu d’un module -Python standard. C’est un logiciel libre dont vous pouvez obtenir et -modifier les sources selon vos besoins. Les fichiers d’installation sont -posés dans /var/lib/mabrique, et les fichiers de configuration sont -placés dans /etc/mabrique. Les services et les journaux des briques sont -pilotés par systemd. - -Note: lors d'installations critiques, nous créons un lien symbolique depuis -/var/lib/mabrique/documents vers un montage NFS. - -## Utilisation de cadriciels (*frameworks*) - -Chaque brique logicielle est une application Python/Django – à -l’exception de la brique w.c.s. qui utilise le cadriciel Quixote. - -L’utilisation d’un *framework* permet de disposer d’un ensemble de -composants afin de développer plus rapidement, mais aussi de manière -plus homogène, et surtout en assurant à tout moment une excellente -sécurité de l’application. C’est en effet le framework qui : - -- reçoit les données, les interprète et les valide avant de les - envoyer à l’application ; -- permet de contrôler l’envoi des données aux bases de données par - l’application (pas de requêtes SQL directes) ; -- sécurise les sorties de l’application (HTML) en imposant un contrôle - fort sur les données affichable. - -Dans Publik, en plus de l’utilisation de toutes les possibilités de -Django d’autres protections sont mises en place : - -- isolation des composants (chaque composant est une brique logicielle - indépendante) ; -- chaque brique dispose de sa propre base de données, complètement - isolée des autres (chaque base peut même être hébergée sur un - serveur propre) ; -- chaque brique peut gérer plusieurs sites (mode multi-tenants), dans - ce cas chaque site dispose d’un « tenant » dans la base de données - sous forme d’un schéma PostgreSQL : chaque site est donc indépendant - et isolé ; -- utilisation du front-end nginx pour diffuser tous les éléments - statiques des applications ; -- connexion de l’application via le protocole wsgi pour un premier - filtrage des requêtes (les requêtes invalides sont - rapidement éliminées). - -D’une façon générale, Publik utilise au maximum des composants -éprouvés : le code des applications se concentre uniquement sur la -logique de celles-ci. Il s’agit de suivre les principes DRY (Don’t -Repeat Yourself) et KISS (Keep It Simple Stupid) afin de mieux sécuriser -l’application : la sobriété recherchée par Publik est aussi présente -dans le code du logiciel. - -## Dialogue entre les composants - -![Logo Publik](images/schema.png) - -Le schéma ci-dessus montre que l’application n’est pas en contact -« direct » avec l’extérieur. Elle utilise toujours des composants -logiciels soit éprouvés (celery, requests, tenant-schemas), soit communs -à toutes les briques (hobo, mellon). - -Dialogues entre briques ------------------------ - -Les briques de Publik dialoguent via deux canaux : - -- webservices (HTTPS JSON) pour ce qui concerne l’échange de données -- messages (AMQP) pour ce qui concerne la gestion des utilisateurs et - des rôles, *i.e.* le provisioning au travers des différents - composants - -Par ailleurs SAML est utilisé pour ce qui concerne le WebSSO (le -dialogue se déroule via le navigateur de l’usager). - -![Logo Publik](images/dialogue.png) - -## Chemin d'une requête - -Une requête Publik chemine typiquement par les services suivants : - -service web (nginx) : - -- dispose d'un certificat SSL -- dispose des composants Publik -- interroge la base de donnée et répond aux requêtes des utilisateurs - -service de base de données (postgresql) : - -- enregistre et restitue les données des applications, - diff --git a/sysadmin-doc/architecture-4.md b/sysadmin-doc/architecture-4.md deleted file mode 100644 index a301e0b..0000000 --- a/sysadmin-doc/architecture-4.md +++ /dev/null @@ -1,31 +0,0 @@ -# Dépendances logicielles - -## Service de base de données - -Chaque brique utilise une ou plusieurs bases de données PostgreSQL. - -## Composants logiciels sous-jacents - -Publik est un logiciel développé en Python, sur le framework Django. -Il est développé et testé pour fonctionner sur un système -d’exploitation Debian GNU/Linux. - -Le frontal web recommandé est nginx, bien que Publik puisse fonctionner -avec Apache et d’autres serveurs HTTP. La liaison entre les applicatifs -Python et le frontal web est assurée par uWSGI. - -Les différents composants (briques) de Publik échangent des messages -AMQP via RabbitMQ. - -Publik nécessite PostgreSQL (version 9.6 ou supérieure) sur -lequel chaque brique disposera de sa base de données propre. - -Un système de cache compatible Django est nécessaire, memcached étant -conseillé. - -## Certificats X509 - -La diffusion HTTPS étant obligatoire, il est nécessaire de disposer de -certificats valides pour chaque brique déployée ; chacune des briques -utilisant un nom de serveur distinct. En général un certificat étoile -(*wildcard* *.example.net) couvre toutes les briques. diff --git a/sysadmin-doc/architecture-6.md b/sysadmin-doc/architecture-6.md deleted file mode 100644 index 70cf553..0000000 --- a/sysadmin-doc/architecture-6.md +++ /dev/null @@ -1,237 +0,0 @@ -Autres infrastructures possibles --------------------------------- - -### Infrastructure PoC / test - -Dans le cadre d’une installation de test ou PoC (preuve de concept) il -est habituel d’installer Publik sur une seule machine. Dans ce cas, -toutes les briques partagent : - -- un seul frontal ngnix -- un seul serveur de base de donnée -- des espaces disques locaux (*/var/lib/brique*) -- un système de log (en général le *syslog* système) - -Dans ce cadre, Publik peut être installé sur une machine aujourd’hui -habituelle : - -- processeur x86-64 double cœur -- mémoire vive 2Go -- espace disque 10Go, voire moins - -Cependant et pour rappel, Publik nécessitant un fonctionnement HTTPS, il -reste nécessaire de disposer : - -- d’un enregistrement DNS par brique instanciée ; -- d’un certificat x509 valable pour chaque brique, généralement un - wildcard sur le domaine choisi. - -### Infrastructure légère et « élastique » - -Entre une infrastructure SaaS telle que celle gérée par Entr’ouvert -capable de répondre à des dizaines d’installations, et une -infrastructure minimale telle que celle décrite pour un PoC, toutes les -combinaisons sont possibles. - -La partie la plus délicate à gérer est souvent la partie x509, et -parfois la partie DNS quand il est question de pouvoir créer de -nouvelles instances automatiquement dans le cadre d’un ensemble de -communes (syndicat, organisme, métropole ou agglomération désirant -diffuser la solution Publik à ses « membres »). - -Pour rendre l’installation « élastique », c’est-à-dire capable de -s’adapter au futur, il est conseillé : - -- de virtualiser toutes les machines ; -- d’utiliser une technique de virtualisation permettant des - modifications CPU, RAM et disque faciles, idéalement à chaud ; -- de disposer d’un serveur PostgreSQL central ; -- d’avoir accès à un SAN pour le stockage des données ; -- d’avoir toute liberté sur la partie DNS, éventuellement via des - CNAME ou une délégation de zone ; -- de disposer d’un certificat x509 wildcard pour chaque domaine - à gérer. - -Une fois l’installation effectuée, il est souvent assez simple de -permettre le déplacement d’une brique vers une autre machine : copie des -configurations et des données, modification DNS, l’opération -correctement préparée est sans risque et ne provoque pas de coupure de -plus de 10 minutes. - -### Infrastructure pour hébergement sur site - -Un hébergement sur site est de type « élastique » (cf *supra*), voici -les recommandations d’usage pour l’initialisation : - -- machine « IdP » pour authentic (utilisable par d'autres systèmes - que Publik) -- machine « applications » : hobo + combo + w.c.s. + fargo + - passerelle -- machine PostgreSQL -- autres briques sur une autre machine ou sur la machine - « applications » -- backups et redondance (*fail-over*) assurés par ailleurs - -Pour une collectivité avec plusieurs déploiements prévus à -l’initialisation, la machine « applications » peut être scindée : - -- machine hobo + combo + passerelle -- machine w.c.s. + fargo (porte-documents) -- autres briques sur une machine tierce - -Toutes les machines sont virtuelles et modifiables rapidement (CPU et -RAM) avec une marge importante. Les répertoires de données proviennent -d'un SAN et sont extensibles, principalement pour w.c.s. et fargo -(porte-documents). - -Caractéristiques d’une machine virtuelle à l’initialisation : - -- processeur x86-64 4 cœurs -- mémoire vive 4Go -- espace disque 16Go ; et plus (via SAN) sur les applications stockant - des documents w.c.s. et fargo. - -Le serveur PostgreSQL est sécurisé, c’est-à-dire qu’il dispose au moins -d'un réplicat pour *fail-over*. Si besoin il peut être installé par -Entr’ouvert. - -Accès à un S.I. tiers ---------------------- - -Lorsque Publik doit accéder à un système d’information tiers, il doit y -avoir ouverture des flux nécessaires : - -- accès webservices : passerelle consomme ou fourni des webservices - au S.I. tiers ; -- accès LDAP pour les annuaires : accès par l’IdP pour - authentification et synchonisation. - -Pour les webservices, la connexion sera effectuée par Passerelle, via un -connecteur. - -Si le connecteur n’existe pas encore et doit donc être programmé, les -webservices tiers doivent utiliser des protocoles ouverts et reconnus, -tels que REST/JSON ou SOAP. Ils doivent être documentés et validés. - -### Protection des accès webservices - -![Logo Publik](images/flux_si_tiers.png) - -Les webservices, en entrée comme en sortie, doivent utiliser HTTPS. -L’authentification peut être : - -- en login/mot de passe (*HTTP Basic authentication*) -- par certificat X509 client et serveur -- … tout autre mode d’authentification peut être étudié - par Entr’ouvert. - -Note : les API internes à Publik utilisent un système d’authentification -spécifique similaire à JWT, décrit dans - - -Note 2 : En cas de proxy sur la chaîne, il faut vérifier l’absence de -cache. - -### Protection de l’accès LDAP : X509 - -La connexion LDAP doit se faire en TLS, avec des certificats X509 -clients et serveurs validés de chaque côté. Entr’ouvert peut fournir des -certificats depuis son AC privée. - -S’il s’agit d’un accès LDAP à un système Active Directory, voici deux -documentation concernant la mise en place de TLS sur ce système : - -- [http://social.technet.microsoft.com/wiki/contents/articles/2980.ldap-over-ssl-ldaps-](http://social.technet.microsoft.com/wiki/contents/articles/2980.ldap-over-ssl-ldaps-certificate.aspx)[certificate.aspx](http://social.technet.microsoft.com/wiki/contents/articles/2980.ldap-over-ssl-ldaps-certificate.aspx) -- - -### Ajout de protections sur webservices existants - -Au cas où les logiciels tiers ne mettent pas en place de protection -suffisante sur leurs webservices, plusieurs solutions de sécurisation -peuvent être envisagées, dont les plus classiques sont : ajout d’un -reverse-proxy, ajout d’une instance « locale » de Passerelle, mise en -place d’un VPN. - -#### Ajout d’un *reverse-proxy* - -Un reverse-proxy est placé en frontal devant les webservices, ajoutant -la couche HTTPS et/ou une authentification (par HTTP Basic ou X509). -C’est généralement la solution la plus efficace, simple à mettre en -place et ne nécessitant qu’une maintenance classique, qui peut être -intégrée à la maintenance générale du SI. C’est donc la solution -conseillée. - -![Logo Publik](images/reverse_proxy.png) - -Le reverse-proxy est une solution de type Apache ou Nginx. Il est -connecté d’une part au webservice à diffuser, et d’autre part à un -réseau accessible par Publik. Il ajoute : - -- le chiffrage du flux (HTTPS) ; -- une authentification : soit basique, soit basée sur un certificat - X509 client ; -- un filtrage des URLs accessibles ou non depuis telle ou telle IP - (typiquement pour l’IP de la passerelle Publik). - -Un filtrage IP général peut également être ajouté au niveau d’un -firewall placé en amont du reverse-proxy, par exemple le firewall -d’arrivée générale du site client. Ce filtrage n’autorisera que l’IP de -Passerelle à accéder aux webservices. - -#### Ajout d’une instance Passerelle « locale » - -Dans cette configuration, une instance de Passerelle est ajoutée, au -même niveau qu’un reverse-proxy (*cf* supra). Les connecteurs de -Passerelle assurent alors localement la traduction des webservices tiers -en webservices Publik, ces derniers ajoutant la sécurisation de l’accès -entre le SI et Publik. - -Cette solution présente l’avantage d’assurer un contrôle de sécurité -fort des webservices diffusés à destination de Publik, contrôle assuré -par Publik. Cependant, la maintenance est plus complexe que -l’installation d’un reverse-proxy. Aussi ne doit-elle être mise en place -que si les webservices de l’application sont très difficiles à -sécuriser. - -![Logo Publik](images/passerelle_locale.png) - - - -### MCO par Entr'ouvert - -Pour qu'ils puissent assurer le maintien en conditions opérationnelles -(MCO) de la partie logicielle Publik, les travailleurs d'Entr'ouvert -doivent : - -- avoir un accès SSH aux machines le plus direct possible (sans - nécessité de passer par un VPN, qui plus est s'il est propriétaire - ou exotique). Entr’ouvert peut indiquer une liste d’adresses IPv4 - source ; -- disposer d'un accès administrateur (root) sur les machines, via *su* - ou *sudo*. - -Cet accès n’est pas demandé sur les machines d’infrastructure « non -logicielle » telle que le serveur de base de données PostgreSQL, le -serveur de log, les backups, etc. La maintenance de ces systèmes est -laissée aux opérateurs habituels du site ; sauf contrat spécifique avec -Entr’ouvert. - -Si l'accès web à la solution est fermé, par exemple dans le cas d'un PoC -ou d'une utilisation interne, alors cet accès doit être possible pour -Entr'ouvert (là encore, accès direct sans VPN si possible). - -Si les permissions *root* sont impossibles, il est au moins nécessaire, -pour des raisons de support, qu'Entr'ouvert accéde facilement aux logs -des machines voire à son système de supervision, et ce en temps réel. Il -doit par ailleurs exister une procédure de passage root en cas -d'urgence. Enfin, si Entr'ouvert n'a pas d'accès *root* à la machine, -cela signifie que la supervision et les mises à jour régulières (au -moins quotidiennes) sont opérées par l'hébergeur ; condition sans -laquelle Entr'ouvert ne peut pas garantir une sécurité maximale du -système. - -Enfin, Entr’ouvert ne peut assurer un MCO efficace que sur des machines -Debian GNU/Linux maintenues à jour – cette maintenance peut même être -assurée par Entr’ouvert. Pour tout autre système d’exploitation, un -contrat spécifique doit être prévu. - diff --git a/sysadmin-doc/conf.py b/sysadmin-doc/conf.py deleted file mode 100644 index a85cfd5..0000000 --- a/sysadmin-doc/conf.py +++ /dev/null @@ -1,355 +0,0 @@ -# -# Infrastructure de Publik documentation build configuration file, created by -# sphinx-quickstart on Mon Oct 30 17:41:53 2017. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -# import os -# import sys -# sys.path.insert(0, os.path.abspath('.')) - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -# -# needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -source_parsers = { - '.md': 'recommonmark.parser.CommonMarkParser', -} - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# -source_suffix = ['.rst', '.md'] -# source_suffix = '.rst' - -# The encoding of source files. -# -# source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = 'Infrastructure de Publik' -copyright = '2017, Entrouvert' -author = 'Entrouvert' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '1.0' -# The full version, including alpha/beta/rc tags. -release = '1.0' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = 'fr' - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -# -# today = '' -# -# Else, today_fmt is used as the format for a strftime call. -# -# today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -# -# default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -# -# add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -# -# add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -# -# show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -# modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -# keep_warnings = False - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = False - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = 'alabaster' - -html_sidebars = {'**': ['navigation.html', 'searchbox.html']} -html_theme_options = { - 'extra_nav_links': { - "Guide de déploiement": "https://doc.entrouvert.org/publik-infra/", - "Guide de l'administrateur technique": "https://doc-publik.entrouvert.com/tech/", - "☜ Accueil": "https://doc-publik.entrouvert.com/", - } -} - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# -# html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -# html_theme_path = [] - -# The name for this set of Sphinx documents. -# " v documentation" by default. -# -# html_title = u'Infrastructure de Publik v1.0' - -# A shorter title for the navigation bar. Default is the same as html_title. -# -# html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -# -# html_logo = None - -# The name of an image file (relative to this directory) to use as a favicon of -# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -# -# html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -# -# html_extra_path = [] - -# If not None, a 'Last updated on:' timestamp is inserted at every page -# bottom, using the given strftime format. -# The empty string is equivalent to '%b %d, %Y'. -# -# html_last_updated_fmt = None - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -# -# html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -# -# html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -# -# html_additional_pages = {} - -# If false, no module index is generated. -# -# html_domain_indices = True - -# If false, no index is generated. -# -# html_use_index = True - -# If true, the index is split into individual pages for each letter. -# -# html_split_index = False - -# If true, links to the reST sources are added to the pages. -# -# html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -# -# html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -# -# html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -# -# html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -# html_file_suffix = None - -# Language to be used for generating the HTML full-text search index. -# Sphinx supports the following languages: -# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' -# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr', 'zh' -# -# html_search_language = 'en' - -# A dictionary with options for the search language support, empty by default. -# 'ja' uses this config value. -# 'zh' user can custom change `jieba` dictionary path. -# -# html_search_options = {'type': 'default'} - -# The name of a javascript file (relative to the configuration directory) that -# implements a search results scorer. If empty, the default will be used. -# -# html_search_scorer = 'scorer.js' - -# Output file base name for HTML help builder. -htmlhelp_basename = 'InfrastructuredePublikdoc' - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - ( - master_doc, - 'InfrastructuredePublik.tex', - 'Infrastructure de Publik Documentation', - 'Entrouvert', - 'manual', - ), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -# -# latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -# -# latex_use_parts = False - -# If true, show page references after internal links. -# -# latex_show_pagerefs = False - -# If true, show URL addresses after external links. -# -# latex_show_urls = False - -# Documents to append as an appendix to all manuals. -# -# latex_appendices = [] - -# It false, will not define \strong, \code, itleref, \crossref ... but only -# \sphinxstrong, ..., \sphinxtitleref, ... To help avoid clash with user added -# packages. -# -# latex_keep_old_macro_names = True - -# If false, no module index is generated. -# -# latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [(master_doc, 'infrastructuredepublik', 'Infrastructure de Publik Documentation', [author], 1)] - -# If true, show URL addresses after external links. -# -# man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ( - master_doc, - 'InfrastructuredePublik', - 'Infrastructure de Publik Documentation', - author, - 'InfrastructuredePublik', - 'One line description of project.', - 'Miscellaneous', - ), -] - -# Documents to append as an appendix to all manuals. -# -# texinfo_appendices = [] - -# If false, no module index is generated. -# -# texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -# -# texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -# -# texinfo_no_detailmenu = False diff --git a/sysadmin-doc/exploitation-1.md b/sysadmin-doc/exploitation-1.md deleted file mode 100644 index 6c95eaa..0000000 --- a/sysadmin-doc/exploitation-1.md +++ /dev/null @@ -1,6 +0,0 @@ -Notice d’exploitation -===================== - -Ce document constitue la notice l’exploitation d’un système Publik -standard. Des adaptations sont naturellement à envisager en fonction des -besoins particuliers. diff --git a/sysadmin-doc/exploitation-2.md b/sysadmin-doc/exploitation-2.md deleted file mode 100644 index 7abc41c..0000000 --- a/sysadmin-doc/exploitation-2.md +++ /dev/null @@ -1,48 +0,0 @@ -# Pilotage - -## Pilotage du frontal HTTP - -C'est le service Nginx qui gère les requêtes HTTP, son pilotage se fait -de façon classique : - - # service nginx stop - - # service nginx start - - # service nginx restart - -À noter que lorsqu'un service Publik est coupé, Nginx renvoie des -erreurs *502 Bad Gateway*. HAProxy réagit alors en tentant la requête -sur l'autre machine. Si l'autre répond aussi 502, HAProxy peut afficher -un message de maintenance. - -### Pilotage des services de Publik - -Tous les services sont pilotables avec le système *service* fourni par -Debian. - -Liste des services Publik en place : - -- *hobo* : système de déploiement et de provisionning -- *authentic2-multitenant* : gestion d'identité et websso -- *combo* : CMS des portails usager et agent -- *wcs* : moteur de démarches (formulaires et workflows) -- *passerelle* : hub de webservices -- *fargo* : porte-document -- *supervisor* (cas particulier pour le pilotage de hobo-agent, - sous-service hobo qui sera bientôt piloté directement par systemd) - -Pour exemple, pilotage du service combo (portails) : - - # service combo stop - - # service combo start - - # service combo restart - -S'agissant d'une installation dual, ces actions doivent être effectuées -sur les deux machines. - -Attention : si un service de Publik est démarré ou redémarré alors que -PostgreSQL n'est pas disponible, ce démarrage ne fonctionnera pas. Il -faudra redemander le démarrage explicitement. diff --git a/sysadmin-doc/exploitation-3.md b/sysadmin-doc/exploitation-3.md deleted file mode 100644 index 5bd97df..0000000 --- a/sysadmin-doc/exploitation-3.md +++ /dev/null @@ -1,45 +0,0 @@ -# Journal des événements (logs) - -L’historique des événements applicatifs est accessible via l'outil -*journalctl*. Par exemple pour suivre les événements de combo : - - # journalctl -fu combo - -Pour suivre l'ensemble des composants : - - # journalctl -f -u combo -u authentic2-multitenant -u wcs -u fargo -u hobo -u supervisor - -Les logs HTTP sont ceux de nginx, fichiers textes rangés par service -dans */var/log/nginx :* - - /var/log/nginx/authentic2-multitenant-access.log - - /var/log/nginx/authentic2-multitenant-error.log - - /var/log/nginx/bijoe-access.log - - /var/log/nginx/bijoe-error.log - - /var/log/nginx/combo-access.log - - /var/log/nginx/combo-error.log - - /var/log/nginx/fargo-access.log - - /var/log/nginx/fargo-error.log - - /var/log/nginx/hobo-access.log - - /var/log/nginx/hobo-error.log - - /var/log/nginx/passerelle-access.log - - /var/log/nginx/passerelle-error.log - - /var/log/nginx/wcs-access.log - - /var/log/nginx/wcs-error.log - -Exemple pour suivre ce qui concerne combo : - - # tail -f /var/log/nginx/combo-\*.log diff --git a/sysadmin-doc/exploitation-4.md b/sysadmin-doc/exploitation-4.md deleted file mode 100644 index a9c16a4..0000000 --- a/sysadmin-doc/exploitation-4.md +++ /dev/null @@ -1,58 +0,0 @@ -# Mises à jour des composants - -## Fréquence des mises à jour - -Entr'ouvert livre une nouvelle version de Publik les soirs des 2ème et -4ème jeudi de chaque mois. L'installation peut être faite aussitôt, mais -nous conseillons à des hébergeurs tiers non infogérés par Entr'ouvert de -faire la mise à jour le mardi suivant. - -La mise à jour provoque une courte indisponibilité du système : elle -doit être faite sur des heures de faible affluence. Pour information, -Entr'ouvert effectue ces mises à jour autour de 22 ou 23h le jeudi soir, -en attendant une baisse de la fréquentation visible dans les logs nginx. - -## Déroulé en installation double (load-balancing) - -S'agissant d'une installation double (load-balancing entre web1 et -web2), la procédure générale à suivre est : - -1. arrêt du frontal nginx sur web2 ⇒ HAProxy envoie tout sur web1, -2. vérifier que PostgreSQL est bien fonctionnel, -3. mise à jour de web1 (procédure ci-dessous), -4. vérification du fonctionnement du site (parcours de 3 ou 4 URLs), -5. mise à jour de web2, -6. relance du frontal nginx sur web2, -7. vérification du fonctionnement du site (parcours de 3 ou 4 URLs). - -Attention : si un service de Publik est redémarré alors que PostgreSQL -n'est pas disponible, ce démarrage ne fonctionnera pas. Il faudra -redemander le démarrage explicitement. Ceci signifie qu'il est très -fortement conseillé de faire la mise à jour de Publik indépendamment de -celle de PostgreSQL. Entr'ouvert conseille de faire la mise à jour de -PostgreSQL **avant** les composants de Publik. - -Les composants de Publik sont livrés sous forme de paquet Debian, leur -mise à jour suit la procédure classique : - - # apt update - # apt upgrade - -Il est cependant possible qu'une nouvelle version demande l'installation -d'une nouvelle dépendance, dans ce cas « *apt upgrade* » refusera la -mise à jour et il faudra la forcer par : - - # apt full-upgrade - -## Mise à jour PostgreSQL - -La mise à jour de PostgreSQL peut être faite à chaud selon les -procédures Debian normales. Durant la mise à jour, les services ne -fonctionneront pas (réponses 5xx) et HAProxy délivrera une erreur « -maintenance ». Dès le redémarrage de PostgreSQL, les services Publik -rétabliront les connexions vers le serveur SQL et le système sera à -nouveau utilisable. - -Attention : si un service de Publik est démarré ou redémarré alors que -PostgreSQL n'est pas disponible, ce démarrage ne fonctionnera pas. Il -faudra redemander le démarrage explicitement. diff --git a/sysadmin-doc/exploitation-5.md b/sysadmin-doc/exploitation-5.md deleted file mode 100644 index 6f17125..0000000 --- a/sysadmin-doc/exploitation-5.md +++ /dev/null @@ -1,33 +0,0 @@ -# Support - -Les moyens de contact pour le support sont : - -- L'extranet projet avec le gestionnaire de demandes (accès privé) -- La liste de discussion projet (abonnement sur demande) -- Le courriel spécifique support pour macollectivite (lequel génère automatiquement une demande dans le gestionnaire) -- Le courriel support générique d'Entr'ouvert : . - -# Infogérance - -## Périmètre de la maintenance - -Lors d'une installation auto-hébergée (ou *on-premise*) voici le périmètre habituel de la maintenance : - - * Maintien de la sécurité des données (protection, intégrité, et disponibilité) - * Mises à jours des logiciels Publik (correctifs de sécurité et évolution des fonctionnalités) - * Intégration continue des évolutions liées aux demandes du client - * Le système d'exploitation des serveurs applicatifs Publik peut être infogéré intégralement par Entr'ouvert - -Sont exclus du cadre de la maintenance : - - * Le gestion du matériel est maintenu par le client - * La supervision est effectuée par le client - * Les sauvegardes et les restaurations sont effectuées par le client - * Le maintien des conditions opérationnelles des systèmes tiers (bases-de-données, serveur de fichier, proxys) - -## Pré-requis - -Le maintien en conditions opérationnelles à distance par Entr'ouvert requiert : - - * Les permissions root/sudo sur le système - * Un accès à distance direct via le protocole SSH avec authentification par clé, depuis l'adresse IP du serveur de maintenance d'Entr'ouvert. diff --git a/sysadmin-doc/images/architecture.png b/sysadmin-doc/images/architecture.png deleted file mode 100644 index 1fc91cb..0000000 Binary files a/sysadmin-doc/images/architecture.png and /dev/null differ diff --git a/sysadmin-doc/images/architecture.svg b/sysadmin-doc/images/architecture.svg deleted file mode 100644 index 8ec838a..0000000 --- a/sysadmin-doc/images/architecture.svg +++ /dev/null @@ -1,372 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - frontoffice - - - - - - - - backoffice - - - - - - - - - - - - - - - - - IdP - - - - - - - - Combocms - - - - - - - - w.c.s. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - https - - - - - - https - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ldap - - - - - - - - - - - - - - webservicesAPI Publik - - - - - - - - - - - - - - SQL - - - - - - - - - - - - - - - Passerelle - - - - - - - - - - - - - - API tierces - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - filesystem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Publik - - - - - - - S.I. tiers - - - - - - - \ No newline at end of file diff --git a/sysadmin-doc/images/dialogue.png b/sysadmin-doc/images/dialogue.png deleted file mode 100644 index b4a0f4e..0000000 Binary files a/sysadmin-doc/images/dialogue.png and /dev/null differ diff --git a/sysadmin-doc/images/dialogue.svg b/sysadmin-doc/images/dialogue.svg deleted file mode 100644 index 5462113..0000000 --- a/sysadmin-doc/images/dialogue.svg +++ /dev/null @@ -1,336 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IdP - - - - - - - - Combocms - - - - - - - - w.c.s. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Passerelle - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - API webservices Publik (HTTPS) - - - - - - - - - - - - - - - - - - - - - - - - - - - - LOGsyslog / GELF - - - - - - - AMQP - - - - - - - - - - - - - Provisionning - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SQLPostgreSQL - - - - - - - - \ No newline at end of file diff --git a/sysadmin-doc/images/flux_si_tiers.png b/sysadmin-doc/images/flux_si_tiers.png deleted file mode 100644 index 5e4f2c5..0000000 Binary files a/sysadmin-doc/images/flux_si_tiers.png and /dev/null differ diff --git a/sysadmin-doc/images/flux_si_tiers.svg b/sysadmin-doc/images/flux_si_tiers.svg deleted file mode 100644 index dade1a2..0000000 --- a/sysadmin-doc/images/flux_si_tiers.svg +++ /dev/null @@ -1,308 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - webserviceslogiciel tiers - - - - - - - - - - - - - - - - Publik - - - - - - - - - - - - - - Passerelle - - - - - - - - - - - - - - - - - - - - - - - - - - Internet - - - - - - - - - - - - - - - - - - - - - - - - - - Hébergement Publik - - - - - - Hébergement client - - - - - - flux sécurisé - - - - - - chiffrage (HTTPS),authentification,filtrages … - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ReverseProxyApache - - - - - - - \ No newline at end of file diff --git a/sysadmin-doc/images/logo-petit.png b/sysadmin-doc/images/logo-petit.png deleted file mode 100644 index 1897223..0000000 Binary files a/sysadmin-doc/images/logo-petit.png and /dev/null differ diff --git a/sysadmin-doc/images/logo-petit.svg b/sysadmin-doc/images/logo-petit.svg deleted file mode 100644 index e21042c..0000000 --- a/sysadmin-doc/images/logo-petit.svg +++ /dev/null @@ -1,91 +0,0 @@ - - - -image/svg+xml \ No newline at end of file diff --git a/sysadmin-doc/images/logo.png b/sysadmin-doc/images/logo.png deleted file mode 100644 index 399ae69..0000000 Binary files a/sysadmin-doc/images/logo.png and /dev/null differ diff --git a/sysadmin-doc/images/logo.svg b/sysadmin-doc/images/logo.svg deleted file mode 100644 index ce56741..0000000 --- a/sysadmin-doc/images/logo.svg +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sysadmin-doc/images/passerelle_locale.png b/sysadmin-doc/images/passerelle_locale.png deleted file mode 100644 index bb8b43b..0000000 Binary files a/sysadmin-doc/images/passerelle_locale.png and /dev/null differ diff --git a/sysadmin-doc/images/passerelle_locale.svg b/sysadmin-doc/images/passerelle_locale.svg deleted file mode 100644 index 3e019ec..0000000 --- a/sysadmin-doc/images/passerelle_locale.svg +++ /dev/null @@ -1,313 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - webserviceslogiciel tiers - - - - - - - - - - - - - - - - Publik - - - - - - - - - - - - - - Passerelle - - - - - - - - - - - - - - - - - - - - - - - - - - Internet - - - - - - - - - - - - - - - - - - - - - - - - - - Hébergement Publik - - - - - - Hébergement client - - - - - - flux sécuriséAPI Publik - - - - - - chiffrage (HTTPS),authentification,filtrages … - - - - - - - - - - - - - - Passerellerp applicatif - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - vers autres API - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/sysadmin-doc/images/reverse_proxy.png b/sysadmin-doc/images/reverse_proxy.png deleted file mode 100644 index 9989f47..0000000 Binary files a/sysadmin-doc/images/reverse_proxy.png and /dev/null differ diff --git a/sysadmin-doc/images/saas.png b/sysadmin-doc/images/saas.png deleted file mode 100644 index e15f86a..0000000 Binary files a/sysadmin-doc/images/saas.png and /dev/null differ diff --git a/sysadmin-doc/images/saas.svg b/sysadmin-doc/images/saas.svg deleted file mode 100644 index 42f0588..0000000 --- a/sysadmin-doc/images/saas.svg +++ /dev/null @@ -1,2645 +0,0 @@ - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - hobo - - - - - - - fargo - - - - - - - - - - - - - - chrono - - - - - - - etc. - - - - - - - PostgreSQLmaster - - - - - - - PostgreSQLstandby - - - - - - - - - - - - - - SAN ZFS NFSv3 [via vRack] - - - - - - - authentic - - - - - - - combo - - - - - - - w.c.s. - - - - - - - passerelle - - - - - - - - AMQP - - - - - - - BackupsBackuppc - - - - - - - LogsGraylog - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Containers - - - - - - - diff --git a/sysadmin-doc/images/schema.png b/sysadmin-doc/images/schema.png deleted file mode 100644 index 63da7a8..0000000 Binary files a/sysadmin-doc/images/schema.png and /dev/null differ diff --git a/sysadmin-doc/images/schema.svg b/sysadmin-doc/images/schema.svg deleted file mode 100644 index 4f54592..0000000 --- a/sysadmin-doc/images/schema.svg +++ /dev/null @@ -1,1729 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HTTPS - - - - - - SSL / SNIopenssl - - - - - - frontal http : nginx - - - - - - - Interface wsgiuWSGI - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Application - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - requests - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - celery - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - email - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ORM + tenant-schema - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Middlewares Django - - - - - - SAML - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - mellon - - - - - - graylogsyslog - - - - - - - - - - - - - - - - - - - - - - appelswebservices - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AMQP - - - - - - - - - - - - - - SMTP - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - managecommandeshobo - - - - - - notificationsprovisionningdéploiement - - - - - - - - - - - - - - - - - - - - - tenant 1 = schema 1 - - - - - - tenant 2 = schema 2 - - - - - - tenant 3 = schema 3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PostgreSQL - - - - - - - diff --git a/sysadmin-doc/index.rst b/sysadmin-doc/index.rst deleted file mode 100644 index 92cda17..0000000 --- a/sysadmin-doc/index.rst +++ /dev/null @@ -1,33 +0,0 @@ -.. Infrastructure de Publik documentation master file, created by - sphinx-quickstart on Mon Oct 30 17:41:53 2017. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Guide de déploiement -==================== - -Architecture ------------- - -.. toctree:: - :maxdepth: 1 - -Installation ------------- - -.. toctree:: - :maxdepth: 1 - - -Exploitation ------------- - -.. toctree:: - :maxdepth: 1 - - - -.. image:: images/logo.png - :alt: logo Publik - -Le dépot des sources de ce document : https://repos.entrouvert.org/publik-infra.git/ diff --git a/sysadmin-doc/installation-1.md b/sysadmin-doc/installation-1.md deleted file mode 100644 index c64cf59..0000000 --- a/sysadmin-doc/installation-1.md +++ /dev/null @@ -1,5 +0,0 @@ -# Procédure d’installation - -Ce document présente l’installation d’un système Publik standard. Des -adaptations sont naturellement à envisager en fonction des besoins -particuliers. diff --git a/sysadmin-doc/installation-2.md b/sysadmin-doc/installation-2.md deleted file mode 100644 index 80c8f7e..0000000 --- a/sysadmin-doc/installation-2.md +++ /dev/null @@ -1,115 +0,0 @@ -# Prérequis d'infrastructure - -## Machine hôte - -Les ressources nécessaires varient en fonction de la quantité de données à -traiter. Une installation de développement peut aisément tenir sur une machine -virtuelle. - -Par exemple, voici les ressources d'une machine applicative standard: - - * CPU 4 cœurs - * 16 Go de mémoire vive - * 200 Go d'espace disque - * Debian 10 installé en architecture amd64 (installation minimale) - -Les briques w.c.s. (formulaires) et fargo (porte-documents) doivent disposer -d’un volume plus important pour gérer les documents des usagers. Ceux-ci sont -stockés sur le système de fichier, son volume est donc à évaluer en fonction de -l’usage prévu. - -## Réseau - -Les ports réseaux suivants doivent être ouverts, sans filtre (très important!) et sans proxy: - - * en entrée: - * SSH (22/tcp) - * HTTPS (443/tcp) - * AMQP (5671/tcp) (au cas où les applicatifs sont répartis sur plusieurs machines) - - * en sortie: - * SMTP (25/tcp) - * DNS (53/udp et 53/tcp) - * HTTP et HTTPS (80/tcp et 443/tcp) - * PostgreSQL (5432/tcp) - * LDAP (389/tcp et 636/TCP) - * AMQP (5671/tcp) (au cas où les applicatifs sont répartis sur plusieurs machines) - -## Certificat X509 - -Publik utilise le protocole de transport chiffré HTTPS. - -Un ou plusieurs certificats x509 valides et reconnus sont requis; ceux-ci -doivent couvrir tous les noms des briques qui seront installées. Pratiquement -un certificat *wildcard* suffit générallement. (un certificat wildcard couvrant -\*.demarches.macollectivite.fr et demarches.collectivite.fr) L’utilisation de -certificats Letsencrypt est possible et encouragée. - -Dans la suite de la documentation nous considérons qu'un certificat est -disponible via les fichiers suivants: - - * clé publique certifiée : /etc/ssl/certs/cert-example.pem - * clé privée : /etc/ssl/private/cert-example.key - -## Résolution de noms - -Avant l'installation de Publik il faut vérifier que les enregistrements -DNS sont fonctionnels; Publik nécessite autant de domaines que de -composants. - -Typiquement : - -- portail usager (composant combo) : - moncompte.macollectivite.fr, -- portail agents (composant combo) : - agents-moncompte.macollectivite.fr, -- démarches (composant wcs/wcs-au-quotidien) : - demarches-moncompte.macollectivite.fr, -- fournisseur d'identités (composant authentic) : - connexion-moncompte.macollectivite.fr, -- hub de webservice (composant passerelle) : - passerelle-moncompte.macollectivite.fr, -- porte document (composant fargo) : - portedoc-moncompte.macollectivite.fr, - -Par exemple voici à quoi pourraient ressembler les entrées d'un serveur Bind: - - 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) - -Toutes ces entrées DNS doivent pointer vers le proxy de répartition de charge -(dans le cas d'une installation avec répartition de charge). - -Par ailleurs, les serveurs applicatifs doivent impérativement avoir un -fichier */etc/hosts* consistant. - -D'avantage de détails sur les sous-domaines à configurer peuvent être consultés sur https://dev.entrouvert.org/projects/publik/wiki/URL/ . - - -## Horloges synchronisées - -Il est indispensable que les machines soient exactement à la même -heure. Les systèmes récent utilisent *systemd-timesyncd *par défaut. -*Ntp* est également possible. - -## Envois des emails - -Les serveurs applicatifs doivent disposer d'un MTA local (par exemple -*exim4-daemon-light*) avec le port SMTP ouvert et capable d'expédier des mails -vers tout Internet, en passant éventuellement par un relais. Les mails seront -envoyés avec le domaine « @macollectivite.fr ». Nous recommandons -vivement de les relayer via un smarthost officiel de votre réseau. - -Pour d'avantage de détails sur l'envoi de courriel se référrer à https://dev.entrouvert.org/projects/publik/wiki/Envois_de_courriels . - -## Configuration de la localisation - -Sur toutes les machines il est nécessaire de reconfigurer la locale utilisée -par défault pour utiliser *fr_FR.UTF-8*: - - dpkg-reconfigure locales diff --git a/sysadmin-doc/installation-3.md b/sysadmin-doc/installation-3.md deleted file mode 100644 index 2b2d5bd..0000000 --- a/sysadmin-doc/installation-3.md +++ /dev/null @@ -1,51 +0,0 @@ -# Configuration des dépôts logiciels - -## Vue générale - -Les différents composants logiciels utilisés par Publik proviennent, par -ordre de préférence : - -- de la distribution Debian GNU/Linux 10 (« buster ») -- des *backports* officiels Debian, disposant du suivi de sécurité par - l’équipe Debian, -- des paquets Debian fournis et maintenus par les projets *upstream,* -- de paquets Debian maintenus par Entr’ouvert qui en assure le suivi - de sécurité. - -## Configuration des dépôts logiciels - -Configurons le dépôt **buster-backports** : - - echo 'deb http://deb.debian.org/debian/ buster-backports main' > /etc/apt/sources.list.d/backports.list - -Ajoutons aussi les dépôts Entr'ouvert: - - echo 'deb http://deb.entrouvert.org/ buster main' > /etc/apt/sources.list.d/entrouvert.list - -Ajoutons la clé associée : - - curl https://deb.entrouvert.org/entrouvert.gpg | sudo tee -a /etc/apt/trusted.gpg.d/entrouvert.gpg - apt update - -Nous installons ensuite les configuration particulières de apt : - - apt install -o Dpkg::Options::="--force-confnew" entrouvert-repository - apt install entrouvert-repository-hotfix - apt update - -## Installation des paquets de base - -Outillage utile pour l'installation et plus tard pour le support et la maintenance : - - apt install postgresql-client # pour création utilisateurs et bases de données dans postgresql - apt install bsd-mailx # pour test de l'envoi de mails - apt install zip # pour la création du squelette de site w.c.s. - apt install curl wget # pour les tests/debug locaux - apt install ltrace strace psmisc tcpdump tshark # pour des debug applicatifs - apt install ca-certificates-entrouvert # connexion au LDAP EO - -Composants additionnels nécessaires pour les applications : - - apt install libreoffice # pour génération de documents dans wcs - apt install publik-base-theme # système de thème - apt install publik-common # outils de gestion diff --git a/sysadmin-doc/installation-4.md b/sysadmin-doc/installation-4.md deleted file mode 100644 index f9b9d15..0000000 --- a/sysadmin-doc/installation-4.md +++ /dev/null @@ -1,71 +0,0 @@ -# Création des bases de données - -## Vue générale - -Chaque brique utilise une ou plusieurs bases de données PostgreSQL. Il -est courant d’utiliser une installation à deux machines identiques en -master/slave. Publik peut utiliser un système PostgreSQL existant, le -cas échéant. Publik nécessite PostgreSQL version 9.6 ou supérieure. - -## Installation de PostgreSQL - -Vérifier que les extensions PostgreSQL est installé : - - apt install postgresql - -## Création automatisée des bases de données - -Nous proposons un script pour la création des bases de données (distribué via le -paquet publik-common), l'utilisation standard s'adresse à un cluster postgresql -local : - - publik-create-databases - -## Création manuelle des bases - -Chaque composant Publik doit disposer : - -- d'une base de données dédiée, -- d'un accès spécifique à cette base via un usager postgreSQL dédié - (avec un mot de passe SQL à créer pour chaque composant). - -Principe pour le composant *combo :* - - CREATE USER combo PASSWORD 'indiquer-ici-le-mot-de-passe-pour-combo'; - - CREATE DATABASE combo WITH OWNER = combo TEMPLATE = template0 LC_COLLATE = 'fr_FR.UTF-8' LC_CTYPE = 'fr_FR.UTF-8'; - -Remarques : - -- *template0* et *LC_COLLATE* et *LC_CTYPE* nécessaires parce que template1 est en en_US.UTF-8. -- pour le module authentic2-multitenant, le nom du rôle est *authentic-multitenant* et le nom de la base est *authentic2_multitenant* (adaptez les commandes précitées comme suit : ``CREATE USER "authentic-multitenant"...``) - -La même opération doit être répétée pour chaque brique logicielle (bien sûr à -chaque fois il faut **noter le mot de passe** choisi, il sera nécessaire par la -suite) : - -- Combo -- Hobo -- Authentic -- Passerelle -- Fargo -- Bijoe -- Chrono - -Pour étendre les possibilités de recherche plein texte, il est également utile -d'activer l'extension « unaccent » dans la base de données Combo : - - CREATE EXTENSION unaccent; - -Sur la base de données authentic, activer les extensions suivantes : - - CREATE EXTENSION unaccent; - CREATE EXTENSION pg_trgm; - -Une brique est spécifique : w.c.s.. Pour w.c.s., il n'y a pas besoin de -création d'une base, elle sera effectuée lors de l'instanciation. En -revanche, l'utilisateur w.c.s. sur PostgreSQL doit avoir le droit -CREATEDB, donc : - -*CREATE USER wcs PASSWORD 'indiquer-ici-le-mot-de-passe-pour-wcs' -CREATEDB;* diff --git a/sysadmin-doc/installation-5.md b/sysadmin-doc/installation-5.md deleted file mode 100644 index c02571d..0000000 --- a/sysadmin-doc/installation-5.md +++ /dev/null @@ -1,520 +0,0 @@ -# Installation des composants - -Publik est la somme de plusieurs composants qui communiquent entre eux -via messages et webservices. Chaque composant est un paquet Debian qui -s'installe depuis de dépôt Entr'ouvert. - - -## Installation PostgreSQL - -Lors de leur installation les briques s’attendent à trouver un service -PostgreSQL fonctionnel, la configuration par défaut utilise un serveur -local, dont l’installation a été vue dans la section précédente. - - -Vérifier que le service tourne : - - # systemctl status postgresql@11-main.service - ● postgresql@11-main.service - PostgreSQL Cluster 11-main - Loaded: loaded (/lib/systemd/system/postgresql@.service; enabled-runtime; vendor preset: enabled) - Active: active (running) since Tue 2021-01-12 16:01:30 CET; 7min ago - Main PID: 22215 (postgres) - Tasks: 7 (limit: 19660) - Memory: 100.2M - CGroup: /system.slice/system-postgresql.slice/postgresql@11-main.service - ├─22215 /usr/lib/postgresql/11/bin/postgres -D […] - ├─… - - -## Installation RabbitMQ - -RabbitMQ sera utilisé uniquement en local (127.0.0.1) et n’a besoin -d’aucune configuration particulière. - - # apt install rabbitmq-server - -Il est utile ensuite de vérifier que le service tourne : - - # systemctl status rabbitmq-server - ● rabbitmq-server.service - RabbitMQ broker - Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled) - Active: active (running) since lun. 2017-07-17 10:09:57 CEST; 4 days ago - Main PID: 580 (beam.smp) - Status: "Initialized" - - CGroup: /system.slice/rabbitmq-server.service - ├─ 580 /usr/lib/erlang/erts-6.2/bin/beam.smp [...] - ├─ 897 /usr/lib/erlang/erts-6.2/bin/epmd -daemon - ├─1780 inet_gethost 4 - └─1781 inet_gethost 4 - -Et que les journaux ne contiennent pas d’erreurs, ils doivent ressembler à : - - # journalctl -u rabbitmq-server.service - - -- Logs begin at lun. 2017-07-17 10:09:46 CEST, end at ven. 2017-07-21 19:55:37 CEST. -- - - juil. 17 10:09:50 web1-preprod systemd[1]: Starting RabbitMQ broker... - juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: RabbitMQ 3.6.10. Copyright (C) 2007-2017 Pivotal Software, Inc. - juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: ## ## Licensed under the MPL. See http://www.rabbitmq.com/ - juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: ## ## - juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: ########## Logs: /var/log/rabbitmq/rabbit@web1-preprod.log - juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: ###### ## /var/log/rabbitmq/rabbit@web1-preprod-sasl.log - juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: ########## - juil. 17 10:09:54 web1-preprod rabbitmq-server[580]: Starting broker... - juil. 17 10:09:57 web1-preprod rabbitmq-server[580]: systemd unit for activation check: "rabbitmq-server.service" - juil. 17 10:09:57 web1-preprod systemd[1]: Started RabbitMQ broker. - juil. 17 10:09:57 web1-preprod rabbitmq-server[580]: completed with 0 plugins. - - -## Installation Combo - -Dans */etc/combo/settings.d/database.py* nous renseignons éventuellement les -paramètres de connexion particuliers, par exemple le mot de passe ajouté à -l'étape de création manuelle des bases : - - DATABASES['default']['PASSWORD'] = "foobar" - -Dans */etc/combo/settings.d/macollectivite.py*, -nous configurons l'envoi des traces d'erreur par l'ajout de ces lignes -en fin de fichier : - - ADMINS = (('Admin EO', 'admin+prod.macollectivite.combo@entrouvert.com'),) - EMAIL_SUBJECT_PREFIX = '[prod macollectivite combo] ' - SERVER_EMAIL = 'admin+prod.macollectivite.passerelle@entrouvert.com' - -On installe ensuite le logiciel *combo* : - - # apt install combo - -Vérification avec *systemctl status combo* : - - # systemctl status combo - ● combo.service - Combo - Loaded: loaded (/lib/systemd/system/combo.service; enabled) - Active: active (running) since jeu. 2019-07-20 13:33:44 CEST; 19h ago - Process: 16317 ExecStartPre=/usr/bin/combo-manage collectstatic --noinput (code=exited, status=0/SUCCESS) - Process: 16319 ExecStartPre=/usr/bin/combo-manage migrate_schemas --noinput (code=exited, status=0/SUCCESS) - Main PID: 16324 (uwsgi) - Status: "uWSGI is ready" - CGroup: /system.slice/combo.service - ├─16429 combo uWSGI worker 1 - ├─16434 combo uWSGI worker 5 - ├─16436 combo uWSGI worker 3 - ├─16483 combo uWSGI worker 2 - ├─16421 combo uWSGI worker 4 - └─16324 combo uWSGI master - -## Installation Passerelle - -La procédure est la même que pour Combo. - -Dans */etc/combo/settings.d/database.py* nous renseignons éventuellement les -paramètres de connexion particuliers. - -Dans */etc/passerelle/settings.d/macollectivite.py*, -configuration pour l'envoi des traces d'erreur par l'ajout de ces lignes -en fin de fichier : - - ADMINS = (('Admin EO', 'admin+prod.macollectivite.passerelle@entrouvert.com'),) - EMAIL_SUBJECT_PREFIX = '[prod macollectivite passerelle] ' - SERVER_EMAIL = 'admin+prod.macollectivite.passerelle@entrouvert.com' - -Nous pouvons ensuite installer le composant : - - # apt install passerelle - -Et vérification avec *systemctl is-active passerelle* qui doit montrer -«active» - -## Installation Fargo - -Reprendre la même procédure que pour les autres composants, en adaptant -le nom de la brique, c'est-à-dire : - -1. Éventuelle configuration des accès base de données -2. Configuration du mail dans */etc/fargo/settings.d/macollectivite.py* -3. Installation du composant : - - # apt install fargo - -4. Vérification avec *systemctl is-active fargo* qui doit retourner « active » - -## Installation Hobo serveur - -Reprendre la même procédure que pour les autres composants, en adaptant -le nom de la brique, c'est-à-dire : - -1. Éventuelle configuration des accès base de données -2. Configuration du mail dans */etc/hobo/settings.d/macollectivite.py* -3. Installation du composant : - - # apt install hobo - -4. Vérification avec *systemctl is-active hobo* qui doit retourner « active » - -## Installation Hobo agent - -Il s'agit d'un composant qui va écouter les ordres de déploiement (ou -provisionning) envoyés par le serveur Hobo et les exécuter sur les -autres composants. - -Installation : - - # apt install hobo-agent - -Ce démon est piloté par supervisor, ce dernier a parfois du mal à se -lancer dès la première installation. On remet donc tout à plat avec : - - systemctl stop supervisor - systemctl start supervisor - -Et on vérifie que hobo-agent est bien lancé par supervisor : - - # systemctl status supervisor - ● supervisor.service - LSB: Start/stop supervisor - Loaded: loaded (/etc/init.d/supervisor) - Active: active (running) since lun. 2017-07-17 10:09:52 CEST; 4 days ago - CGroup: /system.slice/supervisor.service - ├─1065 /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf - ├─1208 python2.7 /usr/bin/celery worker --hostname=agent.%h --app=hobo.agent.worker --loglevel=INFO --concurrency=1 - └─1494 python2.7 /usr/bin/celery worker --hostname=agent.%h --app=hobo.agent.worker --loglevel=INFO --concurrency=1 - -## Installation Authentic - -Le système Authentic, un peu plus ancien que les autres composants, ne -suit pas exactement les mêmes principes et les mêmes nommages. - -Le nom du paquet à installer est *authentic2-multitenant* : - - # apt install authentic2-multitenant - -En cas d’installation qui ne suivrait pas le schéma standard de -*publik-create-databases* il faut préciser le nom de la base de données, par -exemple dans */etc/authentic2-multitenant/settings.d/database.py* : - - DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'NAME': 'authentic2_multitenant', - } - } - -Dans */etc/authentic2-multitenant/settings.d/macollectivite.py*, la -configuration mail : - - ADMINS = (('Admin EO', 'admin+prod.macollectivite.authentic@entrouvert.com'),) - EMAIL_SUBJECT_PREFIX = '[prod macollectivite authentic] ' - SERVER_EMAIL = 'admin+prod.macollectivite.authentic@entrouvert.com' - -Vérification avec *service authentic2-multitenant status* : - - # systemctl status authentic2-multitenant - ● authentic2-multitenant.service - Authentic 2 (multitenants) - Loaded: loaded (/lib/systemd/system/authentic2-multitenant.service; enabled; vendor preset: enabled) - Active: active (running) since Fri 2021-02-19 08:49:27 CET; 2 days ago - Main PID: 11591 (uwsgi) - Status: "uWSGI is ready" - CGroup: /system.slice/authentic2-multitenant.service - ├─ 9944 authentic2-multitenant uWSGI worker 6 - ├─ 9946 authentic2-multitenant uWSGI worker 7 - ├─ 9949 authentic2-multitenant uWSGI worker 8 - ├─ 9950 authentic2-multitenant uWSGI worker 9 - ├─11083 authentic2-multitenant uWSGI worker 10 - └─11591 authentic2-multitenant uWSGI master - -## Installation w.c.s. - -Comme noté précédemment le module w.c.s. est spécifique et n'a pas besoin de -configuration initiale pour configurer ses mails, il y a donc -simplement deux étapes : - -1. Installation du composant : - - # apt install wcs wcs-au-quotidien - -2. Vérification avec *systemctl is-active wcs* qui doit retourner « active » - - - -## Installation de Nginx - - # apt install nginx - -... rien de plus. Nous installons la version de Debian 10. - -## Configuration de base - -L’installation de publik-commonn aura mis en place la configuration pour un -format de log nginx avancé (qui affiche le tenant) dans -*/etc/nginx/conf.d/log_formats.conf* : - - # /etc/nginx/conf.d/log_formats.conf - - log_format combined_full '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$host" [$request_time ms]'; - - log_format with_request_time '$remote_addr - $remote_user [$time_local] [$request_time ms] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"'; - -Ainsi qu'un fichier */etc/nginx/conf.d/client-max-body-size.conf* pour -contrôler la taille maximale des fichiers téléversables : - - client_max_body_size 200M; - -Dans les installations où un serveur HAProxy serait posé en amont, il faudra -adapter la configuration de celui-ci pour correspondre. - - -## Mise en place des virtualhost (frontaux HTTP des tenants des composants Publik) - -Le soin est laissé à l'installateur de décider comment poser les -virtualhost ci-dessous dans nginx. - -Au niveau de la preprod, le modèle classique a été adopté : - -- un fichier par virtualhost dans */etc/nginx/sites-available/* -- des liens symboliques dans */etc/nginx/sites-enabled/* avec un - préfixe *10_* permettant un éventuel classement d'autres services - avant ou après. -- la terminaison SSL est assurée en amont et le traffic parvient - non-chiffré à nginx. - -A noter que **ces fichiers **N**ginx de la **plate-forme de -**pré-prod**uction** peuvent être copiés** pour la plate-forme de -production, il faudra cependant veiller à la modification du -server_name du portail usagers dans le virtualhost "combo". - -Des fichiers type sont distribués dans le paquet *publik-common*, dans -le répertoire */usr/share/doc/publik-common/nginx/sites-available/*. Ils -peuvent être directement copiés dans */etc/nginx/sites-available/*. - -### Combo - - server { - listen 80; - server_name ~^moncompte.*; # portail usagers ; selon le nom du site - # (attention, différent de la pré-prod) - ~^agents-.*; # portail agents ; selon le nom du site - - access_log /var/log/nginx/combo-access.log combined_full; - error_log /var/log/nginx/combo-error.log; - - location ~ ^/static/(.+)$ { - root /; - try_files /var/lib/combo/tenants/$host/static/$1 - /var/lib/combo/tenants/$host/theme/static/$1 - /var/lib/combo/collectstatic/$1 - =404; - add_header Access-Control-Allow-Origin *; - } - - location ~ ^/media/(.+)$ { - alias /var/lib/combo/tenants/$host/media/$1; - } - - location / { - proxy_pass http://unix:/run/combo/combo.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; - } - } - -### Hobo - -Même modèle que Combo : - - server { - listen 80; - - server_name ~^hobo-.*; - - access_log /var/log/nginx/hobo-access.log combined_full; - error_log /var/log/nginx/hobo-error.log; - - location ~ ^/static/(.+)$ { - root /; - try_files /var/lib/hobo/tenants/$host/static/$1 - /var/lib/hobo/tenants/$host/theme/static/$1 - /var/lib/hobo/collectstatic/$1 - =404; - add_header Access-Control-Allow-Origin *; - } - - location ~ ^/media/(.+)$ { - alias /var/lib/hobo/tenants/$host/media/$1; - } - - location / { - proxy_pass http://unix:/run/hobo/hobo.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; - } - - } - -### Passerelle - -Même modèle que Combo, mais aucune diffusion de /media (il s'agit de -données privées dans Passerelle). - - server { - listen 80; - - server_name ~^passerelle-.*; - - access_log /var/log/nginx/passerelle-access.log combined_full; - error_log /var/log/nginx/passerelle-error.log; - - location ~ ^/static/(.+)$ { - root /; - try_files /var/lib/passerelle/tenants/$host/static/$1 - /var/lib/passerelle/tenants/$host/theme/static/$1 - /var/lib/passerelle/collectstatic/$1 - =404; - add_header Access-Control-Allow-Origin *; - } - - location / { - proxy_pass http://unix:/run/passerelle/passerelle.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; - } - } - -### Fargo - -Même modèle que Combo, mais aucune diffusion de /media (il s'agit des -fichiers usagers privés dans Fargo). - - server { - listen 80; - - server_name ~^portedoc-.*; - - access_log /var/log/nginx/fargo-access.log combined_full; - error_log /var/log/nginx/fargo-error.log; - - location ~ ^/static/(.+)$ { - root /; - try_files /var/lib/fargo/tenants/$host/static/$1 - /var/lib/fargo/tenants/$host/theme/static/$1 - /var/lib/fargo/collectstatic/$1 - =404; - add_header Access-Control-Allow-Origin *; - } - - location / { - proxy_pass http://unix:/run/fargo/fargo.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; - } - - } - -### Authentic - -Comme Combo, sans diffusion des /media, et en utilisant le nom du -service *authentic2-multitenant.* - - server { - listen 80; - - server_name ~^connexion-.*; - - access_log /var/log/nginx/authentic2-multitenant-access.log combined_full; - error_log /var/log/nginx/authentic2-multitenant-error.log; - - location ~ ^/static/(.+)$ { - root /; - try_files /var/lib/authentic2-multitenant/tenants/$host/static/$1 - /var/lib/authentic2-multitenant/tenants/$host/theme/static/$1 - /var/lib/authentic2-multitenant/collectstatic/$1 - =404; - add_header Access-Control-Allow-Origin *; - } - - location / { - proxy_pass http://unix:/run/authentic2-multitenant/authentic2-multitenant.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; - } - } - -### w.c.s. - - server { - - listen 80; - - server_name ~^demarches-.*; - - access_log /var/log/nginx/wcs-access.log combined_full; - error_log /var/log/nginx/wcs-error.log; - - location ~ ^/static/(.+)$ { - root /; - try_files /var/lib/wcs/tenants/$host/static/$1 - /var/lib/wcs/tenants/$host/theme/static/$1 - /var/lib/wcs/$host/static/$1 - /var/lib/wcs/$host/theme/static/$1 - /var/lib/wcs/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/tenants/$host$uri - /var/lib/wcs/$host$uri - /usr/share/wcs/$uri - =404; - } - - location / { - proxy_pass http://unix:/var/run/wcs/wcs.sock; - proxy_set_header Host $http_host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-SSL on; - proxy_set_header X-Forwarded-Protocol ssl; - proxy_set_header X-Forwarded-Proto https; - } - } - -## Vérification des réponses de Nginx - -Une fois les virtualhost en place, les sites doivent répondre par des -erreurs 404 : ce sont les applications de Publik qui répondent qu'elles -n'ont pas encore d'instance liés aux noms prévus. - -C'est tout de même déjà le temps de vérifier : - -- que les certificats HTTPS sont ok, -- que haproxy envoie bien sur web1 (si vous l'avez déjà installé), -- que les requêtes arrivent sur les bons virtualhost, par exemple pour - fargo on vérifiera que l'accès à - [https://portedoc-moncompte.macollectivite.fr](https://portedoc-moncompte.macollectivite.fr/) - provoque une 404 dans */var/log/nginx/fargo-access.log* et aucun - message dans */var/log/nginx/fargo-error.log* ; opération à répéter - avec tous les autres sites installés. diff --git a/sysadmin-doc/installation-6.md b/sysadmin-doc/installation-6.md deleted file mode 100644 index e2bcdc4..0000000 --- a/sysadmin-doc/installation-6.md +++ /dev/null @@ -1,272 +0,0 @@ -# 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. - -## 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", - "fargo": "portedoc-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-fargo": { - "url": "https://${fargo}/", - "title": "Porte-documents" - }}, - {"create-passerelle": { - "url": "https://${passerelle}/", - "title": "Passerelle" - }}, - {"set-theme": { - "theme": "publik" - }} - ] - } - -Le fichier de déploiement ci-dessus 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 peut être obtenu à partir d‘un export de site (dans l‘IHM : *Paramètres >> Export*). -Alternativement il peut-être créé manuellement : le zip doit contenir un fichier *site-options.cfg* et un fichier *config.json*, voir les exemples ci-dessous. - -Pour *config.json* : - - { - "branding": { - "theme": "clapotis-les-canards" - }, - "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] - postgresql = true - default-to-global-view = true - workflow-global-actions = true - workflow-criticality-levels = true - workflow-resubmit-action = false - workflow-functions-only = true - formdef-captcha-option = false - default_position = 48.8336428;2.3233045 - -## 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 fargo fargo 107 Jul 10 18:19 /var/lib/fargo/tenants/portedoc-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 - -w.c.s. créé directement une base de données -*wcs_demarches_moncompte_macollectivite_fr* -accompagnée de son dossier dans */var/lib/wcs* - - # ls -ld /var/lib/wcs/* - drwxr-xr-x 7 root root 66 Apr 13 15:55 /var/lib/wcs/collectstatic - -rw------- 1 root root 50 Apr 13 15:55 /var/lib/wcs/config.pck - drwxr-xr-x 22 wcs wcs 4096 Jul 10 18:19 /var/lib/wcs/demarches-preprod-moncompte.macollectivite.fr - drwxr-xr-x 2 root root 47 Apr 13 15:59 /var/lib/wcs/skeleton.invalid - drwxr-xr-x 2 root root 23 Apr 13 16:00 /var/lib/wcs/skeletons - -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://portedoc-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 gestion des identités - -### Configuration de l'authentification LDAP - -Création d'un fichier -*/var/lib/authentic2-multitenant/tenants/connexion-moncompte.macollectivite.fr/settings.json.* - - { - "ACCOUNT_ACTIVATION_DAYS": 1, - "PASSWORD_RESET_TIMEOUT_DAYS": 1, - "A2_REGISTRATION_EMAIL_IS_UNIQUE": true, - "A2_EMAIL_IS_UNIQUE": true, - "LDAP_AUTH_SETTINGS": [ - { - "realm": "mairie-macollectivite.fr", - "url": ["ldap://v-dc1.vnan.intra/", "ldap://v-dc2.vnan.intra/"], - "basedn": "OU=macollectivite,DC=vnan,DC=intra", - "binddn": "xxxxx@vnan.intra", - "bindpw": "xxxxx", - "user_filter": "(&(objectClass=user)(sAMAccountType=805306368)(|(mail=%s)(samaccountname=%s))(|(memberOf=CN=.LD_Agents_BO,OU=macollectivite,DC=vnan,DC=intra)(memberOf=CN=.LD_Agents_Publik,OU=macollectivite,DC=vnan,DC=intra)))", - "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 - } - ] - } - -Lancer un import manuel des comptes (pour ne pas attendre le cron) -avec : - - # sudo -u authentic-multitenant authentic2-multitenant-manage tenant_command sync-ldap-users -d connexion-moncompte.macollectivite.fr - -Cette commande ne doit rien afficher (ce qui signifie que tout s'est -bien déroulé), les comptes doivent être visibles dans -[https://connexion-moncompte.macollectivite.fr/manage/users/](https://connexion-moncompte.macollectivite.fr/manage/users/) - -### 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-rôle1", "slug-du-rôle2"]] - -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": ["ldap://v-dc1.vnan.intra/", "ldap://v-dc2.vnan.intra/"], - "basedn": "OU=macollectivite,DC=vnan,DC=intra", - "binddn": "xxxxx@vnan.intra", - "bindpw": "xxxxx", - "user_filter": "(&(objectClass=user)(sAMAccountType=805306368)(|(mail=%s)(samaccountname=%s))(|(memberOf=CN=.LD_Agents_BO,OU=macollectivite,DC=vnan,DC=intra)(memberOf=CN=.LD_Agents_Publik,OU=macollectivite,DC=vnan,DC=intra)))", - "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"]], - ] - } - ] - } diff --git a/sysadmin-doc/installation-7.md b/sysadmin-doc/installation-7.md deleted file mode 100644 index b1524c2..0000000 --- a/sysadmin-doc/installation-7.md +++ /dev/null @@ -1,255 +0,0 @@ -# Haute disponiblité - -Ce chapitre présente des moyens permettant d'ajouter de la redondance en vue de -garantir la disponibilité d'une installation de Publik. La charge des -opérations est dès lors répartie sur plusieurs machines; et le service est -maintenu en cas de panne d'un des composants. - -## Pré-requis - -Se référer aux pré-requis généraux, avec les -différences suivantes: - - * 2 machines hôtes identiques (ici nommées *web1* et *web2*) disposant des - ressources suivantes: - - * CPU 8 cœurs - * 32Go de mémoire vive - * 100Go d'espace disque - * Debian 10 installé en architecture amd64 (installation minimale) - - * un service frontal HAProxy (géré par le client) - * un service de base de données PostgreSQL disposant de 200Go d'espace (cluster - géré par le client) - * un service de partage de fichiers NFS disposant de 200Go d'espace (cluster - géré par le client) - -## Installation des composants - -### Création des utilisateurs avec UID identiques sur web1 et web2 - -Lors de partage de fichiers sur un réseau (NFS par exemple), il faut que les -UID des utilisateurs Unix concernés soient les mêmes sur les deux machines web1 -et web2. - -Nous fournissons un script pour faire cela : - - publik-create-users - -Alternativement vous pouvez utiliser : - - #!/bin/sh - - uid=2102 - - for user in hobo authentic-multitenant wcs passerelle combo fargo chrono bijoe - do - echo "create group $user ($uid)" - addgroup --system --gid $uid $user - echo "create user $user ($uid)" - adduser --disabled-password --system --uid $uid --gecos "$user daemon" --ingroup $user --no-create-home --home /var/lib/$user $user - uid=$(($uid+1)) - done - -Résultat dans /etc/passwd: - - hobo:x:2102:2102:hobo daemon,,,:/var/lib/hobo:/bin/false - authentic-multitenant:x:2103:2103:authentic2-multitenant daemon,,,:/var/lib/authentic2-multitenant:/bin/false - wcs:x:2104:2104:wcs daemon,,,:/var/lib/wcs:/bin/false - passerelle:x:2105:2105:passerelle daemon,,,:/var/lib/passerelle:/bin/false - combo:x:2106:2106:combo daemon,,,:/var/lib/combo:/bin/false - fargo:x:2107:2107:fargo daemon,,,:/var/lib/fargo:/bin/false - chrono:x:2109:2109:chrono daemon,,,:/var/lib/chrono:/bin/false - bijoe:x:2110:2110:bijoe daemon,,,:/var/lib/bijoe:/bin/false - - -### Vue générale - -Avant l'installation des modules, il faut pour chacun d'eux (sauf w.c.s.) -configurer l'accès au PostgreSQL; par exemple, dans -*/etc/combo/settings.d/macollectivite.py* : - - DATABASES['default']['NAME'] = 'combo' - DATABASES['default']['USER'] = 'combo' - DATABASES['default']['PASSWORD'] = 'indiquer-ici-le-mot-de-passe-pour-combo' - DATABASES['default']['HOST'] = 'sql-prod' - DATABASES['default']['PORT'] = '5432' - -Suivre ensuite les instructions pour une installation mono-machine. Ensuite -déplacer les éléments de configuration vers le partage de fichiers : - - * les répertoires de configuration `/etc/xxx` des composants Publik, - copiés vers `/srv/nfs/publik/etc/xxx,` - * les données `/var/lib/xxx` de ces mêmes composants, copiés vers - `/srv/nfs/publik/var/lib/xxx,` - * la configuration nginx ; copiés vers `/srv/nfs/publik/etc/nginx/xxx` - et `/srv/nfs/publik/var/www/html`. - -Sur *web1* et *web2* nous pointons les fichiers partagés à l'aide de liens -symboliques : - - * Configuration : `/etc/xxx` → `/srv/nfs/publik/etc/xxx,` - * Données : `/var/lib/xxx` → `/srv/nfs/publik/var/lib/xxx,` - * Configuration nginx. - -### Détail des opérations - -Création des répertoires partagés : - - * Configuration: `/srv/nfs/publik/etc`, - * Données des tenants: `/srv/nfs/publik/var/lib/` - * Données statiques: `/srv/nfs/publik/var/www/` - -Déplacement des configurations et données des services Publik: - -1. Service *wcs* - - service wcs stop - mv /etc/wcs /srv/nfs/publik/etc/ - ln -sf /srv/nfs/publik/etc/wcs /etc/wcs - mv /var/lib/wcs /srv/nfs/publik/var/lib/ - ln -sf /srv/nfs/publik/var/lib/wcs /var/lib/wcs - service wcs start - -2. Service *combo* - - service combo stop - mv /etc/combo /srv/nfs/publik/etc/ - ln -sf /srv/nfs/publik/etc/combo /etc/combo - mv /var/lib/combo /srv/nfs/publik/var/lib/ - ln -sf /srv/nfs/publik/var/lib/combo /var/lib/combo - service combo start - -3. Même procédure avec *fargo* -4. Même procédure avec *passerelle* -5. Même procédure avec *hobo* -6. Même procédure avec *authentic2-multitenant* -7. Configuration hobo-agent - - service supervisor stop - mv /etc/hobo-agent /srv/nfs/publik/etc/ - ln -sf /srv/nfs/publik/etc/hobo-agent /etc - service supervisor start - -Autres partages via NFS : - -1. Configurations nginx - - service nginx stop - mkdir /srv/nfs/publik/etc/nginx - cd /etc/nginx - mv conf.d includes sites-available sites-enabled /srv/nfs/publik/etc/nginx/ - ln -sf /srv/nfs/publik/etc/nginx/* . - service nginx start - -2. Éléments web statiques - - cd /var/www - mv html /srv/nfs/publik/var/www/ - ln -sf /srv/nfs/publik/var/www/html . - -3. APT : dépôts et préférences backports - - mkdir /srv/nfs/publik/etc/apt - cd /etc/apt - mv sources.list.d preferences.d /srv/nfs/publik/etc/apt/ - ln -sf /srv/nfs/publik/etc/apt/* . - -### Opérations sur web2 - -**Attention** : l'UID et le GUID de l'utilisateur *www-data* doit être -identique. - -Préparer les répertoires de configuration et de données des composants -Publik **avant** leur installation : - -1. Service wcs - - ln -sf /srv/nfs/publik/etc/wcs /etc/wcs - ln -sf /srv/nfs/publik/var/lib/wcs /var/lib/wcs - -2. Service *combo* - - ln -sf /srv/nfs/publik/etc/combo /etc/combo - ln -sf /srv/nfs/publik/var/lib/combo /var/lib/combo - -3. Même procédure avec *fargo* -4. Même procédure avec *passerelle* -5. Même procédure avec *hobo* -6. Même procédure avec *authentic2-multitenant* -7. Configuration hobo-agent - - ln -sf /srv/nfs/publik/etc/hobo-agent /etc/hobo-agent - -Préparer la configuration des autres composants: - -1. Configurations nginx - - service nginx stop - cd /etc/nginx - rm -rf conf.d includes sites-available sites-enabled - ln -sf /srv/nfs/publik/etc/nginx/* . - service nginx start - -2. Éléments web statiques - - cd /var/www - rm -rf html - ln -sf /srv/nfs/publik/var/www/html . - -3. APT : dépôts et préférences backports - - cd /etc/apt - rm -rf sources.list.d preferences.d - ln -sf /srv/nfs/publik/etc/apt/* . - -Lancer l'installation des composants packagés. Attention, lors de cette étape, -toujours refuser les éventuelles demandes de modification des fichiers de -configuration (on utilise ceux partagés par NFS) : - - apt install wcs wcs-au-quotidien - apt install combo - apt install fargo - apt install passerelle - apt install hobo - apt install authentic2-multitenant - apt install hobo-agent - -Nous comparons la liste des paquets installés entre web1 et web2 -(obtenue avec *dpkg -l*), et installons les paquets suivants : - -- python-combo-plugin-macollectivite, -- publik-base-theme, -- gettext - -## Désactivation des *crons* Publik sur web2 - -Il est **très important** de désactiver les crons de Publik sur web2, -pour ne pas avoir de compétition/conflit avec ceux déjà en place sur -web1, puisqu'ils agissent sur les mêmes données. - -Il faut donc poser des # devant les lignes des crons suivants : - -- */etc/cron.d/wcs,* -- */etc/cron.d/authentic2-multitenant,* -- */etc/cron.d/passerelle,* -- */etc/cron.hourly/python-combo,* -- */etc/cron.hourly/fargo.* - -## Paramétrage du partage de fichiers - -Démarrer les services uniquement après le montage de /srv/nfs - -Ajouter pour les services liés à Publik un supplément -*RequiresMountsFor=* à la description du service - -Exemple pour Combo : - - cat /etc/systemd/system/combo.service.d/wait-for-mnt-data.conf - - [Unit] - - RequiresMountsFor=/srv/nfs - -Faire de même avec les services qui ont besoin de */srv/nfs* : Combo, - Fargo, Passerelle, authentic2-multitenant, hobo, hobo-agent, wcs. diff --git a/sysadmin-doc/tools/despan.py b/sysadmin-doc/tools/despan.py deleted file mode 100644 index dbe2079..0000000 --- a/sysadmin-doc/tools/despan.py +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env python - -""" -despan.py -Pandoc filter to convert all regular text to uppercase. -Code, link URLs, etc. are not affected. -""" - -from pandocfilters import Str, toJSONFilter - - -def despan(key, value, format, meta): - if key == 'Span': - return [] - - -if __name__ == "__main__": - toJSONFilter(despan) diff --git a/sysadmin-doc/tools/headers.py b/sysadmin-doc/tools/headers.py deleted file mode 100644 index 59c343f..0000000 --- a/sysadmin-doc/tools/headers.py +++ /dev/null @@ -1,17 +0,0 @@ -from panflute import * - - -def increase_header_level(elem, doc): - if type(elem) == Header: - if elem.level < 6: - elem.level += 1 - else: - return [] # Delete headers already in level 6 - - -def main(doc=None): - return run_filter(increase_header_level, doc=doc) - - -if __name__ == "__main__": - main() diff --git a/sysadmin-doc/tools/import-odt.sh b/sysadmin-doc/tools/import-odt.sh deleted file mode 100755 index debbc76..0000000 --- a/sysadmin-doc/tools/import-odt.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -pandoc --filter despan.py --filter headers.py $1 -o $1.md