2021-01-04 18:54:02 +01:00
|
|
|
### Silicone
|
|
|
|
Un angolo ragionato per facilitare la messa in opera di servizi autogestiti di prossimità.
|
2020-09-29 13:43:03 +02:00
|
|
|
|
2020-11-21 23:42:08 +01:00
|
|
|
#### Come si usa
|
2020-11-10 23:14:10 +01:00
|
|
|
|
2021-03-28 19:15:36 +02:00
|
|
|
```bash
|
|
|
|
ansible-galaxy collection install community.general
|
|
|
|
ansible-galaxy collection install community.postgresql
|
2021-03-31 12:12:56 +02:00
|
|
|
ansible-galaxy install nginxinc.nginx
|
|
|
|
ansible-galaxy install nginxinc.nginx_config
|
2021-03-28 19:15:36 +02:00
|
|
|
```
|
|
|
|
|
|
|
|
Silicone è una raccolta di ruoli
|
|
|
|
[ansible](https://docs.ansible.com/ansible/latest/index.html) fatti a
|
|
|
|
modino e basati su debian stable, un tentativo di fissare alcune scelte
|
|
|
|
tecniche ragionate e poterle ridiscutere in un posto comodo. È molto utile
|
|
|
|
anche per chi vuole tirare su un pad o gancio o altro senza dover
|
|
|
|
necessariamente mettere le mani troppo nella marmellata dei file di
|
|
|
|
configurazione di nginx, ricordarsi di aggiungere il cron per certbot,
|
|
|
|
capire quale versione di nodejs bisogna usare per installare etherpad o
|
|
|
|
trovare un sistema per fare i backup di tutto questo. Qui dentro abbiamo
|
|
|
|
fatto delle scelte.
|
|
|
|
|
|
|
|
Per usarlo velocemente e conoscendo un minimo ansible, imposta il tuo
|
|
|
|
inventory ([inventory.yml](./inventory.yml)) il tuo playbook
|
|
|
|
([infra.yml](./infra.yml)) e lancia `ansible-playbook`.
|
2020-11-10 23:14:10 +01:00
|
|
|
|
2021-01-04 18:54:02 +01:00
|
|
|
#### Ansible in breve
|
2021-03-28 19:15:36 +02:00
|
|
|
|
|
|
|
Ansible è uno strumento a cui si fornisce una lista di macchine da gestire
|
|
|
|
(specificate dentro un file inventory) e si descrive quali ruoli assegnare
|
|
|
|
ad ogni macchina. Ad esempio, diciamo che su ogni server/vm che gestiamo
|
|
|
|
vogliamo installare 3 pacchetti (git, sudo e python3), ecco bisognerà
|
|
|
|
scrivere nel playbook qualcosa come:
|
2020-09-24 16:31:44 +02:00
|
|
|
|
2021-01-04 18:54:02 +01:00
|
|
|
```yaml
|
|
|
|
# test_playbook.yml
|
|
|
|
---
|
|
|
|
- name: Generic servers operation
|
|
|
|
hosts: all
|
|
|
|
tasks:
|
|
|
|
- name: Install generic packages
|
|
|
|
apt:
|
|
|
|
pkg:
|
|
|
|
- sudo
|
|
|
|
- git
|
|
|
|
- python3
|
|
|
|
```
|
|
|
|
|
2021-03-28 19:15:36 +02:00
|
|
|
A questo punto lanciando `./ansible-playbook test_playbook.yml` tutti i
|
|
|
|
server specificati nel file di inventory verranno contattati da ansible via
|
|
|
|
ssh che provvederà ad eseguire le operazioni descritte nel task.
|
2021-01-04 18:54:02 +01:00
|
|
|
|
|
|
|
Un ruolo ansible quindi non è nient'altro che una lista di operazioni.
|
|
|
|
|
2021-02-03 23:53:55 +01:00
|
|
|
Per poter eseguire solo alcuni ruoli di alto livello possiamo usare i tag:
|
|
|
|
`ansible-playbook --tags radicale infra.yml`.
|
|
|
|
|
2021-03-31 12:12:36 +02:00
|
|
|
Nello sviluppo può essere molto comodo usare la flag `--start-at-task`:
|
|
|
|
|
|
|
|
```shell
|
|
|
|
ansible-playbook -i inventory.yml -i hosts --tags fdroid --start-at-task \
|
|
|
|
"Link repo into public dir" infra.yml
|
|
|
|
```
|
|
|
|
|
|
|
|
C'è anche un tool abbastanza comodo per fare dei controlli su quello che
|
|
|
|
stai scrivendo, si chiama
|
|
|
|
[ansible-lint](https://ansible-lint.readthedocs.io/en/latest/)
|
|
|
|
|
2021-01-04 18:54:02 +01:00
|
|
|
#### Password / Keys
|
2021-03-28 19:15:36 +02:00
|
|
|
|
|
|
|
Per le informazioni sensibili (password del database, dell'account di
|
|
|
|
admin, una chiave ssh) viene usato
|
|
|
|
[passwordstore](https://www.passwordstore.org/), il path usato è
|
|
|
|
specificato nell'inventory con la variabile `passwordstore_path`.
|
2021-01-04 18:54:02 +01:00
|
|
|
|
|
|
|
#### Backup
|
2021-03-28 19:15:36 +02:00
|
|
|
|
|
|
|
Per i backup usiamo [restic](https://restic.net/). ogni servizio che vuole
|
|
|
|
supportare i backup deve controllare la variabile `with_backup` e
|
|
|
|
specificare di quali database e directory fare i backup (`restic_databases`
|
|
|
|
e `restic_folders`). Le configurazioni sono dentro l'inventory (che le
|
|
|
|
cerca dentro il passwordstore).
|
2021-01-04 18:54:02 +01:00
|
|
|
|
|
|
|
#### Monitoring
|
|
|
|
|
2021-03-31 12:12:36 +02:00
|
|
|
#### Creare nuovi ruoli e testarne di vecchi
|
2021-03-28 19:15:36 +02:00
|
|
|
|
|
|
|
Ci sono varie possibilità, si può usare docker o vagrant, sono dentro
|
|
|
|
`dev/`, per Docker c'e' un [README](./dev/README.md)
|
2021-01-04 18:54:02 +01:00
|
|
|
|
|
|
|
### Servizi
|
2021-03-28 19:15:36 +02:00
|
|
|
|
|
|
|
I servizi di alto livello dipendono dai ruoli base, ad esempio etherpad
|
|
|
|
dipende tra gli altri da nodejs, postgresql e opzionalmente anche da nginx
|
|
|
|
e restic. Le dipendenze di un ruolo sono specificate dentro `meta/main.yml`
|
|
|
|
alla voce `dependencies` (vedi le dipendenze del ruolo etherpad come
|
|
|
|
esempio [qui](./roles/stable/etherpad/meta/main.yml))
|
2021-01-04 18:54:02 +01:00
|
|
|
|
|
|
|
<!--
|
|
|
|
#### [Etherpad](https://etherpad.org/)
|
|
|
|
> Un editor di testi collaborativo.
|
|
|
|
=> nginx, certbot, nodejs, restic, etherpad.
|
|
|
|
[Docs](./roles/stable/etherpad/README.md)
|
|
|
|
|
|
|
|
#### [Gancio](https://gancio.org)
|
|
|
|
>
|
|
|
|
|
|
|
|
#### [goploader](https://gpldr.in/) -->
|