GH GambleHub

Configurazione e deposito Ansile

(Sezione Tecnologia e infrastruttura)

Breve riepilogo

Ansable è uno strumento dichiarativo di configurazione e orchestrazione ideale per la configurazione ripetuta di VM/host, servizi e applicazioni quando l'infrastruttura è già stata creata (Terraform/IaC) e devi «rinfrescare» l'ambiente: installare i pacchetti, lanciare i modelli, riavviare i servizi senza downtime, applicare le regole di sicurezza. La chiave per il successo è la struttura modulare (ruoli/raccolte), l'idempotenza rigorosa, la scrupolosa gestione dei segreti (Vault), gli inventari dinamici, i test e la disciplina GitOps.

Quando Ansibile è appropriato (e come si combina con Terraform)

Terraform - Crea risorse (VPC, cluster, database).
Ansable configura il sistema operativo/software, rilascia versioni, esegue migrazioni, gestisce file e servizi.
Raccordo: Terraform visualizza «inventory »/IP/segreti nei manufatti, Ansible li legge in un passaggio CD.

Struttura repository (modello consigliato)


ansible/
inventories/
prod/
inventory. ini # or inventory. yaml group_vars/
all. yml web. yml db. yml host_vars/
web-01. yml stage/
...
roles/
webapp/
defaults/main. yml vars/main. yml tasks/main. yml handlers/main. yml templates/.j2 files/
meta/main. yml hardening/
...
playbooks/
site. yml deploy_webapp. yml hardening. yml collections/requirements. yml ansible. cfg
ansible. cfg (minimo):
ini
[defaults]
inventory = inventories/stage/inventory. ini stdout_callback = yaml callbacks_enabled = timer, profile_tasks interpreter_python = auto retry_files_enabled = False forks = 25 host_key_checking = True

Inventari statici e dinamici

Statico (ini):
ini
[web]
web-01 ansible_host=10. 0. 1. 10 web-02 ansible_host=10. 0. 1. 11

[db]
db-01 ansible_host=10. 0. 2. 10

[all:vars]
ansible_user=ansible ansible_ssh_common_args='-o ProxyJump=bastion@1. 2. 3. 4'

Dinamico

Utilizzare i plugin cloud (o il proprio script) per trascinare gli host sui tag. Variabili degli ambienti/tag → 'group _ vars'.

Ruoli e raccolte

Ruolo = modulo di riutilizzo indipendente (attività, file, modelli, handler).
Le raccolte sono un insieme di ruoli/plugin/moduli. Fissare i pin di versione in'collection/prescrizioni '. yml`.

yaml collections/requirements. yml collections:
- name: community. general version: ">=8. 0. 0,<9. 0. 0"
- name: ansible. posix

Script Idempotent di Playbooks

Esempio di playbook condiviso:
yaml playbooks/site. yml
- hosts: all gather_facts: true become: true roles:
- hardening

- hosts: web become: true roles:
- webapp
Ruolo «webapp» (sezioni):
yaml roles/webapp/tasks/main. yml
- name: Install packages:
name: ["nginx", "python3-venv"]
state: present

- name: Template configuration template:
src: nginx. conf. j2 dest: /etc/nginx/nginx. conf mode: "0644"
notify: Restart nginx

- name: unarchive artifact deploy:
src: "{{ webapp_package_url }}"  # артефакт из CI dest: /opt/webapp remote_src: true creates: /opt/webapp/current

- name: Link to the current version of file:
src: "/opt/webapp/releases/{{ release_id }}"
dest: /opt/webapp/current state: link notify: Reload webapp
Handler:
yaml roles/webapp/handlers/main. yml
- name: Restart nginx service: { name: nginx, state: restarted }

- name: Reload webapp systemd: { name: webapp, state: reloaded, daemon_reload: true }

Modelli Ginja2 e variabili

Memorizza le variabili in default in'defaults/main. yml, sensibili a Vault.
Usa i filtri ('| to _ nice _ yaml', '| b64encode', '| default') e le condizioni dì when ".

Esempio dì nginx. conf. j2`:
jinja2 worker_processes auto;
http {
server {
listen 80;
server_name {{ inventory_hostname }};
location / {
proxy_pass http://127. 0. 0. 1:{{ webapp_port }};
}
}
}

Segreti: Ansible Vault e gestori di segreti

