Skip to content

Загрузка проекта на Github и Автодеплой на сервер

Подробный цикл подключения проекта к Github и последующий автодеплой на сервер. Подключатся будем с помощью ключей SSH. Важно понимать, что потребуется генерация разных ключей для разных целей.

Подключение компьтера к Github с помощью SSH ключей. Единоразово и навсегда

В PowerShell введи команду генерации SSH ключей:

Теперь публичный ключ надо добавить на Github
Открой ключ C:\Users\ТВОЙ_ПОЛЬЗОВАТЕЛЬ.ssh\id_ed25519.pub и скопируй содержимое

Вставь его
SettingsSSH and GPG keysNew SSH key → вставь ключ → Add SSH key

И нужно проверить подключение командой в PowerShell

Если все нормально, то будет сообщение

Для начала работы с Git и автодеплоем важно сразу разделить два разных типа SSH-ключей. Они решают разные задачи и не взаимозаменяемы.

✅ Шаг 1: Загрузка проекта на Github

А первую очередь нужно создать новый репозиторий на GitHub вручную: https://github.com/new. При создании отметьте что Вам нужен файл .gitignore для Python. При автодеплое он играет важную роль, так как файлы которые будут разные локально и на сервере (во время работы программы) нужно поместить изначально в в файл .gitignore, чтобы избежать конфликты.

Обязательно проверте что и на сервер и локально у вас установлен Git, иначе команды git просто не буду выполнятся

Далее по очереди в терминале выполнить следующие команды (предварительно на компьютере должен быть установлен Git):

Если нет файла .gitignore создай его. Впиши стандартные исключения и добавь свои:

Больше статей:   Красивый эффект размытия на CSS - Blur эффект

Завершаем клонирование

Шаг 2. Клонирование проекта на сервер.

Тут тот же смысл, но ключи должны быть другие и добавляем мы их уже в проект.

1. На сервере создать ключ только для этого репозитория

Шаг 2. Добавить публичный ключ в GitHub как Deploy key

Сначла нужно посмотреть и скопировать ключ. Для этого на сервере ввести команду

и скопировать ключ вида
ssh-ed25519 AAAAC3NzaC1lZDI1NT.....

Дальше в GitHub:

  • Repo → Settings → Deploy keys → Add deploy key
  • Title: server clone
  • Key: вставляешь содержимое .pub
  • Allow write access.

Шаг 3. На сервере сделать SSH config, чтобы GitHub всегда брал нужный ключ

Вставить:

Если нужно 2 ключа и более на одном сервере:

Права:

Шаг 4. Проверка, что ключ работает

Или, если у Вас несколько ключей и настравали через конфиг то

Ожидаем все то же сообщение

Шаг 5. Клонирование на сервер

В репозитори найти ссылку для клонирования, но именно SSH, не HTTPS. Далее все делаем на сервере
Переходим в нужную папку командой cd (если нужно) и запускаем команду клонирования

Если использовали несколько ключей

Если репозиторий уже есть, Нужно зайти внутрь репозитория и ввести:


Шаг 3. GitHub Actions ↔ Сервер (автодеплой)

Снова нужно будет создавать ключи, но уже именно для автодеплоя GitHub Actions.

Шаг 1. На своём ПК создать ключ для автодеплоя

Cоздаем ключ для автодеплоя на ПК, чтобы случайно не светить приватный на сервере
В PowerShell
Предварительно удобно перейти в папку проекта, тогда там и появятся файлы

Получится 2 файла (в той же папке где введи команду):

  • gh-actions-deploy-main (приватный)
  • gh-actions-deploy-main.pub (публичный)

Публичный ключ добавить на сервер в authorized_keys

На сервере (под тем пользователем, под которым будет деплой, например freelancer):

Переходим в Powershell на ПК. Смотрим публичный ключ:

И вставь его в конец файла на сервере:

Ctrl + O – сохранить

Ctrl + X -выйти

Шаг 3. Приватный ключ положить в GitHub Secrets

Repo → Settings → Secrets and variables → Actions → New repository secret

Добавь секрет (имя прям так и используй):

  • SSH_PRIVATE_KEY = содержимое файла gh-actions-deploy-main (приватный, без .pub)

Дополнительно обычно нужно:

  • SSH_HOST = IP/домен сервера
  • SSH_USER = пользователь на сервере (например freelancer)
  • SSH_PORT = 22 (если другой — укажешь)

Сразу даю один правильный вариант (без разветвлений):

Шаг 4: Создание GitHub Actions workflow

Для того чтобы автодеплой работал нужно создать список команд, которые будут запускаться на сервере после обновления файлов. Для этого создается файл workflow

На Github нужного репозитория нужно перейти на вклдадку Actions
Нажимаем на
Skip this and set up a workflow yourself 

Переименовывем main.yml в deploy.yml (мне так удобно)
Далее нужно вставить содержимое такого плана

где после script: |
нужно писать действие которые автодеплой должен совершить
В моем случае это
cd /root/<YOUR_PATH> – перейти в папку проекта, напишите свой путь
git config pull.rebase true – Да, в CI/CD сценарии (автодеплой), особенно если ты пушишь напрямую в main, НУЖНО явно указать стратегию слияния, иначе при git pull в автодеплое ты получишь фатальную ошибку
source venv/bin/activate – активация виртуального окружения если нужно
git pull – подтягиет все изменения с git
sudo systemctl restart ttc_gunicorn – перезагружает gunicorn (этапы прописаны в service файле ttc_gunicorn)

🔁 После следующего git push в main GitHub автоматически выполнит деплой на сервер!

Как протестировать, что CI/CD работает

Внеси любое изменение в код
Например, добавь # test ci в любой .py файл в репозитории.

Закоммить и запушь в main:

  1. Зайди в GitHub → твой репозиторий → вкладка “Actions”
    Там должен появиться новый workflow-запуск с названием вроде CI/CD или Deploy.
  2. Открой его и смотри лог:
    Там будет видно, как GitHub подключается по SSH, делает git pull, перезапускает gunicorn и т.д.

💡 Если ошибок нет:

Значит всё сработало. Можешь внести реальное изменение в проект и оно автоматически попадёт на сервер.

Если возникают Конфликты между локальной версией и версией на сервере
Скорее всего в автодеплое файл который создает на серверы свои данные. Этот файл Вы увидите в отчетах. Добавьте его в файл .gitignore
И обязательно нужно удалить его из отслеживания git как локально так и на сервере. Иначе gitignore уже не поможет.

А теперь закоммитить изменения.

Leave a Reply

Your email address will not be published. Required fields are marked *