Деплой Битрикс на продакшн: чеклист из 20 пунктов

Перед каждым релизом Битрикс-проекта на продакшн нужно пройти чеклист. Вот 20 пунктов которые спасут от инцидентов и ночных звонков.

1. Версионирование и контроль версий

# Убедиться что все изменения в git
git status
git diff --stat origin/main

# Создать тег релиза
git tag -a v2.3.1 -m "Release 2.3.1: new checkout flow"
git push origin v2.3.1

2. Бэкап перед деплоем

# Бэкап базы данных
mysqldump -u USER -pPASSWORD DB_NAME | gzip > /backup/db_$(date +%Y%m%d_%H%M%S).sql.gz

# Бэкап файлов
tar -czf /backup/files_$(date +%Y%m%d_%H%M%S).tar.gz /var/www/html/ --exclude=/var/www/html/bitrix/cache

3. Режим технических работ

// /local/php_interface/init.php
if (!defined('ADMIN_SECTION') && !defined('MAINTENANCE_BYPASS')) {
    define('MAINTENANCE_MODE', true);
}

// В .htaccess на время деплоя
// ErrorDocument 503 /maintenance.html
// RewriteRule ^(?!maintenance\.html).*$ /maintenance.html [R=503,L]

4. Деплой файлов

# Rsync только нужных директорий
rsync -avz --delete \
    --exclude='.git' \
    --exclude='bitrix/cache/' \
    --exclude='upload/' \
    --exclude='bitrix/backup/' \
    ./local/ user@server:/var/www/html/local/

# Или через git pull
ssh user@server "cd /var/www/html && git pull origin main"

5. Миграции базы данных

// Запуск SQL-миграций в порядке версий
$migrations = glob(__DIR__ . '/migrations/*.sql');
sort($migrations);

foreach ($migrations as $file) {
    $version = basename($file, '.sql');
    if (!isMigrationApplied($version)) {
        $sql = file_get_contents($file);
        $connection->queryExecute($sql);
        markMigrationApplied($version);
        echo "Applied: {$version}" . PHP_EOL;
    }
}

6. Сброс кэша Битрикс

// Полный сброс кэша
\Bitrix\Main\Application::getInstance()->getCache()->clean();

// Или через CLI
php -r "
define('NO_KEEP_STATISTIC', true);
define('NOT_CHECK_PERMISSIONS', true);
\$_SERVER['DOCUMENT_ROOT'] = '/var/www/html';
require '/var/www/html/bitrix/modules/main/include/prolog_before.php';
BXClearCache(true);
echo 'Cache cleared' . PHP_EOL;
"

7. Проверка прав доступа

find /var/www/html/local -type f -name "*.php" -not -perm 644 -exec chmod 644 {} \;
find /var/www/html/local -type d -not -perm 755 -exec chmod 755 {} \;

# Проверить владельца
chown -R www-data:www-data /var/www/html/upload/
chown -R www-data:www-data /var/www/html/bitrix/cache/

8. Проверка OPcache

# Сброс OPcache после деплоя
php -r "opcache_reset();"

# Или через web (если есть endpoint)
curl -s https://example.ru/admin/opcache-reset.php?secret=TOKEN

9. Проверка ошибок PHP

tail -n 50 /var/log/php/error.log
tail -n 50 /var/www/html/bitrix/logs/exception.log

10. Функциональное тестирование

  • Главная страница открывается (200 OK)
  • Авторизация работает
  • Корзина и оформление заказа работают
  • Поиск работает
  • Административная панель открывается
  • Проверить мобильную версию

11-20. Остальные пункты чеклиста

  • ✅ HTTPS-редирект работает
  • ✅ Sitemap доступен по /sitemap.xml
  • ✅ robots.txt корректен (нет Disallow: /)
  • ✅ CDN обновил кэш статики
  • ✅ Мониторинг не показывает ошибок (Zabbix/Telegram)
  • ✅ Время ответа сервера < 500ms
  • ✅ Базы данных: нет долгих запросов (SHOW PROCESSLIST)
  • ✅ Агенты Битрикс выполняются
  • ✅ Email-уведомления отправляются
  • ✅ Бэкап создался успешно

Автоматизация через скрипт

#!/bin/bash
set -e

echo "=== Starting deploy ==="
cd /var/www/html

# Backup
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME | gzip > /backup/pre-deploy.sql.gz

# Pull
git pull origin main

# Clear cache
php artisan bitrix:cache:clear

# Check errors
if grep -q "Fatal error" /var/log/php/error.log; then
    echo "FATAL errors detected! Rolling back..."
    git revert HEAD
    exit 1
fi

echo "=== Deploy successful ==="

Итог

Чеклист деплоя — это не бюрократия, а страховка от инцидентов. Автоматизируйте что можно через скрипты и CI/CD, но финальную проверку функциональности делайте вручную — каждый раз.