Vault per crittografare i file delle variabili ('group _ vars/all. vault. yml`).
È meglio leggere i segreti dei gestori esterni (KMS/Secret Manager/SSM) attraverso i moduli appropriati e conservare solo i collegamenti/ARN in Vault.

File crittografato (esempio di struttura):
yaml group_vars/all. vault. yml (ansible-vault encrypted)
webapp_db_password: "..."
jwt_signing_key: "..."
Raccomandazioni:
  • Separare l'accesso: gli sviluppatori vedono il dave/stage, il prode solo il CI.
  • Attivare la rotazione dei segreti e il controllo dell'accesso.

Idoneità e modifiche corrette

Utilizzare i moduli («package», «user», «lineinfile», «template», «systemd») invece di «shell/command».
Contrassegna le attività «rumorose» «changed _ when: false» se non cambiano nulla.
Supporta check mode ('--check') e diff per i ruoli.
Per le attività instabili: «retries», «delay», «untile».

Esempio:
yaml
- name: Wait for HTTP uri availability:
url: "http://localhost/health"
status_code: 200 register: health retries: 10 delay: 5 until: health. status == 200

Prestazioni: grandi aziende e picchi

forks: alzare il parallelismo (con attenzione: non sovraccaricare l'obiettivo).
strategy = free: eseguire le operazioni senza attendere i vicini.
pipelining = True в `ansible. cfg'riduce la RTT.
gather _ facts: false dove i fatti non sono necessari.
async/poll per operazioni a lungo termine; throttle/serial per le onde di deploy.
delegate _ to e run _ once per azioni singole (come la migrazione del database).

Cartelli downtime zero

Rolling Deposit (20%)

yaml
- hosts: web serial: "20%"
max_fail_percentage: 10 roles: [webapp]

Canary

Avvia il playbook con' --limit web canary '(sottoinsieme del gruppo), controlla le metriche, quindi sposta l'intero gruppo.

Blue-Green

Due gruppi host web _ blue e web _ green; con il playbook, preparare la nuova onda, quindi cambiare il traffico (DNS/LB) con "community. general. affiliate _ lb '/API del tuo bilanciatore.

Protezione e hardening

Ruolo hardening: regole SSH, banner, «sudo» senza NOPASSWD, firewall, auditd/rsyslog, tempo-NTP, «fail2ban».
Accendere i SELinux/AppArmor, controllare le regole attraverso i moduli.
Bastione: limitare SSH agli obiettivi solo tramite jump-host (vedere «ProxyJump»).
Minimizza «become: true»; RBAC a livello di inventario (chi può eseguire quali playbook).

Hardware di rete e Windows

Windows: moduli «win _», connessione WinRM, script PowerShell come ultimo argomento.
Network: 'network _ cli '/' httpapi', moduli per Cisco/Juniper/F5; «save _ when: changed».

Test e qualità

ansible-lint + yamllint в CI.
Molecule: test dei ruoli locali/contenitori, test di idampotenza (test doppio senza modifiche).
Cassetta di sabbia: inventari temporanei separati/immagini VM.

Esempio Molecule (sezione):
yaml provisioner:
name: ansible verifier:
name: ansible scenario:
name: default

Integrazione con CI/CD e GitOps

Pipline tipica:

1. Lint → Syntax check → Molecule.

2. Costruzione degli artefatti dell'applicazione.

3. Deploy: `ansible-playbook -i inventories/prod site. yml --limit web --tags deploy`.

4. Riprodotto degli host modificati, artefatto dei fogli.

Esempio di passo (concetto):
bash ansible-galaxy collection install -r collections/requirements. yml ansible-lint ansible-playbook playbooks/deploy_webapp. yml \
-i inventories/prod/inventory. ini \
-e release_id=${GIT_SHA} --diff

Osservazione e verifica

Collegare i plugin callback (json/yaml/timer/profile _ tasks) - Report su tempi e cambiamenti.
Salvare i fogli di playbook in uno storage centralizzato.
Contrassegna le attività «tags:» per eseguire e accelerare le attività.

Ricette frequenti per i iGaming

Web/API noda: Nginx + systemd-unit, health-checks, secret manager, roll-restart.
Servizi game: modelli di configure per regione/tenanto tramite «group _ vars».
Connettori di pagamento: crossing rigoroso su chiavi, riavvio notify, post-test endpoint.
ETL-jobs - Distribuisce gli script CronJob con il modulo «cron», il file idempotent lock.
Monitoraggio: installazione di agenti (node _ exporter/otelcol), registrazione automatica nel monitoraggio.

Antipattern

Uso dì shell/command "dove c'è un modulo.
I playbook senza «handlers» sono superflui e servizi tremanti.
Memorizzazione di segreti in «group _ vars» aperti.
Assenza dì serial '/' max _ fail _ percentage ', durante il rilascio delle onde di prode.
Globale «gather _ facts: true» e «become: true» senza necessità.
Ruoli senza test di Molecule e senza supporto di --check.
Lunghi comandi senza «async/poll» che bloccano l'intera onda.

Assegno foglio di implementazione

1. Negoziare l'ossatura del repository e la convenzione naming.
2. Personalizzare l'inventario dinamico e la base.
3. Avvia ruoli (webapp/hardening/monitoring) e versioni pin delle raccolte.
4. Abilita Vault e/o integrazione con il gestore dei segreti.
5. Assicurati idempotenza, '--check/-diff', handlers e tag.
6. Connetti ansile-lint, yamllint, molecule in CI.
7. Descrivere il pattern deploy (rolling/canary/blue-green) e i limiti «serial».
8. Aggiungi i plugin callback, raccogliere i fogli, segnalare le modifiche.
9. Documentare runbook e ripristini e azioni durante gli incidenti.
10. Eseguire regolarmente il game-day: diradamento SSH, caduta del naso, reimpostazione della versione.

Riepilogo

Ansable chiude l'ultimo miglio tra l'infrastruttura creata e il prodotto operativo: modifiche rapide, sicure e prevedibili alle configurazioni e ai lanci. Con il ruolo come unità di riutilizzo minima, gli inventari dinamici, il corretto funzionamento con i segreti e i pattern di downtime zero, Ansibile aiuta i team iGaming a ridurre Time-to-Deploy, ridurre gli incidenti notturni e mantenere p99 a livello di SLO.

Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Telegram
@Gamble_GC
Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.