השקת אתר ב-Selectel: Terraform, Kubernetes, CI/CD
השקתם אתר ב-Selectel, אבל שבוע לאחר מכן הוא נופל בגלל הגדרות קבוצת אבטחה שגויות? או שהפריסה אורכת שעה, והחזרה לגרסה קודמת היא פעולה מלאה? אנחנו פותרים בעיות אלו עם פריסה אוטומטית באמצעות Terraform, Kubernetes ו-GitHub Actions. הפריסות אורכות דקות, התשתית אמינה, והיא עומדת בדרישות 152-FZ. פעם פרויקט נפל בגלל הגדרות שגויות של Object Storage — התמונות לא נטענו, LCP עלה ל-5 שניות. כתבנו מחדש את הפריסה עם Terraform, הגדרנו CDN, ו-LCP ירד ל-0.8 שניות. זו רק דוגמה אחת לאיך אוטומציה חוסכת לעסק.
לצוות שלנו יש ניסיון של 5+ שנים עם תשתית Selectel, והקמנו פריסה ל-30+ פרויקטים, החל מדפי נחיתה ועד פלטפורמות SaaS בעלות עומס גבוה. הנה איך אנחנו עושים את זה.
בעיות שאנחנו פותרים
בעת פריסה ב-Selectel, אנחנו נתקלים לעיתים קרובות בשגיאות טיפוסיות:
- שאילתות N+1 בעבודה עם Object Storage — הגדרות CDN שגויות מובילות לעיכובים. אנחנו מתקנים זאת באמצעות טעינה מוקדמת של תוכן והגדרות Cache-Control נכונות.
- חוסר התאמה ב-Hydration ב-React/Next.js בעת שימוש ב-SSR — בגלל זמני תגובה שונים בין השרת ללקוח. אנחנו פותרים זאת על ידי הגדרת סנכרון דרך Edge Functions.
- דליפות מידע בגלל הגדרות קבוצת אבטחה שגויות. אנחנו תמיד משתמשים בהרשאות מינימליות: רק 80/443 ו-SSH מכתובות IP מורשות.
כל בעיה מלווה בפתרון קונקרטי שחידדנו על עשרות פרויקטים.
איך לארגן פריסה לעמידה בדרישות 152-FZ
Selectel מספקת תשתית מאושרת. אנחנו מגדירים:
- הצפנה במנוחה באמצעות OpenStack Barbican.
- רישום גישה ל-Object Storage באמצעות S3 Access Logs.
- גיבויים קבועים של מסדי נתונים לפרויקט נפרד.
זה מבטיח עמידה בדרישות ללא עלויות נוספות.
למה Selectel משתלמת יותר מעננים זרים
Selectel זולה פי 2–3 מ-AWS/Azure עבור פרויקטים רוסיים, בהתחשב בזמן השהייה ועמידה בדרישות. לדוגמה, שימוש ב-Managed Kubernetes ב-Selectel מפחית עלויות ניהול ב-40% בהשוואה לפריסה ידנית. בנוסף, הנתונים נשארים ברוסיה, מה שחיוני עבור 152-FZ.
איך להקים פריסה ב-Selectel מאפס
אנחנו משתמשים בטכנולוגיות מוכחות: Terraform 1.7 לתיאור תשתית, Ansible להגדרות, ו-GitHub Actions ל-CI/CD. פרויקט אחד — חנות מקוונת על Laravel 11: הקמנו את הפרויקט עם Terraform, הגדרנו Object Storage לקבצי מדיה, ו-Managed Kubernetes לפרונטאנד. הפריסה אורכת 3 דקות, והחזרה לגרסה קודמת היא פקודה אחת.
# Создание сервера через CLI
pip install python-openstackclient
export OS_AUTH_URL=https://cloud.api.selcloud.ru/identity/v3
export OS_PROJECT_ID=your_project_id
export OS_USERNAME=your_username
export OS_PASSWORD=your_password
export OS_REGION_NAME=ru-1
openstack server create \
--flavor 1014 \
--image "Ubuntu 22.04 LTS 64-bit" \
--key-name my-key \
--security-group web-sg \
myapp-prod # Terraform для Selectel
terraform {
required_providers {
selectel = {
source = "selectel/selectel"
version = "~> 5.0"
}
openstack = {
source = "terraform-provider-openstack/openstack"
version = "~> 1.53"
}
}
}
provider "selectel" {
token = var.selectel_token
}
resource "selectel_vpc_project_v2" "myapp" {
name = "myapp-project"
theme = {
color = "#4CAF50"
}
}
resource "openstack_compute_instance_v2" "app" {
name = "myapp-prod"
flavor_name = "1014"
image_name = "Ubuntu 22.04 LTS 64-bit"
key_pair = openstack_compute_keypair_v2.mykey.name
security_groups = ["web-sg", "ssh-sg"]
region = "ru-1"
network {
name = "public"
}
user_data = file("cloud-init.yaml")
}
# Selectel Object Storage (Swift/S3)
aws configure
aws --endpoint-url https://s3.selcdn.ru s3 mb s3://myapp-assets
aws --endpoint-url https://s3.selcdn.ru \
s3 sync ./dist/assets s3://myapp-assets \
--acl public-read \
--cache-control "public, max-age=31536000, immutable" # Managed Kubernetes (MKS)
selectel mks kubeconfig --cluster-id CLUSTER_ID > kubeconfig.yaml
export KUBECONFIG=./kubeconfig.yaml
kubectl apply -f k8s/
kubectl get pods -n myapp ---
# GitHub Actions для Selectel VPS
jobs:
deploy:
steps:
- name: Deploy
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SELECTEL_SERVER_IP }}
username: deploy
key: ${{ secrets.SSH_KEY }}
script: |
cd /var/www/myapp
git pull origin main
composer install --no-dev --optimize-autoloader
npm ci && npm run build
php artisan migrate --force
php artisan optimize
sudo systemctl reload php8.3-fpm nginx
---
שגיאות פריסה טיפוסיות וכיצד למנוע אותן
- התעלמות מקבוצות אבטחה — השארת SSH פתוח לכל כתובות ה-IP. אנחנו משתמשים רק ברשימות מורשות.
- הגדרות CORS שגויות עבור S3 — קבצים סטטיים לא נטענים בפרונטאנד. אנחנו מציינים במפורש מקורות מורשים.
- חוסר ניטור — גילוי על השבתה מלקוחות. אנחנו מגדירים התראות דרך SendGrid או Telegram.
קל להימנע משגיאות אלו אם עוקבים אחרי הפרקטיקות שלנו.
תהליך
- ניתוח — קביעת דרישות לעומס, תקציב ועמידה בדרישות.
- עיצוב — בניית ארכיטקטורה: VPS מול Kubernetes, S3 מול DB, CDN.
- תשתית — פריסת פרויקט, רשתות וקבוצות אבטחה עם קוד Terraform.
- יישום — הגדרת אפליקציה, CI/CD וניטור (Prometheus + Grafana).
- בדיקות — בדיקות עומס, בדיקת Core Web Vitals.
- פריסה — פריסה הדרגתית (canary) עם חזרה אוטומטית לגרסה קודמת במקרה של שגיאות.
מה כלול בהקמת פריסה
- עיצוב ארכיטקטורה למשימות שלכם.
- כתיבת הגדרות Terraform לכל התשתית.
- הקמת CI/CD (GitHub Actions או GitLab CI) עם פריסה וחזרה אוטומטית לגרסה קודמת.
- הגדרת Object Storage ו-CDN לקבצים סטטיים.
- שילוב ניטור (Prometheus + Grafana) עם התראות.
- תיעוד על פריסה והדרכה לצוות שלכם.
- תמיכה טכנית לאחר ההשקה.
השוואה: VPS מול Managed Kubernetes
| פרמטר | VPS | Managed Kubernetes (MKS) |
|---|---|---|
| זמן פריסה | 1–2 ימים | 3–4 ימים |
| קנה מידה | ידני (אנכי) | אוטומטי (אופקי) |
| עלות | נמוכה | בינונית, עם חיסכון בניהול |
| מתאים ל | פרויקטים קטנים | עומס גבוה ומיקרוסרוויסים |
לוחות זמנים לרכיבי פריסה
| רכיב פריסה | לוח זמנים |
|---|---|
| VPS + Nginx + פריסה | 1–2 ימים |
| Object Storage + CDN | יום אחד |
| Managed Kubernetes | 3–4 ימים |
| CI/CD (GitHub Actions) | 1–2 ימים |
העלות מחושבת בנפרד לכל פרויקט. בקשו הערכת עלות פריסה מותאמת — נבחר את הארכיטקטורה האופטימלית. קבלו ייעוץ — נעריך את הפרויקט שלכם ביום עסקים אחד. צרו קשר כדי להקים פריסה שלא תאכזב אתכם.







