GH GambleHub

Możliwe: konfiguracja i wdrożenie

(Sekcja: Technologia i infrastruktura)

Krótkie podsumowanie

Ansible jest deklaratywnym narzędziem konfiguracji i orkiestrowania idealnym do wielokrotnej konfiguracji maszyn wirtualnych/hostów, usług i aplikacji, gdy infrastruktura została już utworzona (Terraform/IaC) i trzeba „ożywić” środowisko: zainstalować pakiety, uruchomić wydanie, rozwinąć szablony, ponownie uruchomić usługi bez czas przestoju, stosować zasady bezpieczeństwa. Klucz do sukcesu: modułowa struktura (role/kolekcje), ścisła idempotencja, schludna praca z tajemnicami (Vault), dynamiczna inwentaryzacja, testowanie i dyscyplina GitOps.

Kiedy jest odpowiedni Ansible (i jak pasuje do Terraform)

Terraform - tworzy zasoby (VPC, klastry, bazy danych).
Ansible - konfiguruje system operacyjny/oprogramowanie, rozwija wersje, napędza migracje, edytuje pliki i usługi.
Link: Wyjścia terraform 'inventory '/IP/secrets do artefaktów, Ansible czyta je w kroku CD.

Struktura repozytorium (zalecany szablon)


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
możliwy do zrealizowania. cfg (minimum):
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

Zapasy: statyczne i dynamiczne

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

Dynamiczny

Użyj wtyczek w chmurze (lub własnego skryptu) do oznaczania hostów. Zmienne środowiskowe/znaczniki → 'group _ vars'.

Role i kolekcje

Role = niezależny moduł ponownego użycia (zadania, pliki, szablony, obsługujące).
Kolekcje - zestaw ról/wtyczek/modułów. Naprawić piny wersji w 'kolekcjach/wymaganiach. yml'.

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

Playbooks: Idempotentne skrypty

Przykład ogólnego odtwarzania:
yaml playbooks/site. yml
- hosts: all gather_facts: true become: true roles:
- hardening

- hosts: web become: true roles:
- webapp
"Webapp 'role (fragmenty):
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
Obsługujący:
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 szablony i zmienne

Zapisz domyślne zmienne w 'defaults/main. yml', wrażliwy - w Skarbcu.
Użyj filtrów ('| to_nice_yaml',' | b64encode', '| default') i 'when'.

Przykład 'nginx. konf. j2 ":
jinja2 worker_processes auto;
http {
server {
listen 80;
server_name {{ inventory_hostname }};
location / {
proxy_pass http://127. 0. 0. 1:{{ webapp_port }};
}
}
}

Tajemnice: Skarbiec i sekretni menedżerowie

Skarbiec do szyfrowania plików zmiennych ('group _ vars/all. skarbiec. yml').
Lepiej jest czytać sekrety zewnętrznych menedżerów (KMS/Secrets Manager/SSM) za pomocą odpowiednich modułów i przechowywać tylko linki/ARN w skarbcu.

Zaszyfrowany plik (przykładowa struktura):
yaml group_vars/all. vault. yml (ansible-vault encrypted)
webapp_db_password: "..."
jwt_signing_key: "..."
Zalecenia:
  • Dostęp do udostępniania: deweloperzy patrz dev/stage, prod - tylko CI.
  • Włącz tajny obrót i audyt dostępu.

Idempotencja i poprawne zmiany

Użyj modułów ('pakiet', 'użytkownik', 'lineinfile', 'template', 'systemd') zamiast 'shell/command'.
Mark „noisy” tasks 'changed _ when: false' if nie zmieniają niczego.
Obsługa trybu kontroli ('--check') i diff dla ról.
Dla zadań niestabilnych: 'retries', 'delay', 'until'.

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

Wydajność: Duże gospodarstwa i szczyty

widelce: podnieść współistnienie (uwaga: nie przeciążać cel).
strategy = free-Execute zadania bez oczekiwania na sąsiadów.
rurociągi = Prawdziwe „przybliżone”. cfg 'redukuje RTT.
gather_facts: fałszywe, gdzie fakty są niepotrzebne.
async/sondaż dla operacji długoterminowych; przepustnica/serial dla fal wdrożeniowych.
delegate_to i run_once dla pojedynczych działań (na przykład migracja baz danych).

Zero przestojów

Rolling Deploy (po 20%)

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

Kanaryjski

Uruchom książkę odtwarzania z '--limit web-canary' (podzbiór grupy), sprawdź metryki, a następnie zwiń do całej grupy.

Niebiesko-zielony

Dwie grupy hostów 'web _ blue' i 'web _ green'; przygotować nową falę z odtwarzaczem, a następnie przełączyć ruch (DNS/LB) z "zadaniem społecznościowym. ogólne. affiliate_lb'/API twój balancer.

