רכשתם 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:
- GitHub Actions בונה תמונות Docker.
- מעלה אותן ל-registry (GitHub Container Registry).
- דרך 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 תהליך העבודה
- ניתוח — לימוד התשתית הנוכחית, דרישות העומס והתקציב.
- עיצוב — בחירת סוגי שרתים, תכנית איזון עומסים, מחסן התוכנות.
- יישום — כתיבת Terraform, Ansible, CI/CD וניטור.
- בדיקות — אימות פריסה על שרת staging, ביצוע בדיקות עומס.
- פריסה — מעבר לייצור, הגדרת התראות וגיבויים.
לוחות זמנים משוערים
| משימה | לוח זמנים | עלות משוערת |
|---|---|---|
| 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 תוך יום אחד?
אם האתר שלכם כבר רץ על שרת יחיד, אנו מוסיפים:
- SSL אוטומטי (Certbot systemd timer).
- GitHub Actions עם סקריפט פריסה מהיר.
- ניטור Uptime Kuma על VPS נפרד.
- גיבוי יומי של מסד הנתונים ל-Object Storage.
כל זה מובטח לעבוד. במהלך השנים, השלמנו יותר מ-50 פרויקטים על Hetzner — מדפי נחיתה קטנים ועד שווקים בעומס גבוה. הזמינו הגדרה סוהר — נבחר את התצורה האופטימלית ונצייר מפת דרכים למיגרציה.
למה לבחור ב-Hetzner לייצור?
- מרכזי נתונים תואמי GDPR באירופה.
- מחיר נמוך פי 3–5 מ-AWS/GCP עם ביצועים דומים.
- אמינות גבוהה: 99.9% זמינות לפי SLA.
- API ו-CLI פשוטים לאוטומציה.
קבלו ייעוץ — נספר לכם כיצד לייעל את הפריסה הנוכחית שלכם. הערה: כל המחירים הם הערכות; העלות הסופית תלויה בהיקף.







