Все статьи Дата обновления: 06.07.2025

Настройка github actions для деплоя проекта на Ubuntu сервере

Гибкий и при этом простой в настройке и использовании способ для деплоя своего кода из репозитория на сервер.

Автор материала Артем Менченя
Автор материала

Артем Менченя

Co-founder | CTO. Руковожу технической командой и участвую на всех стадиях разработки продукта.

Первым шагом нам нужно создать ключ для доступа. Вначале создаем ключ. Выполняем команду:

ssh-keygen

Можно задать имя файла и passphrase. Будем использовать /home/ilavista/.ssh/github_rsa без passphrase:

Далее нам нужно создать Deploy key на GitHub. Идем по пути Settings > Deploy keys.

И нажимаем Add deploy key. Нужно скопировать ключ. Для этого выполним команду:

cat /home/ilavista/.ssh/github_rsa.pub

И копируем содержимое файла в поле Key

Итоговый результат:

Далее нам нужно добавить этот ключ в файл /home/ilavista/.ssh/authorized_keys

nano /home/ilavista/.ssh/authorized_keys

Вставляем ключ и сохраняем файл.

Теперь создадим файл конфигурации для загрузки из репозитория без использования пароля.

nano /home/ilavista/.ssh/config

Содержимое файла:

Host github.com-repo-0
   Hostname github.com
   IdentityFile ~/.ssh/github_rsa

Вторым шагом нам необходимо создать config файл, который опишет последовательность действий, выполняемых GitHub Actions. Файл должен размещаться в директории .github/workflows. Команда для создания директории через терминал:

mkdir -p .github/workflows

Далее необходимо создать конфигурационный файл. В этом примере мы будем производить деплой при изменениях в dev ветке проекта, поэтому я назову файл по имени ветки:

nano .github/workflows/dev.yml

Вот пример файла, который производит компиляцию и загружает изменения на сервер.

on:
push:
  branches:
    - production

env:
  NODE_VERSION: 16

jobs:
  deploy_prod_server:
    runs-on: ubuntu-latest
      steps:
      - uses: actions/checkout@v2
      with:
          ref: dev

    - name: "Set up NodeJs"
      uses: actions/setup-node@v1
      with:
        node-version: ${{ env.NODE_VERSION }}

    - name: "NPM Install"
    run: npm install

    - name: "NPM run prod"
    run: npm run build

    - name: "Setup"
    uses: fifsky/ssh-action@master
    with:
      command: |
        cd /var/www/erp

        # Turn on maintenance mode
        php artisan down || true

        # Pull the latest changes from the git repository
        git pull git@github.com-repo-1:notimetocode/erp.git production

        # Install/update composer dependencies
        composer install --no-interaction --prefer-dist --optimize-autoloader --no-dev

        # Run database migrations
        php artisan migrate --force

        # Clear caches
        php artisan cache:clear

        # Clear config
        php artisan config:clear

        # Clear routes
        php artisan route:clear

        # Clear and cache routes
        php artisan route:cache

        # Clear and cache views
        php artisan view:cache

        # Turn off maintenance mode
        php artisan up
        host: ${{ secrets.HOST }}
        user: ${{ secrets.USER }}
        key: ${{ secrets.PRIVATE_KEY}}

    - name: "Deploy assets to Server"
    uses: appleboy/scp-action@v0.1.3
    with:
      host: ${{ secrets.HOST }}
      username: ${{ secrets.USER }}
      key: ${{ secrets.PRIVATE_KEY }}
      source: "${{ github.workspace }}/public/build"
      target: "/var/www/erp"
      tar_tmp_path: /tmp/
      strip_components: 2
      debug: true

В файле используются переменные. Нам необходимо их добавить переменные в наш репозиторий. Для этого переходим во вкладку Settings > Secrets and variables > Actions

Далее создадим три новые переменные

HOST - адрес сервера (или доменное имя проекта, привязанное к серверу)

USER - пользователь, от имени которого мы подключаемся к серверу

PRIVATE_KEY - приватная часть ключа, который мы сформировали

После этого можно загрузить обновления и проверить выполнение скрипта:

Читайте также

Как ускорить загрузку страниц интернет-магазина: от изображений до серверов

Интернет-магазины, которые не успевают загрузиться за считанные секунды, рискуют потерять не только потенциальных клиентов, но и позиции в поисковой выдаче. Скорость загрузки сайта - это не просто технический параметр, а стратегический фактор, влияющий на SEO, поведенческие метрики и, в конечном итоге, на прибыль.

Развертывание Laravel проекта на сервере Ubuntu 20.04

Если вы хотите развернуть свой Laravel проект на удаленном сервере, то вам нужно выполнить ряд шагов, чтобы установить все необходимые зависимости и настроить окружение. В этой статье мы рассмотрим процесс развертывания Laravel проекта на сервере Ubuntu 20.04 и дадим вам подробные инструкции, как это сделать.

Unit-тестирование. Преимущества для бизнеса и команды разработки

В статье рассматривается один из видов тестирования программного обеспечения - Unit-тестирование. Оно позволяет проверять каждый модуль приложения на предмет соответствия требованиям и правильной работы, изолируя его от других компонентов. В данной статье мы рассмотрим преимущества Unit-тестирования для бизнеса и команды разработки, а также приведем пример Unit-теста для Laravel приложения.