Guest User

Untitled

a guest
Dec 11th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.08 KB | None | 0 0
  1. Ce répo contient les playbooks d'infra de MRS, normalement on a rien de
  2. compliqué: ssh, firewall, backups et dockerd + containers, et quelques
  3. ptits potes qu'on a invité à la fête.
  4.  
  5. Ce répo de playbooks est prévu pour être utilisé avec votre répo privé
  6. qui contient les variables de vos environnements.
  7.  
  8. Un environnement est configuré dans des fichiers comme:
  9.  
  10. - `group_vars/all/docker-vars.yml`: variables publiques pour docker, etc
  11. - `group_vars/all/docker-secrets.yml`: variables secrêtes pour docker, etc
  12.  
  13. On utilise `ansible-vault create|edit group_vars/all/yoursite-secrets.yml`
  14. pour éditer les variables secretes après avoir exporté
  15. `ANSIBLE_VAULT_PASSWORD_FILE` vers un fichier qui contient le mot de passe
  16. ansible vault en clair.
  17.  
  18. Vous pourrez ainsi utiliser répo de playbooks avec des commandes comme::
  19.  
  20. export ANSIBLE_STDOUT_CALLBACK=debug
  21. export ANSIBLE_VAULT_PASSWORD_FILE=.vault.decrypted
  22. ansible-playbook -i yourserver, -v playbooks/docker.yml
  23. ansible-playbook -i yourserver, -v playbooks/netdata.yml
  24.  
  25. Ci-après, un aperçu des différents playbooks:
  26.  
  27. 0. Bootstrap
  28. ============
  29.  
  30. On commence par bootstrap.yml si on a qu'un login en root (comme c'est le cas
  31. pour notre serveur, ubuntu 17.10 OVH), cela créera votre utilisateur avec sudo
  32. sans mot de passe (normalement).
  33.  
  34. 1. Utilisateurs et sshd
  35. =======================
  36.  
  37. Créez des comptes pour vos amis dans la variable active_users de votre
  38. inventaire, ils s'installeront grace au playbook ssh.yml. Attention, ce
  39. playbook desactive le root login et l'authentification par mot de passe !
  40.  
  41. 2. Firewall
  42. ===========
  43.  
  44. Les règles sont maintenues amême le playbook firewall.yml, qui autorise les
  45. ports 22, 80 et 443 par défaut, ansi que 53 (dns) et 4949 (munin) en interne.
  46.  
  47. 3. Installation duplicity
  48. =========================
  49.  
  50. Le playbook duplicity.yml installe la clef GPG définie dans l'inventaire et
  51. duplicity, la commande pour faire des backups. Voir comment le playbook nginx
  52. fait ses backups avec un systemd unit et un timer et appelle duplicity pour
  53. utiliser le FTP de backup.
  54.  
  55. 4. Installation docker
  56. ======================
  57.  
  58. Le playbook docker.yml installe docker et les modules python necessaires pour
  59. les modules ansible docker_*. Il ajoute également les active_users dans le
  60. groupe docker. Cela configurera également le containeur dns-gen qui fera office
  61. de serveur DNS dans /etc/resolv.conf.
  62.  
  63. 5. Installation de docker-dns-gen
  64. =================================
  65.  
  66. Le playbook dns.yml installe un containeur docker-dns-gen avec toutes les
  67. features qui s'ensuivent. Cela permet d'utiliser nginx-letsencrypt pour
  68. automatiser la génération de certificats avec un CA accepté dans les containers
  69. par défaut mais aussi d'activer des features de gestion de DNS dynamiques en
  70. mode XXIst century soit avec des variables d'environnement sur des containeurs
  71. et zero config.
  72.  
  73. 6. Installation nginx
  74. =====================
  75.  
  76. Le playbook nginx.yml installe deux containers persistents, un pour
  77. nginx et un pour nginx-letsencrypt-companion. A noter qu'on peut
  78. passer du serveur ACME de staging a production en changeant l'url de
  79. letsencrypt_uri, cf. commentaires dans group_vars/all.yml.
  80.  
  81. 7. Installation mailserver
  82. ==========================
  83.  
  84. Le playbook mail.yml installe le container tvial/docker-mailserver
  85. et configure le compte postmaster.
  86.  
  87. Se referer au playbook de passbolt pour la création d'utilisateur et l'usage
  88. du container, à noter l'usage de etc_hosts pour faire matcher le hostname
  89. utilisé par le client avec le CN du certificat letsencrypt du serveur de
  90. mail soit le full fqdn, utile lorsqu'on expose pas le mailserver sur
  91. internet.
  92.  
  93. 8. Installation monitoring
  94. ==========================
  95.  
  96. Le playbook munin.yml installe un serveur munin, il est necessaire d'executer
  97. ce playbook avant d'executer tout playbook qui installe un container
  98. postgresql car il viendra avec des taches de configuration de monitoring munin.
  99.  
  100. 9. Installation monitoring applicatif
  101. =====================================
  102.  
  103. Le playbook sentry.yml installe un serveur sentry, qui sert à la remontée de
  104. logs et d'erreurs des applications.
  105.  
  106. 10. MRS
  107. =======
  108.  
  109. Le playbook mrs.yml déploie le site mais requierts 2 variables: nom de
  110. l'instance (staging, production) et nom de l'image docker, example::
  111.  
  112. ANSIBLE_STDOUT_CALLBACK=debug ansible-playbook -i inventory -e prefix=mrs -e image=betagouv/mrs:jpic -e instance=jpic playbooks/django.yml
  113.  
  114. A. Developpement
  115. ================
  116.  
  117. Role backup: automatisation de backup
  118. -------------------------------------
  119.  
  120. Le role backup permet d'ajouter un script de backup avec une telle tache::
  121.  
  122. - name: Install backup scripts
  123. vars:
  124. unit_name: backup-passbolt
  125. unit_description: Passbolt backup
  126. script_path: /data/{{ passbolt_dns }}/backup.sh
  127. script_content: |
  128. #!/bin/bash -eux
  129. export passbolt_dump=/data/{{ passbolt_dns }}/backup/passbolt.sql
  130. mkdir -p ${passbolt_dump%/*}
  131. docker exec -t passbolt-mysql mysqldump -upassbolt -p{{ passbolt_mysql_password }} passbolt &> $passbolt_dump
  132. export FTP_PASSWORD="{{ backup_ftp_password }}"
  133. /usr/bin/duplicity \
  134. --encrypt-key={{ gpg_id }} \
  135. /data/{{ passbolt_dns }}/backup \
  136. {{ backup_host }}/mrs/passbolt
  137. rm -rf $passbolt_dump
  138. include_role:
  139. name: backup
  140.  
  141. Role mail: création de comptes emails
  142. -------------------------------------
  143.  
  144. Le role mail permet d'ajouter un compte postfix avec une telle tache::
  145.  
  146. - name: Install postmaster email account
  147. vars:
  148. email: '{{ mail_postmaster_email }}'
  149. password: '{{ mail_postmaster_password }}'
  150. include_role:
  151. name: mail
  152.  
  153. Role munin_postgresql: monitoring munin pour instance postgresql
  154. ----------------------------------------------------------------
  155.  
  156. Ce role permet d'ajouter le monitoring d'une instance de postgresql. Il faut
  157. pour cela exposer le socket unix de postgresql sur l'hote, example::
  158.  
  159. docker_container:
  160. name: your-postgres
  161. volumes:
  162. - '/data/your-postgres/postgresql/run:/var/run/postgresql'
  163. env:
  164. POSTGRES_PASSWORD: '{{ your_password }}'
  165. POSTGRES_USER: you
  166.  
  167. - name: Install munin monitoring for postgresql
  168. vars:
  169. postgresql_instance: your-postgres
  170. postgresql_user: you
  171. postgresql_password: '{{ your_password }}'
  172. postgresql_host: /data/your-postgres/postgresql/run
  173. include_role:
  174. name: munin_postgresql
  175.  
  176. Après plusieurs minutes, vous devriez voir votre instance postgresql dans
  177. munin.
  178.  
  179. Role nginx_htpasswd: sécuriser un domaine avec admin_passwords
  180. --------------------------------------------------------------
  181.  
  182. Ce role utilise le dictionnaire admin_passwords pour sécuriser un DNS avec un
  183. htaccess au niveau de docker-gen. La variable admin_passwords devrait être
  184. chiffrée avec ansible-vault, mais ça n'est pas obligatoire. Example::
  185.  
  186. - name: Install netdata htaccess
  187. vars:
  188. dns: '{{ netdata_dns }}'
  189. include_role:
  190. name: nginx_htpasswd
  191.  
  192. B. Autres Services
  193. ==================
  194.  
  195. Playbook passbolt.yml: partage de mot de passes Open Source
  196. -----------------------------------------------------------
  197.  
  198. Le playbook passbolt.yml installe Passbolt, un service de gestion de mot de
  199. passe en équipe.
Add Comment
Please, Sign In to add comment