Вы купили VPS на Hetzner, поставили Ubuntu, запустили сайт через ручной scp. Через месяц понимаете: обновления кода — это ад, Nginx не настроен под высокую нагрузку, а SSL-сертификат истёк в пятницу вечером. Каждый релиз превращается в многочасовой стресс, заказчики жалуются на медленную загрузку. Мы настраиваем деплой так, чтобы всё работало автоматически: нажали кнопку в GitHub — сайт обновился за минуту, мониторинг присылает алерт при сбое. Экономия времени и нервов — наш приоритет. Свяжитесь с нами для бесплатной консультации — расскажем, как ускорить ваш релизный цикл.
Проблемы которые решаем
- Ручной деплой через FTP/SCP — медленно, ошибки, нет истории изменений. Мы заменяем на Git-based CI/CD с откатом.
- Nginx без кеширования и gzip — высокий TTFB, провал Core Web Vitals. Оптимизируем LCP и CLS.
- SSL-сертификат истекает — настраиваем Let's Encrypt с автообновлением через systemd timer.
- Нет мониторинга — не знаете о падении сервера до утра. Ставим Prometheus + Node Exporter + Alertmanager.
- Масштабирование — один сервер не тянет нагрузку. Используем Docker Swarm на нескольких VPS с Load Balancer.
Как мы это делаем
Используем infrastructure as code: весь конфиг — в Git. Terraform создаёт серверы, firewall, DNS, Object Storage. Packer собирает образы. Ansible — настройка ПО. GitHub Actions — деплой после каждого push.
Реальный кейс: клиент-маркетплейс с 50 000 товаров. Раньше деплой занимал 2 часа через ручной rsync. Мы построили пайплайн:
- GitHub Actions собирает Docker образы.
- Загружает их в реестр (GitHub Container Registry).
- По SSH запускает
docker stack deployна Swarm-кластере из 3 нод.
Время релиза сократилось до 2 минут. Откат — ещё быстрее: git revert и новый push.
Как работает CI/CD пайплайн?
Каждый push в main-ветку запускает сборку, тесты (если есть) и деплой на 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 — оптимальный выбор.
Docker Swarm кластер
# Инициализация на первом сервере
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 дня |
| Terraform + Load Balancer + мониторинг | 3–4 дня |
| Docker Swarm кластер (3+ сервера) | 4–5 дней |
| Полная инфраструктура с reserve | от 1 недели |
Стоимость рассчитывается индивидуально — пишите, оценим ваш проект.
Как быстро откатить неудачный деплой?
Если CI/CD настроен корректно, откат выполняется одной командой: `git revert` последнего коммита и push. Пайплайн автоматически развернёт предыдущую стабильную версию. Время отката — менее 2 минут.Типичные проблемы и решения
| Проблема | Решение |
|---|---|
| Конфигурация разъезжается после ручных правок | Всё в Terraform — изменения только через код |
| База данных не бекапится | Ежедневный бэкап в Object Storage через cron |
| SSL-сертификат истекает | Let's Encrypt с systemd timer |
| Нет мониторинга | Prometheus + Grafana + Alertmanager |
Что входит в работу
- Развёрнутая документация схемы и конфигураций.
- Доступы к серверам и админке.
- Обучение вашей команды (1-2 часа созвона).
- Поддержка в течение 1 месяца после сдачи.
Как настроить деплой на Hetzner за 1 день?
Если сайт уже работает на одном сервере, мы добавляем:
- Автоматический SSL (Certbot systemd timer).
- GitHub Actions с быстрым скриптом деплоя.
- Мониторинг Uptime Kuma на отдельном VPS.
- Ежедневный бэкап базы в Object Storage.
Всё это — с гарантией работоспособности. За несколько лет мы выполнили более 50 проектов на Hetzner — от небольших лендингов до высоконагруженных маркетплейсов. Закажите настройку под ключ — подберём оптимальную конфигурацию и нарисуем roadmap миграции.
Почему стоит выбрать Hetzner для продакшена?
- GDPR-compliant дата-центры в Европе.
- Цена в 3–5 раз ниже AWS/GCP при аналогичной производительности.
- Высокая надёжность: uptime 99.9% по SLA.
- Простой API и CLI для автоматизации.
Получите консультацию — расскажем, как оптимизировать ваш текущий деплой.







