Неудобно гонять файлы на хостинг вручную, хочется чтобы при коммите изменённые файлы отправлялись автоматически. С этим нам поможет Github Actions.
Вводные данные
- Хостинг — Beget
- Редактор — Cursor
- FPT-клиент — Forklift
Если у вас что-то отличается, ищите похожие кнопки, настройки.
План
- Создаём доступ на хостинге
- Прописываем Secrets
- Создаём файл workflow
- Делаем коммит, который запускает автозагрузку.
Создаём доступ

На хостинге создаём FTP-доступ. На Бегете это находится на главном экране.

- Прописываем логин, сохраняем
- Создаём пароль, сохраняем.
- В выпадающем списке выбираем путь до папки проекта. Если у вас такого нет, вы потом сможете прописать путь до папки.
- Сохраняем сервер.
- Кликаем на
Включить SSH
- Нажимаем на
Добавить
Прописываем Secrets
Переходим в настройки репозитория и нажимаем на Secrets and Variables
и нажимаем Actions
.

После этого нам необходимо нажать на кнопку New repository secret

После этого откроется форма для заполнения.

Здесь мы должны вписать те данные, которые мы сохраняли при создании FTP-доступа. Для каждого из нижеперечисленных надо создать свой Secret.
FTP_SERVER
— название сервера
FTP_USERNAME
— логин
FTP_PASSWORD
— пароль
FTP_SERVER_DIR
— путь до папки должен быть просто /
, так как мы уже в FTP-доступе прописали путь до папки. Но если у вас не было выбора папки при создании FTP доступа, вы здесь указываете полный путь до папки. На конце обязательно должен быть /
В итоге это будет выглядеть так

Если вы писали что-то неправильно, не переживайте. Вы можете удалить Secret
и создать заново.
Создаём файл deploy. yml

- В корне проекта создаём папку
.github
, - Внутри папку
workflows
- Внутри неё файл
deploy.yml
Содержание файла deploy.yml
Мне его написала нейронка. Если вы используете Cursor, то попросите её написать файл под ваш проект.
name: Deploy Project
on:
push:
branches: [ main, master ]
paths-ignore:
- 'README.md'
- '.github/**'
- '.gitignore'
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Deploy to production
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
with:
server: ${{ secrets.FTP_SERVER }}
username: ${{ secrets.FTP_USERNAME }}
password: ${{ secrets.FTP_PASSWORD }}
server-dir: ${{ secrets.FTP_SERVER_DIR }}
dangerous-clean-slate: false
dry-run: false
exclude: |
**/.git*
**/.git*/**
**/node_modules/**
README.md
.htpasswd
.env
.env.*
local-dir: ./
timeout: 60000
protocol: ftp
state-name: .ftp-deploy-sync-state.json
Делаем коммит
Делаем коммит и после коммита должна запуститься загрузка на хостинг. Проверять во вкладке Actions

Вы можете кликнуть на него и посмотреть, как он проходил. Если будут какие-то ошибки, он покажет их здесь. После исправления ошибок можно перезапустить конкретно этот Action, чтобы не делать много коммитов.
Писал заметку для себя. Если вам пригодилось, влепите ниже лайкос ❤️