Налаштування автоматичного деплою сайту

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування автоматичного деплою сайту
Середня
від 1 робочого дня до 3 робочих днів
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування автоматичного розгортання сайту

Автоматичне розгортання — це процес, при якому зміни в коді автоматично потрапляють на сервер після проходження CI-перевірок. Це усуває ручні операції, знижує ризик людських помилок і прискорює доставку змін.

Варіанти автоматичного розгортання

Push-based — система CI/CD сама підключається до сервера і виконує розгортання. Pull-based — сервер сам періодично перевіряє і забирає зміни (підхід GitOps).

GitHub Actions → SSH розгортання

# .github/workflows/deploy.yml
name: Deploy

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Build
        run: npm ci && npm run build

      - name: Deploy via SSH
        uses: appleboy/[email protected]
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: deploy
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            cd /var/www/myapp
            git pull origin main
            composer install --no-dev --optimize-autoloader
            php artisan migrate --force
            php artisan config:cache
            php artisan route:cache
            php artisan view:cache
            php artisan queue:restart
            sudo systemctl reload php8.3-fpm

Deployer (PHP)

Deployer — інструмент для атомарного розгортання з можливістю відкату:

// deploy.php
namespace Deployer;

require 'recipe/laravel.php';

host('production')
    ->set('hostname', 'your-server.com')
    ->set('remote_user', 'deploy')
    ->set('deploy_path', '/var/www/myapp')
    ->set('branch', 'main');

host('staging')
    ->set('hostname', 'staging.example.com')
    ->set('remote_user', 'deploy')
    ->set('deploy_path', '/var/www/staging')
    ->set('branch', 'develop');

set('shared_files', ['.env']);
set('shared_dirs', ['storage']);
set('writable_dirs', ['bootstrap/cache', 'storage']);
set('keep_releases', 5);

after('deploy:failed', 'deploy:unlock');

task('deploy:migrate', function () {
    run('cd {{release_path}} && php artisan migrate --force');
});

after('deploy:vendors', 'deploy:migrate');
# Розгортання
dep deploy production

# Відкат
dep rollback production

Webhook-розгортання

Для простих випадків — вебхук на сервері:

// deploy.php (на сервері)
<?php
$secret = getenv('DEPLOY_SECRET');
$signature = $_SERVER['HTTP_X_HUB_SIGNATURE_256'] ?? '';

if (!hash_equals("sha256=" . hash_hmac('sha256', file_get_contents('php://input'), $secret), $signature)) {
    http_response_code(403);
    exit;
}

$output = shell_exec('cd /var/www/myapp && git pull && composer install --no-dev && php artisan migrate --force 2>&1');
echo $output;

GitHub → Repository Settings → Webhooks → Add webhook → URL вашого deploy.php.

Zero-Downtime розгортання через Symlink

# Структура директорій
/var/www/myapp/
├── current -> releases/20241115143022  # симлинк на активний релиз
├── releases/
│   ├── 20241115143022/   # поточний
│   ├── 20241115120000/   # попередній
│   └── 20241114090000/   # старий
├── shared/
│   ├── .env
│   └── storage/
#!/bin/bash
# deploy.sh
DEPLOY_DIR=/var/www/myapp
RELEASE_DIR=$DEPLOY_DIR/releases/$(date +%Y%m%d%H%M%S)

# 1. Скачати новий код
git clone --depth=1 https://github.com/user/repo.git $RELEASE_DIR

# 2. Привязати shared ресурси
ln -s $DEPLOY_DIR/shared/.env $RELEASE_DIR/.env
ln -s $DEPLOY_DIR/shared/storage $RELEASE_DIR/storage

# 3. Встановити залежності
cd $RELEASE_DIR && composer install --no-dev --optimize-autoloader

# 4. Переключити симлинк (атомарно)
ln -sfn $RELEASE_DIR $DEPLOY_DIR/current

# 5. Перезагрузити сервіси
sudo systemctl reload php8.3-fpm

# 6. Видалити старі релизи (залишити 5)
ls -t $DEPLOY_DIR/releases | tail -n +6 | xargs -I{} rm -rf $DEPLOY_DIR/releases/{}

Сповіщення про розгортання

# GitHub Actions — сповіщення в Slack
- name: Notify Slack
  if: always()
  uses: 8398a7/action-slack@v3
  with:
    status: ${{ job.status }}
    text: "Deploy to production: ${{ job.status }}"
    webhook_url: ${{ secrets.SLACK_WEBHOOK }}

Терміни реалізації

Базовий автодеплой через SSH/GitHub Actions: 1 день. Deployer з zero-downtime і відкатом: 2–3 дні.