GH GambleHub

Ansible: konfiguratsiya va deploy

(Bo’lim: Texnologiyalar va infratuzilma)

Qisqacha xulosa

Ansible - konfiguratsiya va orkestratsiyaning deklarativ vositasi, infratuzilma yaratilgan VM/xostlar, servislar va ilovalarni takrorlash uchun juda mos keladi (Terraform/IaC) va atrof-muhitni «jonlantirish» kerak: paketlarni o’rnatish, relizni o’rnatish, shablonlarni prokat qilish, xizmatlarni downtaymsiz qayta ishga tushirish, xavfsizlik siyosatini qo’llash. Muvaffaqiyat kaliti: modulli tuzilma (rollar/kolleksiyalar), qatʼiy idempotentlik, sirlarni sinchkovlik bilan ishlash (Vault), dinamik inventarlar, test sinovlari va GitOps-intizom.

Ansible mos kelganda (va u Terraform bilan qanday birlashadi)

Terraform - resurslarni (VPC, klasterlar, DB) yaratadi.
Ansible - OS/dasturiy ta’minotni konfiguratsiya qiladi, versiyalarni chiqaradi, migratsiyani haydaydi, fayl va xizmatlarni boshqaradi.
Bog’lov: Terraform’inventory ’/IP/sirlarni artefaktlarga o’tkazadi, Ansible ularni CD’da o’qiydi.

Repozitoriy tuzilishi (tavsiya etiladigan shablon)


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 (minimal):
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

Inventarlar: statik va dinamik

Statik (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'

Dinamik

Xostlarni teglarga tortish uchun bulut plaginlaridan foydalaning. Muhit/tag oʻzgaruvchilari →’group _ vars’.

Rollar va kolleksiyalar

Rol = mustaqil qayta foydalanish moduli (vazifalar, fayllar, namunalar, xandlerlar).
Toʻplamlar - rollar/plaginlar/modullar toʻplami. Pin versiyalarini’collections/requirements’da yozib oling. yml`.

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

Playbooks: idempotent stsenariylari

Umumiy pleybuk namunasi:
yaml playbooks/site. yml
- hosts: all gather_facts: true become: true roles:
- hardening

- hosts: web become: true roles:
- webapp
’Webapp’ roli (parchalar):
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
Xandlerlar:
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 }

Jinja2 va oʻzgaruvchan namunalar

Defolt oʻzgaruvchilarini’defaults/main’da saqlang. yml’, sezgir - Vault.
Filterlardan (’| to_nice_yaml',’| b64encode’,’| default’) va’when’shartlaridan foydalaning.

Masalan’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 }};
}
}
}

Sirlar: Ansible Vault va maxfiy menejerlar

Oʻzgaruvchan fayllarni shifrlash uchun Vault (’group _ vars/all. vault. yml`).
Tashqi menejerlardan (KMS/Secrets Manager/SSM) sirlarni tegishli modullar orqali o’qish va faqat havolalarni/ARNni Vault’da saqlash yaxshiroqdir.

Shifrlangan fayl (tuzilish namunasi):
yaml group_vars/all. vault. yml (ansible-vault encrypted)
webapp_db_password: "..."
jwt_signing_key: "..."
Tavsiyalar:
  • Foydalanishni ajrating: ishlab chiquvchilar dev/stage’ni, faqat CI’ni koʻrishadi.
  • Sirlarni almashtirish va kirish auditini kiriting.

Idempotentlik va to’g "ri o’zgarishlar

’shell/command’ oʻrniga (’package’,’user’,’lineinfile’,’template’,’systemd’) modullaridan foydalaning.
Hech narsani oʻzgartirmasa, «shovqinli» vazifalarni belgilang.
Rollar uchun check mode (’-check’) va diffni qoʻllab-quvvatlang.
Beqaror vazifalar uchun:’retries’,’delay’,’until’.

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

Unumdorlik: katta fermalar va cho’qqilar

