GH GambleHub

הגדרה ופריסה

(סעיף: טכנולוגיה ותשתיות)

תקציר

Ansible היא תצורה הצהרתית וכלי תזמור אידיאלי לתצורה חוזרת של VMs/מארחים, שירותים ויישומים כאשר התשתית כבר נוצרה (Terraform/IAC) ואתה צריך ”להחיות” את הסביבה: להתקין חבילות, לגלגל את השחרור, לגלגל תבניות, לשקם שירותים ללא הפסקה, ליישם מדיניות אבטחה. מפתח להצלחה: מבנה מודולרי (תפקידים/אוספים), אידמפוטנטיות קפדנית, עבודה מסודרת עם סודות (Vault), מלאי דינמי, בדיקות ודיסציפלינות GitOps.

מתי הוא Anable מתאים (ואיך זה מתאים עם Terraform)

Terraform - יוצר משאבים (VPC, אשכולות, מסדי נתונים).
Ansible - הגדרות מערכת ההפעלה/תוכנה, מגלגל גרסאות, מניע נדודים, עורך קבצים ושירותים.
קישור: תפוקות Terraform 'מלאי '/IP/סודות לחפצים, Ansible קורא אותם בצעד תקליטור.

מבנה המאגר (תבנית מומלצת)


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
בלתי הפיך. cfg (מינימום):
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

מלאי: סטטי ודינמי

