הגדרת Rundeck לניהול משימות מרכזי
הערה: כאשר מנהל צוות מקבל בקשה לאפשר למפעילי תמיכה להפעיל מחדש שירותים ללא מתן מפתחות SSH — Rundeck הופך לקונסולה המרכזית. אנו פורסים את Rundeck כפתרון מוכן: מגדירים משימות, הרשאות גישה ורישום לוגים. הצוות מריץ משימות דרך ממשק האינטרנט, והמהנדסים רואים את לוג הביצוע המלא. Rundeck פועל כשער בין משתמשים לשרתים, ושולט בכל פעולה. אנו מבטיחים בידוד גישה — מפעילים לא מקבלים גישה ישירה ל-shell. הטמעת Rundeck מפחיתה את ה-MTTR ב-40% לפי נתוני פרויקט פנימיים. מתזמן Rundeck מאפשר הרצת משימות לפי לוח זמנים, ואוטומציה של משימות שגרתיות: ניקוי לוגים, איסוף מדדים, הפעלה מחדש של שירותים. גישה מרכזית לשרתים דרך קונסולה אחת מפשטת את ביקורת המשימות למהנדסים.
כיצד Rundeck משתלב עם CI/CD
Rundeck מספק REST API להרצת משימות חיצונית. זה מאפשר להפעיל משימות מ-Jenkins, GitLab CI או GitHub Actions pipelines ללא גישה ישירה לשרת. לדוגמה, לאחר פריסת CI מוצלחת, ניתן להפעיל משימת Rundeck לבדיקת מצב השירות או ניקוי מטמון. אנו מגדירים אינטגרציות כאלה באמצעות התראות webhook ואסימוני אימות. תרחישים טיפוסיים כוללים הפעלה מחדש אוטומטית של שירות לאחר פריסה, התראות צוות דרך Slack על תקלות, וסנכרון מלאי עם CMDB.
פריסת Rundeck בסביבת Production
לסביבת production, אנו משתמשים ב-Docker Compose או Kubernetes. להלן קובץ docker-compose.yml טיפוסי עם PostgreSQL חיצוני:
דוגמה ל-docker-compose.yml
---
# docker-compose.yml
services:
rundeck:
image: rundeck/rundeck:5.3.0
environment:
RUNDECK_GRAILS_URL: https://rundeck.mycompany.com
RUNDECK_SERVER_FORWARDED: "true"
RUNDECK_DATABASE_DRIVER: org.postgresql.Driver
RUNDECK_DATABASE_URL: jdbc:postgresql://postgres:5432/rundeck
RUNDECK_DATABASE_USERNAME: rundeck
RUNDECK_DATABASE_PASSWORD: ${DB_PASSWORD}
RUNDECK_SECURITY_HTTPHEADERS_PROVIDER_CSP_ENABLED: "false"
volumes:
- rundeck_data:/home/rundeck/server/data
- ./etc/framework.properties:/home/rundeck/etc/framework.properties:ro
ports:
- "4440:4440"
depends_on:
- postgres
postgres:
image: postgres:15
environment:
POSTGRES_DB: rundeck
POSTGRES_USER: rundeck
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- pg_data:/var/lib/postgresql/data
ב-# docker-compose.yml services: rundeck: image: rundeck/rundeck:5.3.0 environment: RUNDECK_GRAILS_URL: https://rundeck.mycompany.com RUNDECK_SERVER_FORWARDED: "true" RUNDECK_DATABASE_DRIVER: org.postgresql.Driver RUNDECK_DATABASE_URL: jdbc:postgresql://postgres:5432/rundeck RUNDECK_DATABASE_USERNAME: rundeck RUNDECK_DATABASE_PASSWORD: ${DB_PASSWORD} RUNDECK_SECURITY_HTTPHEADERS_PROVIDER_CSP_ENABLED: "false" volumes: - rundeck_data:/home/rundeck/server/data - ./etc/framework.properties:/home/rundeck/etc/framework.properties:ro ports: - "4440:4440" depends_on: - postgres postgres: image: postgres:15 environment: POSTGRES_DB: rundeck POSTGRES_USER: rundeck POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - pg_data:/var/lib/postgresql/data — מקורות Node (מלאי שרתים) ומפתחות SSH:
framework.ssh.keypath=/home/rundeck/.ssh/rundeck-deploy
framework.ssh.user=deploy
framework.projects.dir=/home/rundeck/projects השוואת ארכיטקטורה: Standalone לעומת Cluster
| פרמטר | Standalone | Cluster |
|---|---|---|
| Nodes | 1 | 2-5 |
| מסד נתונים | H2 מובנה | PostgreSQL חיצוני |
| זמינות גבוהה | לא | כן, דרך מסד נתונים משותף |
| מתאים ל | צוותים קטנים (עד 10 מפעילים) | תשתיות גדולות (50+ שרתים) |
מדריך פריסה שלב אחר שלב
- ביקורת תשתית: רשימת שרתים, גרסאות מערכת הפעלה, נגישות SSH.
- בחירת ארכיטקטורה: standalone או cluster. עבור cluster, הגדר איזון עומסים דרך HAProxy.
- פריסה עם PostgreSQL, הגדרת אחסון מתמשך וגיבויים.
- ייבוא מפתחות SSH ל-Key Storage (לא על הדיסק).
- יצירת 10-15 משימות סטנדרטיות: הפעלה מחדש של שירות, ניקוי לוגים, איסוף מדדים, פריסת ארטיפקטים.
- הגדרת RBAC: קבוצות משתמשים (admin, developer, operator), מדיניות הפעלה.
- אינטגרציה עם מערכת התראות: Slack, דוא"ל, PagerDuty.
- תיעוד והדרכת צוות: סדנה של שעתיים, הוראות הפעלה.
הגדרת משימות כקוד (IaC)
משימות מיוצאות ב-YAML — זהו Infrastructure as Code למשימות. דוגמה למשימת "הפעלה מחדש של שירות יישום":
---
- id: restart-app-service
name: Restart Application Service
description: "Gracefully restart the application on target nodes"
group: Operations/Services
nodefilters:
dispatch:
threadcount: 5
keepgoing: false
excludePrecedence: true
filter: 'tags: app-server +env:${option.environment}'
options:
- name: environment
label: Environment
values: [staging, production]
required: true
enforced: true
- name: service_name
label: Service Name
default: myapp
required: true
sequence:
keepgoing: false
strategy: node-first
commands:
- script: |
#!/bin/bash
set -euo pipefail
SERVICE="${option.service_name}"
echo "Checking service status..."
systemctl is-active "$SERVICE" || { echo "Service not running"; exit 1; }
echo "Stopping $SERVICE..."
systemctl stop "$SERVICE"
sleep 2
echo "Starting $SERVICE..."
systemctl start "$SERVICE"
echo "Waiting for health check..."
sleep 5
systemctl is-active "$SERVICE" && echo "OK" || { echo "FAILED to start"; exit 1; }
notification:
onfailure:
plugin:
type: slack-incoming-webhook
configuration:
webhook_url: ${globals.slack_ops_webhook}
message: "Job FAILED: ${job.name} on ${node.name}"
onsuccess:
email:
recipients: [email protected]
subject: "Rundeck: ${job.name} completed"
---
framework.properties — סינון nodes לפי תגים עם החלפת אפשרויות מטופס ההפעלה. משימה אחת עובדת גם על staging וגם על production בהתאם לבחירה. אנו משתמשים ב-GitOps: משימות מנוהלות בגרסאות במאגר, ושינויים עוברים ביקורת קוד.
הגדרת RBAC למפעילים
Rundeck משתמש ב-ACL מבוסס מדיניות. דוגמה לצוות התמיכה:
---
# /etc/rundeck/acls/support.aclpolicy
description: Support team - read and run pre-approved jobs only
context:
project: '.*'
for:
job:
- allow: [read, run]
match:
group: 'Operations/.*'
node:
- allow: [read]
project:
- allow: [read]
by:
group: support-team
---
מדיניות זו מעניקה הרשאות קריאה והרצה על משימות בקבוצת Operations, אך אוסרת יצירת משימות חדשות וגישה ישירה ל-nodes. אנו מגדירים RBAC לכל תפקיד: מפתחים יכולים לפרוס, מפעילים יכולים רק להפעיל מחדש, ומנהלים יכולים לעשות הכל.
תרחישי שימוש טיפוסיים ב-Rundeck
| תרחיש | תיאור | דוגמת משימה |
|---|---|---|
| הפעלה מחדש של שירות | הפעלה מחדש חלקה על nodes נבחרים | הפעל מחדש שירות יישום |
| ניקוי לוגים | מחיקת קבצים ישנים מ-N ימים | ניקוי לוגים — מחיקת *.log ישנים מ-7 ימים |
| איסוף מדדים | הרצת סקריפטים לאיסוף נתונים ושליחה ל-InfluxDB | איסוף מדדי מערכת |
| פריסת ארטיפקטים | פריסת גרסאות חדשות לשרתים | פריסת release — העתקה מ-Artifactory |
למה Key Storage עדיף על אחסון מפתחות על הדיסק
מפתחות SSH על הדיסק הם נקודת תורפה. Key Storage של Rundeck מאחסן מפתחות מוצפנים במסד הנתונים או משתלב עם HashiCorp Vault. הפקודה framework.ssh.keypath=/home/rundeck/.ssh/rundeck-deploy framework.ssh.user=deploy framework.projects.dir=/home/rundeck/projects טוענת את המפתח לאחסון מאובטח. כחלק מההטמעה, אנו מגדירים Key Storage וסיבוב מפתחות מתוזמן. Key Storage של Rundeck מאובטח פי 3 מאחסון מפתחות על הדיסק — הנתונים מוצפנים עם AES-256. זה קריטי לעמידה בתקני אבטחה PCI DSS ו-SOC 2.
לוח זמנים ועלות
פריסה בסיסית עם 10-15 משימות ו-RBAC אורכת 2-3 ימים. עבור תשתית מורכבת (cluster, אינטגרציית Vault, CI/CD) לוח הזמנים מתארך ל-5-7 ימים. העלות מחושבת באופן אישי לאחר ביקורת. אנו מציעים הערכה מקדימה תוך יום אחד — ננתח את התשתית שלך ונכין תוכנית מדויקת. צור קשר לייעוץ. ניסיון: 5+ שנים בעבודה עם Rundeck, למעלה מ-20 פרויקטי אוטומציה, SLA מובטח 99.9%.
הזמן הטמעת Rundeck כפתרון מוכן — קבל ניהול משימות מרכזי ללא גישת SSH. אנו מבטיחים הפחתה של 80% בזמן לפעולות שגרתיות ושקיפות מלאה של כל הפעולות.







