GH GambleHub

Ansible: konfigurasiýa we deplow

(Bölüm: Tehnologiýalar we infrastruktura)

Gysgaça gysgaça

"Ansible", infrastruktura eýýäm döredilen we gurşawy "janlandyrmaly" (Terraform/IaC) bolsa, VM/hostlary, hyzmatlary we programmalary gaýtalamak üçin amatly konfigurasiýa we orkestr deklaratiw guralydyr: paketleri oturtmak, goýbermek, şablonlary togalamak, aşaklatmazdan hyzmatlary täzeden başlamak, howpsuzlyk syýasatlaryny ulanmak Üstünligiň açary: modully gurluş (rollar/kolleksiýalar), berk idempotentlik, syrlar bilen takyk işlemek (Vault), dinamiki inwentarlar, synag we GitOps-düzgün.

Ansible ýerlikli bolanda (we Terraform bilen nähili birleşýär)

Terraform - çeşmeleri döredýär (VPC, klasterler, DB).
Ansible - OS/programma üpjünçiligini konfigurasiýa edýär, wersiýalary çykarýar, migrasiýalary kowýar, faýllary we hyzmatlary dolandyrýar.
Baglanyşyk: Terraform 'inventory '/IP/syrlary artefaktlara çykarýar, Ansible olary CD ädiminde okaýar.

Repozitoryň gurluşy (maslahat berilýän şablon)


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 (iň az):
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

Inwentarlar: statiki we dinamiki

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'

Dinamiki

Hostlary belliklere çekmek üçin bulut pluginlerini (ýa-da öz skriptiňizi) ulanyň. Gurşaw/taglaryň üýtgemeleri → 'group _ vars'.

Rollar we kolleksiýalar

Rol = gaýtadan ulanmagyň garaşsyz moduly (meseleler, faýllar, şablonlar, hendlerler).
Kolleksiýalar - rollaryň/pluginleriň/modullaryň toplumy. Pin wersiýalary 'collections/requirements. yml`.

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

Playbooks: idempotent ssenarileri

Umumy pleýbukyň mysaly:
yaml playbooks/site. yml
- hosts: all gather_facts: true become: true roles:
- hardening

- hosts: web become: true roles:
- webapp
'Webapp' (bölekler):
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
Hendlerler:
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 we üýtgeýän şablonlar

Defolt üýtgewlerini 'defaults/main' -de saklaň. yml ', duýgur - Vault.
Süzgüçleri ('| to_nice_yaml',' | b64encode ',' | default ') we' when 'şertlerini ulanyň.

Mysal '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 }};
}
}
}

Syrlar: Ansible Vault we gizlin dolandyryjylar

