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

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

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

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

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

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 - приватная часть ключа, который мы сформировали

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

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

Вопросы на собеседовании - Общие

ООП, алгоритмы, паттерны проектирования, REST API, принципы S.O.L.I.D., Clean Code и Clean Architecture, и др. В этой статье мы рассмотрим некоторые из наиболее распространенных вопросов, с которыми сталкиваются программисты и предоставим ответы на них.

Все про индексацию в поисковых системах: robots.txt, sitemap.xml, RSS-фиды, микроразметка

Поисковые системы используют специальные алгоритмы и краулеры, чтобы решать: какую страницу просканировать, какую проигнорировать, и как её классифицировать в своей огромной базе данных. Правильная настройка технических параметров - от robots.txt до микроразметки - помогает направить этих роботов туда, где действительно важно. В этой статье мы разберём, как работает индексация, какие инструменты позволяют контролировать ее, и как превратить технические тонкости в реальные преимущества для вашего сайта.

Вопросы на собеседовании - Laravel

Laravel - один из самых популярных PHP-фреймворков, который широко используется для разработки веб-приложений. Если вы готовитесь к собеседованию на должность Laravel-разработчика, то, вероятно, ищете полезную информацию и советы для подготовки. В этой статье мы представляем несколько вопросов, которые могут быть заданы на собеседовании, и рассматриваем ответы на них. Мы покроем такие темы, как архитектура фреймворка, маршрутизация, ORM, миграции, тестирование и безопасность. Надеемся, что эта статья поможет вам подготовиться к собеседованию и получить работу, о которой вы мечтаете.