К основному содержимому

Git деплой на хостинг: автоматизация через cPanel Git

Хостинг и cPanel · 19.04.2026 · 4 мин чтения
Иллюстрация к статье «Git деплой на хостинг: автоматизация через cPanel Git»

cPanel Git Version Control позволяет клонировать GitHub/GitLab репозиторий прямо на хостинг и автоматически деплоить изменения при push.

Настройка Git Version Control

cPanel → Files → Git Version Control → Create.

Clone URL: https://github.com/username/mysite.git
Repository Path: /home/user/public_html
Repository Name: mysite
✅ Для приватных репозиториев добавьте SSH-ключ хостинга в GitHub: cPanel → Security → SSH Access → Manage SSH Keys → скопируйте публичный ключ в GitHub → Settings → SSH keys.

Автодеплой через .cpanel.yml

Создайте файл .cpanel.yml в корне репозитория:

---
deployment:
  tasks:
    - export DEPLOYPATH=/home/user/public_html
    - /bin/cp -r $SRCDIR/* $DEPLOYPATH
    - cd $DEPLOYPATH && composer install --no-dev
    - cd $DEPLOYPATH && php artisan migrate --force

Ручной деплой через SSH

# Перейти в папку репозитория
cd ~/repositories/mysite

# Получить изменения
git pull origin main

# Обновить production файлы
rsync -av --delete ./ ~/public_html/ --exclude='.git'

Webhook для автодеплоя из GitHub

<?php
// deploy.php
$secret = 'your_webhook_secret';
$payload = file_get_contents('php://input');
$sig = 'sha256=' . hash_hmac('sha256', $payload, $secret);

if (!hash_equals($_SERVER['HTTP_X_HUB_SIGNATURE_256'], $sig)) {
    http_response_code(403);
    exit;
}

exec('cd /home/user/public_html && git pull origin main 2>&1', $output);
echo implode("
", $output);
⚠️ Никогда не размещайте папку .git в public_html без защиты! Добавьте в .htaccess: RedirectMatch 404 /\.git

Альтернатива webhook: деплой через GitHub Actions

Если хостинг блокирует входящие вебхуки фаерволом или тариф не выдаёт публичный IP для приёма запросов, деплой можно запускать по SSH прямо из GitHub Actions — раннер сам подключается к серверу и подтягивает изменения при push в ветку main, без файла deploy.php на сайте.

# .github/workflows/deploy.yml
name: Deploy
on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: SSH deploy
        uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USER }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          port: ${{ secrets.SSH_PORT }}
          script: cd ~/public_html && git pull origin main

Типичные ошибки при Git-деплое

СообщениеПричина
fatal: Could not read from remote repositorySSH-ключ хостинга не добавлен в GitHub/GitLab, либо для приватного репозитория используется HTTPS-клон без токена доступа
error: Your local changes... would be overwritten by mergeФайлы в репозитории на сервере правили вручную через Файловый менеджер; git pull отказывается затирать несохранённые изменения
Задачи .cpanel.yml не выполняются при pushДеплой в cPanel Git Version Control запускается кнопкой «Deploy HEAD Commit» в интерфейсе, а не автоматически по push с локальной машины — для автозапуска нужен webhook
fatal: destination path already exists and is not emptyПопытка клонировать репозиторий прямо в public_html, где уже лежат файлы по умолчанию (index.html от хостинга)
composer: command not found (в логе .cpanel.yml)Задачи деплоя выполняются с минимальным PATH — нужен полный путь к бинарнику, например /opt/cpanel/composer/bin/composer

Когда Git-деплой через cPanel не подходит

  • Нужен CI с тестами и линтерами перед выкладкой — cPanel Git Version Control не изолирует сборку от продакшена, задачи .cpanel.yml выполняются сразу на живом сайте
  • Несколько разработчиков одновременно работают через pull request с ревью — здесь нужен полноценный GitFlow, а не прямой git pull на прод-ветку
  • Требуется откат к произвольному коммиту одной кнопкой — штатного UI для отката нет, придётся делать git reset вручную через SSH
  • Сборка идёт в Docker-контейнере — на shared-хостинге нет демона Docker, доступны только команды из jailshell
  • Нужны отдельные окружения staging и production с разными переменными — cPanel Git Version Control привязан к одному Repository Path на аккаунт, без встроенного разделения сред

Проверка результата деплоя

После push или ручного pull убедитесь, что сервер получил именно тот коммит, который ожидался — детали работы с SSH-ключами и jailshell разобраны в статье про SSH-доступ на хостинге cPanel, а автоматизацию последующих шагов удобно вынести в cron-задачу.

# Сравнить локальный HEAD и HEAD на сервере
cd ~/repositories/mysite && git log -1 --oneline
git ls-remote origin HEAD

# Проверить время изменения ключевого файла в public_html
ls -la --time-style=full-iso ~/public_html/index.php
Статья помогла?
← Назад в базу знаний Задать вопрос поддержке