הגדרת Semaphore UI לניהול Ansible
לעתים קרובות אנו נתקלים בתרחיש הבא: צוות משתמש ב-Ansible, אך הפעלת playbooks דרך הקונסולה הופכת לבלתי נוחה כאשר יש יותר מחמישה playbooks ושלושה מהנדסים. AWX מרגיש כבד ודורש Kubernetes או VM גדול. [Semaphore UI](https://github.com/ansible-semaphore/semaphore) היא חלופה חינמית וחסכונית במשאבים. היא רצה בקונטיינר Docker יחיד, צורכת פחות מ-512 MB RAM במצב סרק, ומכסה צרכים בסיסיים: אחסון מפתחות SSH, מלאי (inventories), הפעלת playbooks מבוססת web, לוחות זמנים, והיסטוריית ביצוע. Semaphore שונה מ-AWX בכך שהיא קלה ופשוטה. היא רצה בקונטיינר Docker יחיד וצורכת פחות מ-512 MB RAM, בעוד AWX דורש Kubernetes או VM גדול. Semaphore מתאימה לצוותים של 2–5 מהנדסים עם עד תריסר playbooks, שבהם אין צורך בהיררכיות הרשאות מורכבות. מניסיוננו, פריסת Semaphore עולה פי 3–4 פחות מ-AWX, עם פונקציונליות דומה לצוותים קטנים. עבור צוות של 3 מהנדסים, Semaphore חוסכת עד $450 לחודש בעלויות תשתית בהשוואה ל-AWX (VPS בעלות $10 לחודש עבור Semaphore לעומת שרת בעלות $50 לחודש עבור AWX). באמצעות Semaphore, צוות של 3 מהנדסים יכול להפחית עלויות תשתית בעד 90% בהשוואה ל-AWX.
הניסיון שלנו מראה ש-Semaphore מתאימה באופן מושלם במקומות שבהם אין צורך בטפסי Survey או RBAC מורכב ברמת המשימה. אם יש לכם 2–5 מהנדסים ועד 20 playbooks, Semaphore מתמודדת עם 100%. ואם אתם צריכים אינטגרציה עם GitLab CI, אנו מוסיפים REST API והכל עובד בצורה חלקה.
איך Semaphore משתווה ל-AWX?
Semaphore פשוטה יותר לפריסה ולתחזוקה. השוו מאפיינים מרכזיים:
| פרמטר | Semaphore | AWX |
|---|---|---|
| משאבים | 512 MB RAM, 1 vCPU | 4 GB RAM, 2 vCPU (מומלץ) |
| סביבה | קונטיינר Docker אחד + PostgreSQL | אשכול Kubernetes או Podman |
| RBAC | תפקידים ברמת פרויקט | תפקידים ברמת פרויקט, ארגון ומשאבים |
| טפסי Survey | לא (פרמטרים דרך Environment JSON) | טפסי web עם ולידציה |
| Smart Inventory | לא | כן (מבוסס על Ansible facts) |
| אינטגרציית CI/CD | REST API (פשוט) | REST API + webhooks + מודולים |
| זמן פריסה | 1–3 ימים | 1–2 שבועות |
| עלות תשתית חודשית | ~$50 לצוות קטן | $200–$500 כולל משאבי אשכול |
Semaphore נפרסת הרבה יותר מהר וצורכת פחות זיכרון משמעותית. למעשה, Semaphore טובה פי 8 מ-AWX ביעילות משאבים, צורכת רק 512 MB RAM לעומת 4 GB עבור AWX. פריסת Semaphore מהירה פי 3–4 מ-AWX. עבור צוותים קטנים, זהו גורם מכריע.
איך לפרוס את Semaphore ביום אחד?
הכנו docker-compose.yml סטנדרטי שמפעיל את Semaphore עם PostgreSQL. נקודה מרכזית: יצירת SEMAPHORE_ACCESS_KEY_ENCRYPTION:
תצורת Docker Compose
---
# docker-compose.yml
services:
semaphore:
image: semaphoreui/semaphore:v2.10.22
environment:
SEMAPHORE_DB_DIALECT: postgres
SEMAPHORE_DB_HOST: postgres
SEMAPHORE_DB_PORT: 5432
SEMAPHORE_DB_USER: semaphore
SEMAPHORE_DB_PASS: ${DB_PASSWORD}
SEMAPHORE_DB: semaphore
SEMAPHORE_PLAYBOOK_PATH: /tmp/semaphore/
SEMAPHORE_ADMIN_PASSWORD: ${ADMIN_PASSWORD}
SEMAPHORE_ADMIN_NAME: admin
SEMAPHORE_ADMIN_EMAIL: [email protected]
SEMAPHORE_ADMIN: admin
SEMAPHORE_ACCESS_KEY_ENCRYPTION: ${ENCRYPTION_KEY}
TZ: Europe/Moscow
ports:
- "3000:3000"
depends_on:
- postgres
postgres:
image: postgres:15-alpine
environment:
POSTGRES_USER: semaphore
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: semaphore
volumes:
- pg_data:/var/lib/postgresql/data
# docker-compose.yml services: semaphore: image: semaphoreui/semaphore:v2.10.22 environment: SEMAPHORE_DB_DIALECT: postgres SEMAPHORE_DB_HOST: postgres SEMAPHORE_DB_PORT: 5432 SEMAPHORE_DB_USER: semaphore SEMAPHORE_DB_PASS: ${DB_PASSWORD} SEMAPHORE_DB: semaphore SEMAPHORE_PLAYBOOK_PATH: /tmp/semaphore/ SEMAPHORE_ADMIN_PASSWORD: ${ADMIN_PASSWORD} SEMAPHORE_ADMIN_NAME: admin SEMAPHORE_ADMIN_EMAIL: [email protected] SEMAPHORE_ADMIN: admin SEMAPHORE_ACCESS_KEY_ENCRYPTION: ${ENCRYPTION_KEY} TZ: Europe/Moscow ports: - "3000:3000" depends_on: - postgres postgres: image: postgres:15-alpine environment: POSTGRES_USER: semaphore POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_DB: semaphore volumes: - pg_data:/var/lib/postgresql/data — מפתח בן 32 תווים. צרו אותו פעם אחת:
openssl rand -base64 32 לאחר ההפעלה, גשו לפורט 3000, צרו פרויקט, והוסיפו מאגר playbooks.
שלבי פריסה
- צרו
SEMAPHORE_ACCESS_KEY_ENCRYPTIONעם התוכן לעיל וקובץopenssl rand -base64 32עם המשתניםdocker-compose.yml,.env,DB_PASSWORD. - הריצו
ADMIN_PASSWORD. - פתחו דפדפן בכתובת
ENCRYPTION_KEY, התחברו כאדמין, צרו פרויקט, והוסיפו מאגר. - (אופציונלי) הגדירו reverse proxy (nginx/caddy) עם Let's Encrypt וגיבויי PostgreSQL קבועים לסביבת production.
אינטגרציית Semaphore עם GitLab CI
בצעו את השלבים הבאים:
- קבלו token אימות על ידי שליחת POST ל-
docker-compose up -dעם פרטי אדמין. - השתמשו ב-token כדי להפעיל משימה דרך POST ל-
http://localhost:3000עם# Получить token TOKEN=$(curl -s -X POST https://semaphore.mycompany.com/api/auth/login \ -H "Content-Type: application/json" \ -d '{"auth": "admin", "password": "'$SEMAPHORE_ADMIN_PASSWORD'"}' \ | jq -r '.token') # Запустить Task Template с ID=5 curl -X POST https://semaphore.mycompany.com/api/project/1/tasks \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "template_id": 5, "environment": "{\"app_version\": \"'"$CI_COMMIT_TAG"'\"}", "message": "Deploy from CI: '"$CI_COMMIT_SHA"'" }',environment, ו-message. - בדקו את סטטוס המשימה דרך GET או הגדירו webhook לקבלת התראות.
סקריפט לדוגמה:
# Получить token
TOKEN=$(curl -s -X POST https://semaphore.mycompany.com/api/auth/login \
-H "Content-Type: application/json" \
-d '{"auth": "admin", "password": "'$SEMAPHORE_ADMIN_PASSWORD'"}' \
| jq -r '.token')
# Запустить Task Template с ID=5
curl -X POST https://semaphore.mycompany.com/api/project/1/tasks \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{ "template_id": 5, "environment": "{\"app_version\": \"'"$CI_COMMIT_TAG"'\"}", "message": "Deploy from CI: '"$CI_COMMIT_SHA"'" }' רכיבי הליבה של Semaphore
| רכיב | מטרה |
|---|---|
| מאגר מפתחות | מפתחות SSH וסיסמאות, מוצפנים במסד הנתונים |
| מלאי (Inventory) | מארחים מנוהלים (YAML/INI סטטי או דינמי) |
| סביבה (Environment) | משתני סביבה (extra_vars), מאוחסנים כ-JSON |
| מאגר (Repository) | מאגר Git עם playbooks של Ansible |
| תבנית משימה | קישור: מאגר + playbook + מלאי + מפתח + סביבה |
תוצרי יישום סוהר
כאשר אתם מזמינים מאיתנו פריסת Semaphore, אנו מספקים:
- פריסת Semaphore + PostgreSQL (Docker או bare metal)
- הגדרת הצפנת מפתחות ואינטגרציה עם ה-Git שלכם (GitHub, GitLab, Bitbucket)
- יצירת פרויקטים, מלאים, מפתחות ותבניות משימה
- אינטגרציה עם CI/CD (סקריפטים לדוגמה)
- תיעוד אדמין ותרחישי rollback
- הדרכת צוות (1–2 שעות)
- אחריות לשבועיים לאחר המסירה
- הגדרת ניטור והגדרת גיבוי PostgreSQL
לוח זמנים: 1 עד 3 ימים תלוי במספר הפרויקטים. לצוות שלנו ניסיון של למעלה מ-8 שנים וביצענו 50+ פרויקטי Semaphore. אנו מספקים פתרונות סוהר שמנהלים עד 500 שרתים בקלות.
מגבלות Semaphore לעומת AWX
Semaphore פשוטה יותר — זה גם יתרון וגם חיסרון. אין טפסי Survey (פרמטרים דרך Environment JSON), Smart Inventory, או RBAC ברמת playbook. עבור צוותים גדולים עם פילוח גישה, AWX עדיפה. אבל עבור 2–5 מהנדסים ותריסר playbooks, Semaphore היא הבחירה הנכונה. הזמינו פיילוט — נראה לכם איך Semaphore עובדת עם ה-playbooks שלכם.