Üýtgeýän faýllary şifrlemek üçin Vault ('group _ vars/all. vault. yml`).
Daşarky dolandyryjylaryň (KMS/Secrets Manager/SSM) syrlaryny degişli modullar arkaly okamak we Vault-da diňe baglanyşyklary/ARN saklamak has gowudyr.

Şifrlenen faýl (gurluşyň mysaly):
yaml group_vars/all. vault. yml (ansible-vault encrypted)
webapp_db_password: "..."
jwt_signing_key: "..."
Teklipler:
  • Elýeterliligi bölüň: işläp düzüjiler dev/stage görýärler, diňe CI.
  • Syrlaryň aýlanmagyny we giriş barlagyny goşuň.

Idempotentlik we dogry üýtgeşmeler

'shell/command' ýerine modullary ('package', 'user', 'lineinfile', 'template', 'systemd') ulanyň.
"Şowhunly" meseleleri 'changed _ when: false' diýip belläň.
Rollar üçin "check mode" ('--check') we "diff" -ni saklaň.
Durnuksyz meseleler üçin: 'retries', 'delay', 'until'.

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

Öndürijilik: uly fermalar we pikler

forks: paralelligi ýokarlandyryň (seresaplylyk bilen: nyşany artykmaç ýüklemäň).
strategy = free - goňşularyňyza garaşman ýerine ýetiriň.
pipelining = True в `ansible. cfg 'RTT-ni azaldar.
gather_facts gerek bolmadyk ýerinde: false.
uzak amallar üçin async/poll; deploi tolkunlary üçin throttle/serial.
Aýry-aýry hereketler üçin delegate_to we run_once (mysal üçin, DB migrasiýasy).

Nol downtaým patternleri

Rolling-deploy (hersi 20%)

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

Canary

Playbuky '-limit web-canary' (toparyň kiçi köplügi) bilen açyň, metriklere göz aýlaň, soňra tutuş topara ýaýlaň.

Blue-Green

Hostlaryň iki topary 'web _ blue' we 'web _ green'; täze tolkuny pleýbukda taýýarlaň, soň bolsa 'community' meselesi bilen traffigi (DNS/LB) geçiriň. general. Balanslaýjyňyzyň affiliate_lb'/API.

Howpsuzlyk we hardening

Hardening roly: SSH syýasaty, bannerler, 'sudo' olmadan NOPASSWD, firewall, auditd/rsyslog, time-NTP, 'fail2ban'.
SELinux/AppArmor-y açyň, modullar arkaly syýasatlary dolandyryň.
Bastion: SSH-ni diňe jump-host arkaly çäklendiriň ('ProxyJump' -a serediň).
Iň az 'become: true'; inwentar derejesinde RBAC-ny düzüň (kim haýsy pleýbuklary işe girizip biler).

Windows we tor enjamlary

Windows: 'win _' modullary, WinRM baglanyşygy, PowerShell skriptleri - iň soňky argument hökmünde.
Network: 'network _ cli '/' httpapi', Cisco/Juniper/F5 üçin modullar; 'save _ when: changed' arkaly atomlar.

Synag we hili

ansible-lint + yamllint в CI.
Molecule: rollaryň lokal/konteýner synaglary, idempotentligi barlamak (üýtgemän goşa geçmek).
Sandbox: aýry-aýry wagtlaýyn inwentarlar/VM şekilleri.

Molecule mysaly (bölek):
yaml provisioner:
name: ansible verifier:
name: ansible scenario:
name: default

CI/CD we GitOps bilen integrasiýa

Adaty ulanyjy:

1. Lint → Syntax check → Molecule.

2. Programmanyň artefaktlaryny düzmek.

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

4. Üýtgedilen hostlar boýunça hasabat, log artefaktı.

Ädimiň mysaly (düşünje):
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

Gözegçilik we audit

Callback pluginlerini (json/yaml/timer/profile_tasks) birikdiriň - wagt we üýtgeşmeler baradaky hasabatlar.
Pleýbuklaryň ýazgylaryny merkezleşdirilen ammarda saklaň.
Seçip başlamak we derňewi çaltlaşdyrmak üçin 'tags:' meselelerini belläň.

iGaming üçin ýygy-ýygydan reseptler

Web/API nod: Nginx + systemd-unit, health-checks, secrets of manager, roll-restart.
Game-services: 'group _ vars' arkaly sebitler/tenantlar boýunça konfigurasiýa şablonlary.
Töleg konnektorlary: açarlara berk permishenalar, notify boýunça täzeden başlamak, endpointleriň post-barlagy.
ETL joblary: CronJob skriptlerini c 'cron' moduly, idempotent lock faýly bilen ýerleşdirmek.
Gözegçilik: agentleri oturtmak (node_exporter/otelcol), monitoringde awto-hasaba almak).

Anti-patternler

Modul bar ýerinde 'shell/command' ulanyň.
Pleybuklar 'handlers' → goşmaça restartlar we hyzmatlaryň titremesi.
Açyk 'group _ vars' -da syrlary saklamak.
"serial "/" max _ fail _ percentage" ýoklugy.
Global 'gather _ facts: true' we 'become: true' gerek däl.
Molecule synaglarsyz we goldawsyz rollar '--check'.
Tutuş tolkuny bloklaýan 'async/poll' -siz uzyn buýruklar.

Giriş barlagy

1. Ammar we naming-konwensiýanyň çarçuwasyny ylalaşyň.
2. Dinamiki inwentary we bastiony sazlaň.
3. Kolleksiýalaryň rollaryny (webapp/hardening/monitoring) we pin wersiýalaryny başla.
4. Gizlin dolandyryjy bilen Vault we/ýa-da integrasiýany açyň.
5. Idempotentligi üpjün et, '--check/--diff', handlers & tags.
6. CI-e ansible-lint, yamllint, molecule birikdiriň.
7. Deploýyň nusgasyny (rolling/canary/blue-green) we "serial" çäklerini suratlandyryň.
8. Callback pluginlerini, loglary, üýtgeşmeler hasabatyny goşuň.
9. Runbook we rebooks we wakalary resminamalaşdyrmak.
10. Yzygiderli oýun-day geçiriň: SSH-iň döwülmegi, nodanyň ýykylmagy, wersiýanyň yzyna gaýtarylmagy.

Netijeler

"Ansible" döredilen infrastruktura bilen işleýän iýmitiň arasyndaky "soňky mili" ýapýar: konfigurasiýalaryň we goýberilişleriň çalt, howpsuz we öňünden aýdyp boljak üýtgemeleri. Iň az gaýtadan ulanyş birligi, dinamiki inwentarlar, syrlar bilen dogry işlemek we nol aşak düşmegiň tassyklanan nusgalary hökmünde Ansible iGaming toparlaryna Wagt-Deploýy azaltmaga, gijeki hadysalaryň sanyny azaltmaga we SLO derejesinde p99 saklamaga kömek edýär.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Telegram
@Gamble_GC
Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.