Настройка автоматического деплоя сайта

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, 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 — инструмент для атомарного деплоя с возможностью rollback:

// 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 и rollback: 2–3 дня.