forks: parallelizmni koʻtaring (ehtiyotkorlik bilan: maqsadni ortiqcha yuklamang).
strategy = free - qoʻshnilarni kutmasdan vazifalarni bajaring.
pipelining = True в `ansible. cfg RTT ni kamaytiradi.
gather_facts: fakt kerak boʻlmagan joyda false.
uzoq muddatli operatsiyalar uchun async/poll; deploy toʻlqinlari uchun throttle/serial.
Yakka tartibdagi harakatlar uchun delegate_to va run_once (masalan, DB migratsiyasi).

Nol dauntaym patternlari

Rolling-deploy (har biri 20%)

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

Canary

’-limit web-canary’ pleybukini ishga tushiring, metriklarni tekshiring va butun guruhga yoying.

Blue-Green

’web _ blue’ va’web _ green’xostlarining ikki guruhi; yangi to’lqinni pleybuk bilan tayyorlang, keyin trafikni (DNS/LB) community vazifasi bilan almashtiring. general. Balanschi affiliate_lb'/API.

Xavfsizlik va hardening

Hardening roli: SSH siyosati, bannerlar,’sudo’siz NOPASSWD, fayervol, auditd/rsyslog, vaqt-NTP,’fail2ban’.
SELinux/AppArmor dasturini ishga tushiring.
Bastion: SSHni faqat jump-host orqali cheklang (’ProxyJump’ga qarang).
’become: true’ ni minimallashtiring; RBACni inventar darajasida rasmiylashtiring (kim qanday pleybuklarni ishga tushirishi mumkin).

Windows va tarmoq uskunalari

Windows:’win _’modullari, WinRM ulanishi, PowerShell skriptlari - oxirgi dalil sifatida.
Network:’network _ cli ’/’ httpapi’, Cisco/Juniper/F5 uchun modullar; ’save _ when: changed’.

Test va sifat

ansible-lint + yamllint в CI.
Molecule: rollarning lokal/konteyner testlari, idempotentlikni tekshirish (ikki marta o’zgarishsiz).
Qum qutisi: alohida vaqtinchalik inventarlar/VM tasvirlari.

Molecule misoli:
yaml provisioner:
name: ansible verifier:
name: ansible scenario:
name: default

CI/CD va GitOps bilan integratsiya

Namunaviy payplayn:

1. Lint → Syntax check → Molecule.

2. Ilova artefaktlarini tuzish.

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

4. Oʻzgartirilgan xostlar boʻyicha report, log artefakti.

Qadam (kontseptsiya) misoli:
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

Kuzatuv va audit

Vaqt va oʻzgarishlar boʻyicha hisobotlar - callback plaginlarini (json/yaml/timer/profile_tasks) ulang.
Pleybuklar daftarlarini markazlashtirilgan saqlash joyiga saqlang.
’tags:’ vazifalarini tanlab ishga tushirish va tezlashtirish uchun belgilang.

iGaming uchun tez-tez retseptlar

Web/API noda: Nginx + systemd-unit, health-checks, secrets by manager, roll-restart.
Game-services:’group _ vars’orqali mintaqalar/tenantlar boʻyicha konfiguratsiya namunalari.
To’lov konnektorlari: kalitlarga qat’iy o’rnatilgan, notify bo’yicha qayta ishga tushirish, endpointlarni post-tekshirish.
ETL joblari: CronJob skriptlarini c’cron’moduli, idempotent lock-fayl bilan joylashtirish.
Monitoring: agentlarni o’rnatish (node_exporter/otelcol), monitoringda avto-ro’yxatdan o’tkazish).

Antipatternlar

Modul mavjud boʻlgan joyda’shell/command’dan foydalanish.
’handlers’ bo’lmagan pleybuklar → ortiqcha restartlar va xizmatlarning titrashi.
Maxfiylarni ochiq’group _ vars’da saqlash.
’serial ’/’ max _ fail _ percentage’ ning yo’qligi.
Global’gather _ facts: true’va’become: true’kerak emas.
Rollar Molecule testisiz va’-check’qo’llab-quvvatlamasdan.
Butun to’lqinni to’sib qo’yadigan’async/poll’bo’lmagan uzoq buyruqlar.

Joriy etish chek-varaqasi

1. Omborxona va naming-konventsiya ramkasini kelishib oling.
2. Dinamik inventar va bastionni moslashtiring.
3. Kolleksiyalarning (webapp/hardening/monitoring) va pin versiyalarini yaratish.
4. Vault va/yoki maxfiy menejer bilan integratsiyani yoqish.
5. Idempotentlikni ta’minlash,’-check/--diff’, handlers va teglar.
6. Ansible-lint, yamllint, Molecule ni CI ga ulash.
7. Deploy patterni (rolling/canary/blue-green) va «serial» limitlarini tavsiflash.
8. Callback plaginlari, log yigʻish, oʻzgarishlar haqida hisobot qoʻshish.
9. Runbook va qaytarish va hodisalarni hujjatlashtirish.
10. Muntazam ravishda game-day o’tkazish: SSH uzilishi, nod tushishi, versiya qaytishi.

Yakunlar

Ansible yaratilgan infratuzilma va ishlayotgan oziq-ovqat mahsulotlari o’rtasidagi «so’nggi mil» ni yopadi: konfiguratsiyalar va relizlarning tez, xavfsiz va oldindan aytib bo’ladigan o’zgarishlari. Minimal qayta ishlatish birligi, dinamik inventarlar, sirlar bilan to’g’ri ishlash va nol duntaym patternlari sifatida Ansible iGaming jamoalariga Time-to-Deploy-ni qisqartirishga, tungi hodisalar sonini kamaytirishga va SLO darajasida p99 saqlashga yordam beradi.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Telegram
@Gamble_GC
Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.