# केस स्टडी: कई Environments में Web App Deploy करना — Ansible: Playbooks से Servers का Automation

Source: https://www.geekswithgeeks.com/hi/ansible/wrap-case-study

> ऐसा repository और workflow डिज़ाइन करें जो web app को staging और production में सुरक्षित रूप से deploy करे।

## डिज़ाइन

Repository: `inventories/staging` और `inventories/production`, हर एक में `hosts.ini` और `group_vars` (ports, replica संख्या, अलग vault passwords के साथ vaulted secrets)। Roles: `common` (users, packages, firewall), `nginx`, `app_deploy` (release directory, systemd unit, template config, reload के लिए handler)। Pipeline: pull request पर syntax-check, ansible-lint और Molecule चलाएँ; merge पर staging में पहले `--check --diff` फिर असली deploy; production controller से, मंज़ूरी चरण के साथ, पहले canary host, फिर health checks और `max_fail_percentage` के साथ `serial: 25%`। Rollback पिछले release variable के साथ दोबारा चलाना है। हर run commit ID के साथ log होता है।

## सुरक्षित deployment pipeline

Inventory, roles, secrets, tests और rolling rollout एक दिनचर्या के रूप में साथ काम करते हैं।

![चार हिस्से: परिभाषित, सुरक्षित, जाँच, rollout।](assets/figures/ansible/section-8-map.svg) — चित्र 8.1 — परिभाषित, सुरक्षित, जाँच और rollout।

## एक पन्ने पर setup

हर पंक्ति इस कोर्स के एक खंड से जुड़ती है।

```text
Inventory      per-environment dirs + group_vars                 (Sec 1, 3)
Playbooks      idempotent, named tasks, handlers, check --diff     (Sec 2, 4)
Roles          common, nginx, app_deploy; pinned collections       (Sec 5)
Secrets        Vault per environment; no_log; least privilege      (Sec 6)
Quality        syntax-check, ansible-lint, Molecule in CI          (Sec 7)
Rollout        canary host, serial batches, health checks, rollback (Sec 7)
```

## Rollback का अभ्यास करें

Staging में rollback का अभ्यास करें ताकि वह ज्ञात, तेज़ प्रक्रिया हो, किसी outage के दौरान तुरंत गढ़ी जाने वाली चीज़ नहीं।

**Quiz:** Production में पहले canary host पर deploy क्यों करें?

- [ ] यह health checks की ज़रूरत टालता है
- [ ] Canary hosts तेज़ होते हैं
- [x] ताकि समस्याएँ तब पकड़ी जाएँ जब सिर्फ़ एक मशीन प्रभावित हो
- [ ] Production batches अस्वीकार करता है

*Answer:* ताकि समस्याएँ तब पकड़ी जाएँ जब सिर्फ़ एक मशीन प्रभावित हो. छोटा पहला कदम ख़राब बदलाव के असर का दायरा सीमित करता है।
