פריסת Hetzner Cloud: Terraform, CI/CD, Docker Swarm

פריסה ידנית ב-Hetzner Cloud הופכת כל שחרור ללחץ: עדכוני קוד אורכים שעות, תעודות SSL פגות ברגע הגרוע ביותר, ועומס השרת גדל. אנו הופכים את כל התהליך לאוטומטי עם Terraform, CI/CD ו-Docker Swarm, כך שאתם מעדכנים את האתר בלחיצת כפתור ולא דואגים לתשתית. הצוות שלנו מספק את הפרויקט במפתח מלא—מהגדרת השרת ועד לניטור ותמיכה.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
פריסת Hetzner Cloud: Terraform, CI/CD, Docker Swarm
בינוני
מ- 1 יום עד 3 ימים

הכישורים שלנו:

שאלות נפוצות

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

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1502
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1306
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1049
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

רכשתם VPS ב-Hetzner, התקנתם Ubuntu, ופרסתם את האתר שלכם באמצעות scp ידני. חודש לאחר מכן, אתם מגלים: עדכוני קוד הם סיוט, Nginx לא מכוון לעומס גבוה, ותעודת ה-SSL שלכם פגה בערב שישי. כל שחרור הופך לשעות של לחץ, ולקוחות מתלוננים על טעינה איטית. אנו מגדירים פריסה כך שהכל רץ אוטומטית: לוחצים על כפתור ב-GitHub — האתר מתעדכן תוך דקה, וניטור מתריע על תקלות. חיסכון בזמן ובעצבים הוא העדיפות שלנו. צרו קשר לייעוץ — נספר לכם כיצד להאיץ את מחזור השחרורים שלכם.

בעיות שאנו פותרים

  • פריסה ידנית דרך FTP/SCP — איטית, מועדת לשגיאות, ללא היסטוריית שינויים. אנו מחליפים אותה ב-CI/CD מבוסס Git עם יכולות גלגול לאחור.
  • Nginx ללא מטמון ו-gzip — TTFB גבוה, כישלון ב-Core Web Vitals. אנו מייעלים LCP ו-CLS.
  • תעודת SSL פגה — אנו מגדירים Let's Encrypt עם חידוש אוטומטי באמצעות systemd timer.
  • ללא ניטור — אתם לא יודעים על השבתת השרת עד הבוקר. אנו מתקינים Prometheus + Node Exporter + Alertmanager.
  • קנה מידה — שרת יחיד לא יכול להתמודד עם העומס. אנו משתמשים ב-Docker Swarm על פני מספר VPS עם Load Balancer.

איך אנחנו עושים את זה

אנו משתמשים בתשתית כקוד: כל התצורות נמצאות ב-Git. Terraform יוצר שרתים, חומת אש, DNS ו-Object Storage. Packer בונה תמונות. Ansible מגדיר תוכנות. GitHub Actions מטפל בפריסה לאחר כל push.

מקרה אמיתי: לקוח של שוק עם 50,000 מוצרים. בעבר, הפריסה ארכה שעתיים באמצעות rsync ידני. בנינו pipeline:

  1. GitHub Actions בונה תמונות Docker.
  2. מעלה אותן ל-registry (GitHub Container Registry).
  3. דרך SSH, מריץ docker stack deploy על קלאסטר Swarm של 3 צמתים.

זמן השחרור ירד ל-2 דקות. גלגול לאחור מהיר אפילו יותר: git revert ו-push חדש.

איך ה-CI/CD Pipeline עובד

כל push לענף הראשי מפעיל build, בדיקות (אם יש), ופריסה ל-staging. לאחר אישור ידני, פריסה לייצור. כל השלבים מוגדרים בקובץ YAML במאגר, כך שהשינויים מתועדים וניתנים לשחזור.

Terraform לתשתית

# main.tf (начало)
terraform {
  required_providers {
    hcloud = {
      source = "hetznercloud/hcloud"
      version = "~> 1.44"
    }
  }
}

