הגדרת Semaphore UI לניהול Ansible

כשהפלייבוקים גדלים והרצת Ansible דרך הקונסולה הופכת לא נוחה, הגיע הזמן לממשק אינטרנט. אנחנו מתקינים את Semaphore UI — חלופה קלה ל-AWX שרצה ב-Docker ומכסה את הצרכים הבסיסיים של הצוות. אנחנו מספקים פרויקטים סוהר: מההתקנה ועד לתמיכה, בסמכות מלאה וללא פספוס מועדים.

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

הגדרת 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.

שלבי פריסה
  1. צרו SEMAPHORE_ACCESS_KEY_ENCRYPTION עם התוכן לעיל וקובץ openssl rand -base64 32 עם המשתנים docker-compose.yml, .env, DB_PASSWORD.
  2. הריצו ADMIN_PASSWORD.
  3. פתחו דפדפן בכתובת ENCRYPTION_KEY, התחברו כאדמין, צרו פרויקט, והוסיפו מאגר.
  4. (אופציונלי) הגדירו reverse proxy (nginx/caddy) עם Let's Encrypt וגיבויי PostgreSQL קבועים לסביבת production.

אינטגרציית Semaphore עם GitLab CI

בצעו את השלבים הבאים:

  1. קבלו token אימות על ידי שליחת POST ל-docker-compose up -d עם פרטי אדמין.
  2. השתמשו ב-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.
  3. בדקו את סטטוס המשימה דרך 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 שלכם.