Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Ce répo contient les playbooks d'infra de MRS, normalement on a rien de
- compliqué: ssh, firewall, backups et dockerd + containers, et quelques
- ptits potes qu'on a invité à la fête.
- Ce répo de playbooks est prévu pour être utilisé avec votre répo privé
- qui contient les variables de vos environnements.
- Un environnement est configuré dans des fichiers comme:
- - `group_vars/all/docker-vars.yml`: variables publiques pour docker, etc
- - `group_vars/all/docker-secrets.yml`: variables secrêtes pour docker, etc
- On utilise `ansible-vault create|edit group_vars/all/yoursite-secrets.yml`
- pour éditer les variables secretes après avoir exporté
- `ANSIBLE_VAULT_PASSWORD_FILE` vers un fichier qui contient le mot de passe
- ansible vault en clair.
- Vous pourrez ainsi utiliser répo de playbooks avec des commandes comme::
- export ANSIBLE_STDOUT_CALLBACK=debug
- export ANSIBLE_VAULT_PASSWORD_FILE=.vault.decrypted
- ansible-playbook -i yourserver, -v playbooks/docker.yml
- ansible-playbook -i yourserver, -v playbooks/netdata.yml
- Ci-après, un aperçu des différents playbooks:
- 0. Bootstrap
- ============
- On commence par bootstrap.yml si on a qu'un login en root (comme c'est le cas
- pour notre serveur, ubuntu 17.10 OVH), cela créera votre utilisateur avec sudo
- sans mot de passe (normalement).
- 1. Utilisateurs et sshd
- =======================
- Créez des comptes pour vos amis dans la variable active_users de votre
- inventaire, ils s'installeront grace au playbook ssh.yml. Attention, ce
- playbook desactive le root login et l'authentification par mot de passe !
- 2. Firewall
- ===========
- Les règles sont maintenues amême le playbook firewall.yml, qui autorise les
- ports 22, 80 et 443 par défaut, ansi que 53 (dns) et 4949 (munin) en interne.
- 3. Installation duplicity
- =========================
- Le playbook duplicity.yml installe la clef GPG définie dans l'inventaire et
- duplicity, la commande pour faire des backups. Voir comment le playbook nginx
- fait ses backups avec un systemd unit et un timer et appelle duplicity pour
- utiliser le FTP de backup.
- 4. Installation docker
- ======================
- Le playbook docker.yml installe docker et les modules python necessaires pour
- les modules ansible docker_*. Il ajoute également les active_users dans le
- groupe docker. Cela configurera également le containeur dns-gen qui fera office
- de serveur DNS dans /etc/resolv.conf.
- 5. Installation de docker-dns-gen
- =================================
- Le playbook dns.yml installe un containeur docker-dns-gen avec toutes les
- features qui s'ensuivent. Cela permet d'utiliser nginx-letsencrypt pour
- automatiser la génération de certificats avec un CA accepté dans les containers
- par défaut mais aussi d'activer des features de gestion de DNS dynamiques en
- mode XXIst century soit avec des variables d'environnement sur des containeurs
- et zero config.
- 6. Installation nginx
- =====================
- Le playbook nginx.yml installe deux containers persistents, un pour
- nginx et un pour nginx-letsencrypt-companion. A noter qu'on peut
- passer du serveur ACME de staging a production en changeant l'url de
- letsencrypt_uri, cf. commentaires dans group_vars/all.yml.
- 7. Installation mailserver
- ==========================
- Le playbook mail.yml installe le container tvial/docker-mailserver
- et configure le compte postmaster.
- Se referer au playbook de passbolt pour la création d'utilisateur et l'usage
- du container, à noter l'usage de etc_hosts pour faire matcher le hostname
- utilisé par le client avec le CN du certificat letsencrypt du serveur de
- mail soit le full fqdn, utile lorsqu'on expose pas le mailserver sur
- internet.
- 8. Installation monitoring
- ==========================
- Le playbook munin.yml installe un serveur munin, il est necessaire d'executer
- ce playbook avant d'executer tout playbook qui installe un container
- postgresql car il viendra avec des taches de configuration de monitoring munin.
- 9. Installation monitoring applicatif
- =====================================
- Le playbook sentry.yml installe un serveur sentry, qui sert à la remontée de
- logs et d'erreurs des applications.
- 10. MRS
- =======
- Le playbook mrs.yml déploie le site mais requierts 2 variables: nom de
- l'instance (staging, production) et nom de l'image docker, example::
- ANSIBLE_STDOUT_CALLBACK=debug ansible-playbook -i inventory -e prefix=mrs -e image=betagouv/mrs:jpic -e instance=jpic playbooks/django.yml
- A. Developpement
- ================
- Role backup: automatisation de backup
- -------------------------------------
- Le role backup permet d'ajouter un script de backup avec une telle tache::
- - name: Install backup scripts
- vars:
- unit_name: backup-passbolt
- unit_description: Passbolt backup
- script_path: /data/{{ passbolt_dns }}/backup.sh
- script_content: |
- #!/bin/bash -eux
- export passbolt_dump=/data/{{ passbolt_dns }}/backup/passbolt.sql
- mkdir -p ${passbolt_dump%/*}
- docker exec -t passbolt-mysql mysqldump -upassbolt -p{{ passbolt_mysql_password }} passbolt &> $passbolt_dump
- export FTP_PASSWORD="{{ backup_ftp_password }}"
- /usr/bin/duplicity \
- --encrypt-key={{ gpg_id }} \
- /data/{{ passbolt_dns }}/backup \
- {{ backup_host }}/mrs/passbolt
- rm -rf $passbolt_dump
- include_role:
- name: backup
- Role mail: création de comptes emails
- -------------------------------------
- Le role mail permet d'ajouter un compte postfix avec une telle tache::
- - name: Install postmaster email account
- vars:
- email: '{{ mail_postmaster_email }}'
- password: '{{ mail_postmaster_password }}'
- include_role:
- name: mail
- Role munin_postgresql: monitoring munin pour instance postgresql
- ----------------------------------------------------------------
- Ce role permet d'ajouter le monitoring d'une instance de postgresql. Il faut
- pour cela exposer le socket unix de postgresql sur l'hote, example::
- docker_container:
- name: your-postgres
- volumes:
- - '/data/your-postgres/postgresql/run:/var/run/postgresql'
- env:
- POSTGRES_PASSWORD: '{{ your_password }}'
- POSTGRES_USER: you
- - name: Install munin monitoring for postgresql
- vars:
- postgresql_instance: your-postgres
- postgresql_user: you
- postgresql_password: '{{ your_password }}'
- postgresql_host: /data/your-postgres/postgresql/run
- include_role:
- name: munin_postgresql
- Après plusieurs minutes, vous devriez voir votre instance postgresql dans
- munin.
- Role nginx_htpasswd: sécuriser un domaine avec admin_passwords
- --------------------------------------------------------------
- Ce role utilise le dictionnaire admin_passwords pour sécuriser un DNS avec un
- htaccess au niveau de docker-gen. La variable admin_passwords devrait être
- chiffrée avec ansible-vault, mais ça n'est pas obligatoire. Example::
- - name: Install netdata htaccess
- vars:
- dns: '{{ netdata_dns }}'
- include_role:
- name: nginx_htpasswd
- B. Autres Services
- ==================
- Playbook passbolt.yml: partage de mot de passes Open Source
- -----------------------------------------------------------
- Le playbook passbolt.yml installe Passbolt, un service de gestion de mot de
- passe en équipe.
Add Comment
Please, Sign In to add comment