provider "hcloud" {
  token = var.hcloud_token
}

resource "hcloud_server" "app" {
  name = "myapp-prod"
  image = "ubuntu-22.04"
  server_type = "cpx21"
  location = "nbg1"
  ssh_keys = [hcloud_ssh_key.default.id]
  user_data = file("cloud-init.yaml")
  labels = {
    env = "production"
    app = "myapp"
  }
}

resource "hcloud_firewall" "app" {
  name = "myapp-firewall"
  rule {
    direction = "in"
    protocol = "tcp"
    port = "22"
    source_ips = ["10.0.0.0/8"]
  }
  rule {
    direction = "in"
    protocol = "tcp"
    port = "80"
    source_ips = ["0.0.0.0/0", "::/0"]
  }
  rule {
    direction = "in"
    protocol = "tcp"
    port = "443"
    source_ips = ["0.0.0.0/0", "::/0"]
  }
}

resource "hcloud_load_balancer" "lb" {
  name = "myapp-lb"
  load_balancer_type = "lb11"
  location = "nbg1"
}

resource "hcloud_load_balancer_target" "server" {
  type = "server"
  load_balancer_id = hcloud_load_balancer.lb.id
  server_id = hcloud_server.app.id
}

GitHub Actions ל-CI/CD

---
name: Deploy to Hetzner
on:
  push:
    branches: [ main ]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Deploy via SSH
        uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.HETZNER_IP }}
          username: deploy
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            set -e
            cd /var/www/myapp
            git fetch origin main
            git reset --hard origin/main
            composer install --no-dev --optimize-autoloader
            npm ci --omit=dev
            npm run build
            php artisan migrate --force
            php artisan optimize
            sudo systemctl reload php8.3-fpm nginx
            php artisan queue:restart
---

Hetzner Object Storage לקבצים סטטיים

aws configure set aws_access_key_id $HETZNER_S3_KEY
aws configure set aws_secret_access_key $HETZNER_S3_SECRET
aws configure set region eu-central
aws --endpoint-url https://fsn1.your-objectstorage.com s3 mb s3://myapp-assets
aws --endpoint-url https://fsn1.your-objectstorage.com s3 sync ./dist/assets s3://myapp-assets/assets --cache-control "public, max-age=31536000, immutable"

מה זה Docker Swarm ולמה אתם צריכים אותו?

Docker Swarm הוא כלי קלאסטריזציה מקורי של Docker שמאחד מספר שרתים למרחב מחשוב יחיד. הוא מספק חלוקת קונטיינרים אוטומטית, איזון עומסים ושחזור תקלות. לפרויקטים שצריכים קנה מידה אופקי וסובלנות לתקלות ללא המורכבות של Kubernetes, Swarm הוא הבחירה האופטימלית. Swarm פשוט עד פי 5 להגדרה וקל פי 3 מ-Kubernetes, מה שהופך אותו לאידיאלי לעומסים קטנים ובינוניים.

Docker Swarm Cluster

# Инициализация на первом сервере
ssh server1 "docker swarm init"
# Получение токена
JOIN_TOKEN=$(ssh server1 "docker swarm join-token worker -q")
# Добавление рабочих узлов
ssh server2 "docker swarm join --token $JOIN_TOKEN server1:2377"
ssh server3 "docker swarm join --token $JOIN_TOKEN server1:2377"
# Деплой стека
docker -H ssh://deploy@server1 stack deploy -c docker-compose.prod.yml myapp

תהליך העבודה

  1. ניתוח — לימוד התשתית הנוכחית, דרישות העומס והתקציב.
  2. עיצוב — בחירת סוגי שרתים, תכנית איזון עומסים, מחסן התוכנות.
  3. יישום — כתיבת Terraform, Ansible, CI/CD וניטור.
  4. בדיקות — אימות פריסה על שרת staging, ביצוע בדיקות עומס.
  5. פריסה — מעבר לייצור, הגדרת התראות וגיבויים.

לוחות זמנים משוערים

