До основного вмісту

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
Чи була стаття корисною?
← Назад до бази знань Поставити питання підтримці