סטטי (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'

דינמי

השתמש בתוסף ענן (או בתסריט שלך) כדי לתייג מארחים. משתני סביבה/תגית _ "group _ vars'.

תפקידים ואוספים

תפקיד = מודול שימוש חוזר עצמאי (משימות, קבצים, תבניות, מפעילים).
אוספים - סט תפקידים/תוספים/מודולים. תקן סיכות גרסה באוספים/דרישות. Yml'.

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

ספרי שעשועים: תסריטים מפוארים

דוגמה לספר מהלכים כללי:
yaml playbooks/site. yml
- hosts: all gather_facts: true become: true roles:
- hardening

- hosts: web become: true roles:
- webapp
'Webapp' role (שברים):
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
מפעילים:
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 תבניות ומשתנים

אחסן משתני ברירת מחדל ברירות מחדל/ראשי. כן, רגיש בכספת.
השתמש במסננים (”| to_nice_yaml',' | b64code”, ”| ברירת מחדל”) ובתנאים ”מתי”.

דוגמה 'nginx. Confj2 ':
jinja2 worker_processes auto;
http {
server {
listen 80;
server_name {{ inventory_hostname }};
location / {
proxy_pass http://127. 0. 0. 1:{{ webapp_port }};
}
}
}

סודות: כספת סודית ומנהלים סודיים

כספת להצפנת קבצים משתנים ("group _ vars/all. כספת. yml').
עדיף לקרוא סודות ממנהלים חיצוניים (KMS/Secrets Manager/SSM) דרך המודולים המתאימים ולאחסן רק קישורים/ARN בכספת.

קובץ מוצפן (מבנה לדוגמה):
yaml group_vars/all. vault. yml (ansible-vault encrypted)
webapp_db_password: "..."
jwt_signing_key: "..."
המלצות:
  • גישה משותפת: המפתחים רואים dev/stage, prod - רק CI.
  • אפשר סיבוב סודי וביקורת גישה.

אידמפוטנטיות ושינויים נכונים

השתמש במודולים ("חבילה", "משתמש", "lineinfile", "תבנית", "systemd') במקום" מעטפת/פקודה ".
מארק "רועש" משימות "השתנה _ כאשר: כוזב אם הם לא משנים דבר.
מצב סימון תמיכה (”- - check”) ודיפ לתפקידים.
למשימות לא יציבות: ”חזרה”, ”עיכוב”, ”עד”.

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

ביצועים: חוות גדולות ופסגות

מזלגות: להעלות במקביל (זהירות: לא להעמיס יעד).
אסטרטגיה = משימות ללא ביצוע ללא המתנה לשכנים.
הצנרת = ממש בלתי הפיך. Cfg 'מפחית RTT.
gather_facts: עובדות כוזבות אינן נחוצות.
אסינק/סקר למבצעים ארוכי טווח; מצערת/סדרתי לפרוס גלים.
delegate_to run_once לפעולות בודדות (למשל, נדידת מסדי נתונים).

אפס דפוסי זמן השבתה

פריסה מתגלגלת (20% כל אחד)

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

קנרית

הפעל את ספר המהלכים עם '- limit web-canary' (תת-קבוצה של הקבוצה), בדוק את המדדים, ולאחר מכן גלגל החוצה לכל הקבוצה.

כחול-ירוק

שתי קבוצות מארחים "web _ blue 'ו-" web _ green "; להכין גל חדש עם ספר משחקים, ואז לעבור תנועה (DNS/LB) עם 'המשימה הקהילתית. גנרל. affiliate_lb'/API המאזן שלך.

ביטחון והתקשות

תפקיד מקשה: מדיניות SSH, כרזות, 'סודו' ללא NOPASWD, חומת אש, שמע/רסילוג, זמן NTP, 'כשל'.
אפשר SELinux/AppArmor, מנהל מדיניות באמצעות מודולים.
Bastion: הגבלת SSH למטרות באמצעות מנחה קפיצה בלבד (ראה ”ProxyJump”).
למזער ”להיות: אמיתי”; לצייר RBAC ברמת המלאי (מי יכול להפעיל אילו ספרי משחק).

חלונות וחומרת רשת

חלונות: מודולים ”win _”, חיבור WinRM, תסריטי PowerShell - כטיעון האחרון.
רשת: ”network _ cli ”/” httpapi”, מודולים עבור Cisco/Juniper/F5; אטומיטי באמצעות 'להציל _ כאשר: השתנה'.

בדיקה ואיכות

מוך אנטי + יאמלינט CI.
מולקולה: בדיקות תפקידים מקומיות/מכולות, בדיקת אידמפוטנטיות (ריצה כפולה ללא שינוי).
ארגז חול: רשימת מלאי זמנית של VM/תמונות.

מולקולה לדוגמה (מקטע):
yaml provisioner:
name: ansible verifier:
name: ansible scenario:
name: default

אינטגרציה עם CI/CD ו GitOps

קו צינור טיפוסי:

1. Syntax Syntax לבדוק את המולקולה.

2. בניית חפצי יישום.

3. פריסה: "Ansible-playbook - i מלאי/prod אתר. yml - limit web - תגים לפרוס '.

4. דו "ח על מארחים שונים, חפץ של יומנים.

צעד לדוגמה (מושג):
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

תצפית וביקורת חשבונות

חבר תוסף callback (json/yaml/timer/profile_tasks) - דיווחים על זמן ושינויים.
שמור יומני משחק לאחסון מרוכז.
תגי תווית: "משימות לריצות סלקטיביות וזירוז חקירות.

מתכונים תכופים עבור iGaming

צומת Web/API: Nginx + systemd-unit, בדיקות בריאות, סודות מהמנהל, הפעלה מחדש.
שירותי משחק: הגדרות תבניות על ידי אזור/דיירים באמצעות 'group _ vars'.
מחברים תשלום: אלה קפדניים עבור מפתחות, להפעיל מחדש על ידי להודיע, לאחר בדיקה של נקודות קצה.
עבודות ETL: פריסת תסריטי CronJob עם 'cron' מודול, קובץ מנעול idempotent.
ניטור: התקנת סוכנים (node_exporter/otelcol), רישום אוטומטי בניטור.

Antipatterns

משתמש ב ”מעטפת/פקודה” היכן שיש מודול.
חוברות משחקים ללא ”מפעילים”.
מאחסן סודות בפומבי 'group _ vars'.
היעדר 'serial '/' max _ fall _ אחוז' during גל ייצור דלדול.
Global 'לאסוף _ עובדות: נכון' ו 'להיות: נכון' שלא לצורך.
תפקידים בלי מבחני מולקולה ובלי תמיכה.
פקודות ארוכות בלי ”אסינק/סקר” חוסמות את כל הגל.

רשימת יישומים

1. מסכים על מסגרת המאגר ומוסכמות שמות.
2. הגדרת מלאי דינמי ובסיס.
3. צור תפקידים (webapp/hardening/neuter) וגרסאות סיכות של אוספים.
4. אפשר כספת ו/או אינטגרציה עם המנהל הסודי.
5. ודא אידמפוטנטיות, '- צ' ק/- diff ', מפעילים ותגים.
6. לחבר מוך-קצה, יאמלינט, מולקולה למודיעה.
7. תאר את תבנית הפריסה (גלגול/קנרית/כחול-ירוק) ואת גבולות ה ”סריאל”.
8. הוסף תוספי קריאה לאחור, אוסף רישומים, דוח שינוי.
9. מסמכי גלגול חשבונות ופעולות תקרית.
10. יום משחק קבוע: הפסקת SSH, צומת טיפה, גירסה רולבק.

תוצאות

ניתן לסגור את ”הקילומטר האחרון” בין התשתית שנוצרה לבין המכירות שפועלות: שינויים מהירים, מאובטחים וצפויים לתצורות ולשחרורים. עם תפקיד כיחידת שימוש חוזר מינימלי, מלאי דינמי, טיפול סודי נכון, ודפוסי אפס-השבתה מאומתים, Ansible עוזר לצוותי iGaming להפחית זמן-לפרוס, להפחית תקריות לילה, ולשמור p99 ברמת SLO.

Contact

צרו קשר

פנו אלינו בכל שאלה או צורך בתמיכה.אנחנו תמיד כאן כדי לעזור.

Telegram
@Gamble_GC
התחלת אינטגרציה

Email הוא חובה. Telegram או WhatsApp — אופציונליים.

השם שלכם לא חובה
Email לא חובה
נושא לא חובה
הודעה לא חובה
Telegram לא חובה
@
אם תציינו Telegram — נענה גם שם, בנוסף ל-Email.
WhatsApp לא חובה
פורמט: קידומת מדינה ומספר (לדוגמה, +972XXXXXXXXX).

בלחיצה על הכפתור אתם מסכימים לעיבוד הנתונים שלכם.