משימה לוח זמנים עלות משוערת
VPS יחיד + Nginx + SSL + פריסה 1–2 ימים $500–$1,000
Terraform + Load Balancer + ניטור 3–4 ימים $1,500–$3,000
Docker Swarm cluster (3+ שרתים) 4–5 ימים $3,000–$6,000
תשתית מלאה עם גיבוי החל משבוע $5,000+

העלות מחושבת באופן אישי — צרו קשר להערכה.

איך לגלגל לאחור במהירות פריסה שנכשלה? אם CI/CD מוגדר כראוי, גלגול לאחור נעשה בפקודה אחת: # main.tf (начало) terraform { required_providers { hcloud = { source = "hetznercloud/hcloud" version = "~> 1.44" } } } provider "hcloud" { token = var.hcloud_token } resource "hcloud_server" "app" { name = "myapp-prod" image = "ubuntu-22.04" server_type = "cpx21" location = "nbg1" ssh_keys = [hcloud_ssh_key.default.id] user_data = file("cloud-init.yaml") labels = { env = "production" app = "myapp" } } resource "hcloud_firewall" "app" { name = "myapp-firewall" rule { direction = "in" protocol = "tcp" port = "22" source_ips = ["10.0.0.0/8"] } rule { direction = "in" protocol = "tcp" port = "80" source_ips = ["0.0.0.0/0", "::/0"] } rule { direction = "in" protocol = "tcp" port = "443" source_ips = ["0.0.0.0/0", "::/0"] } } resource "hcloud_load_balancer" "lb" { name = "myapp-lb" load_balancer_type = "lb11" location = "nbg1" } resource "hcloud_load_balancer_target" "server" { type = "server" load_balancer_id = hcloud_load_balancer.lb.id server_id = hcloud_server.app.id } את ה-commit האחרון ו-push. ה-pipeline פורס אוטומטית את הגרסה היציבה הקודמת. זמן הגלגול לאחור הוא פחות מ-2 דקות.

בעיות ופתרונות אופייניים

בעיה פתרון
סטיות בתצורה לאחר עריכות ידניות הכל ב-Terraform — שינויים רק דרך קוד
מסד הנתונים לא מגובה גיבוי יומי ל-Object Storage באמצעות cron
תעודת SSL פגה Let's Encrypt עם systemd timer
ללא ניטור Prometheus + Grafana + Alertmanager

מה כלול בעבודה

  • תיעוד מקיף של התכנית והתצורות.
  • גישה לשרת ולפאנל הניהול.
  • הדרכה לצוות שלכם (שיחת 1–2 שעות).
  • תמיכה למשך חודש לאחר המסירה.
  • תצורה מפורטת כקוד (Terraform, Ansible) במאגר ה-git שלכם.

איך להגדיר פריסה ב-Hetzner תוך יום אחד?

אם האתר שלכם כבר רץ על שרת יחיד, אנו מוסיפים:

  1. SSL אוטומטי (Certbot systemd timer).
  2. GitHub Actions עם סקריפט פריסה מהיר.
  3. ניטור Uptime Kuma על VPS נפרד.
  4. גיבוי יומי של מסד הנתונים ל-Object Storage.

כל זה מובטח לעבוד. במהלך השנים, השלמנו יותר מ-50 פרויקטים על Hetzner — מדפי נחיתה קטנים ועד שווקים בעומס גבוה. הזמינו הגדרה סוהר — נבחר את התצורה האופטימלית ונצייר מפת דרכים למיגרציה.

למה לבחור ב-Hetzner לייצור?

  • מרכזי נתונים תואמי GDPR באירופה.
  • מחיר נמוך פי 3–5 מ-AWS/GCP עם ביצועים דומים.
  • אמינות גבוהה: 99.9% זמינות לפי SLA.
  • API ו-CLI פשוטים לאוטומציה.

קבלו ייעוץ — נספר לכם כיצד לייעל את הפריסה הנוכחית שלכם. הערה: כל המחירים הם הערכות; העלות הסופית תלויה בהיקף.