Bezpieczeństwo i utwardzanie

Utwardzanie roli: zasady SSH, banery, 'sudo' bez NOPASSWD, firewall, auditd/rsyslog, time-NTP, 'fail2ban'.
Włącz SELinux/AppArmor, zarządzaj zasadami za pomocą modułów.
Bastion: Ograniczyć SSH do celów tylko poprzez skok-host (patrz „ProxyJump”).
Zminimalizuj 'become: true'; sporządzić RBAC na poziomie inwentarza (kto może uruchomić które playbooks).

Okna i sprzęt sieciowy

Windows: moduły 'win _', połączenie WinRM, skrypty PowerShell - jako ostatni argument.
Sieć: 'network _ cli '/' httpapi', moduły do Cisco/Juniper/F5; atomowość poprzez 'save _ when: changed'.

Testowanie i jakość

ansible-lint + yamllint бCI.
Cząsteczka: lokalne/kontenerowe testy ról, sprawdzenie emocjonalności (podwójny przebieg bez zmian).
Piaskownica: indywidualne tymczasowe zapasy/obrazy VM.

Przykład Cząsteczka (fragment):
yaml provisioner:
name: ansible verifier:
name: ansible scenario:
name: default

Integracja z CI/CD i GitOps

Typowy rurociąg:

1. Lint → Syntax sprawdzić → Molekuła.

2. Artefakty aplikacji budowlanych.

3. Wdrożenie: 'dowolny-playbook -i zapasy/prod witryny. yml --limit web --tags deploy '.

4. Raport o zmienionych gospodarzy, artefakcie dzienników.

Przykład krok (koncepcja):
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

Obserwowalność i audyt

Podłącz wtyczki zwrotne (json/yaml/timer/profile_tasks) - raporty dotyczące czasu i zmian.
Zapisz dzienniki odtwarzania do scentralizowanej pamięci.
Etykieta „tagi:” zadania dla wybiórczych przebiegów i przyspieszonych dochodzeń.

Częste przepisy na iGaming

Węzeł Web/API: Nginx + systemd-unit, health-checks, secrets from the manager, roll-restart.
Usługi gry: szablony konfiguracyjne według regionu/najemców za pośrednictwem 'group _ vars'.
Złącza płatnicze: ścisłe dla kluczy, uruchom ponownie poprzez powiadomienie, po sprawdzeniu punktów końcowych.
Zadania ETL: wdrożenie skryptów CronJob z modułem 'cron', plik blokady idempotentnej.
Monitorowanie: instalacja agentów (node_exporter/otelcol), automatyczna rejestracja w monitoringu.

Antypattery

Używanie 'shell/command', gdzie jest moduł.
Playbooks bez 'handlers' → niepotrzebne ponowne uruchamianie i obsługa jitter.
Przechowywanie tajemnic w publicznym 'group _ vars'.
Brak wyczerpania fali produkcyjnej 'serial '/' max _ fail _ percentage'.
Globalne 'gather _ facts: true' i 'become: true' niepotrzebnie.
Role bez testów molekularnych i bez wsparcia '--check'.
Długie polecenia bez „async/sondaż” blokującego całą falę.

Lista kontrolna implementacji

1. Uzgodnić ramy repozytorium i nazewnictwo konwencji.
2. Skonfiguruj dynamiczny inwentarz i bastion.
3. Tworzenie ról (webapp/hartowanie/monitorowanie) i pin wersje kolekcji.
4. Włącz oprogramowanie Skarbiec i/lub integrację z programem Secret Manager.
5. Zapewnij idempotencję, '--check/--diff', obsługę i znaczniki.
6. Podłącz mrówkę, yamllint, molekułę do CI.
7. Opisać wzorzec rozmieszczenia (rolling/canary/blue-green) i granice 'serial'.
8. Dodaj wtyczki zwrotne, zbiór dzienników, zmień raport.
9. Książki startowe i działania związane z wypadkami.
10. Regularnie trzymaj grę-day: break SSH, kropla węzła, rolka wersji.

Wyniki

Ansible zamyka „ostatnią milę” pomiędzy stworzoną infrastrukturą a działającą sprzedażą: szybkie, bezpieczne i przewidywalne zmiany w konfiguracjach i wersjach. Z roli jako jednostki minimalnego ponownego użycia, inwentaryzacji dynamicznej, prawidłowej tajnej obsługi i zweryfikowanych zerowych przestojów, Ansible pomaga zespołom iGaming zmniejszyć czas do wdrożenia, zmniejszyć incydenty nocne i utrzymać p99 na poziomie SLO.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Telegram
@Gamble_GC
Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.