#linux #laravel #git #ubuntu
#linux #laravel #git #ubuntu
Вопрос:
У меня есть DigitalOcean VPS с Ubuntu и несколькими проектами laravel, для начальной настройки моих проектов я делаю git clone для создания папки с файлами моего приложения из моего онлайн-репозитория.
Я выполняю всю работу по разработке на своем локальном компьютере, где у меня есть две ветви (master и develop), что я делаю, так это объединяю develop с моим локальным master, затем я загружаю из master в свой локальный репозиторий.
Возвращаясь на мой рабочий сервер, когда я хочу добавить все изменения, добавленные в рабочий сервер, я выполняю git-извлечение из origin, пока что это приводило к тому, что git говорил мне сохранить мои изменения, почему это?
Каков был бы наилучший подход для извлечения изменений на рабочий сервер? имейте в виду, что на моем рабочем сервере нет постоянного рабочего каталога, все, что я делаю на своем VPS, — это либо клонирование, либо запуск обновлений в рабочий процесс.
Комментарии:
1. Я бы рекомендовал вообще не клонировать и не извлекать с производственного сервера. Существуют лучшие способы развертывания
Ответ №1:
Вы можете взглянуть на системы CI / CD (непрерывная интеграция / непрерывная доставка). GitLab, например, предлагает бесплатный план для небольших команд.
Вы можете создать конвейер с помощью шага ручного развертывания (вам нужно нажать кнопку после объединения кода с основной веткой) и использовать любой инструмент, который вам нравится, для развертывания вашего кода (scp, rsync, ftp, sftp и т.д.).
И самое большое преимущество заключается в том, что у вас может быть несколько промежуточных шагов (даже для рабочих ветвей), где вы можете запускать модульные тесты, которые не позволят вам загружать неудачные сборки (всякий раз, когда вы объединяете нерабочий код)
Ответ №2:
Для решения первой проблемы выполните git status
в production, чтобы увидеть, какие файлы git считает измененными или добавленными, и рассмотрите возможность добавления их в ваш .gitignore
файл (который сам по себе должен быть частью вашего репозитория). У Laravel обычно есть хорошие значения по умолчанию для них, но вы, возможно, добавили что-то или отклонились от них в процессе обновления Laravel.
Для развертывания лучше всего иметь что-то согласованное, воспроизводимое, регистрируемое и подлежащее возврату. Для этого я бы рекомендовал выбрать утилиту развертывания. Обычно они выполняют практически одно и то же:
- Вы определяете параметры развертывания в коде, которые вы можете зафиксировать как часть своего репозитория (не пароли, конечно, но такие вещи, как имя сервера, путь развертывания и задачи развертывания).
- Вы инициируете развертывание непосредственно со своего локального компьютера.
- Скрипт / утилита подключается по SSH к вашему целевому серверу и извлекает последний код из удаленного репозитория git (авторизованный через SSH-ключ, пересылаемый на сервер) в папку «release».
- Скрипт выполняет любые дополнительные задачи, которые вы определяете (
composer install
,npm run prod
systemctl restart php-fpm
,.env
программное связывание общих файлов, таких как, и т.д.) - Скрипт программно связывает корневой каталог документа с вашей новой папкой «release», что приводит к практически нулевому времени простоя при развертывании. Если какой-либо из предыдущих шагов завершится неудачей или вы обнаружите ошибку в последней версии, вы просто создаете программную ссылку на папку предыдущей версии, и ваш сайт все еще работает.
Вот несколько решений, которые вы можете проверить, и все они делают подобные вещи:
- Laravel Envoyer: сторонний (платный) сервис, который позволяет выполнять развертывание с помощью веб-интерфейса GUI.
- Laravel Envoy: пакет первого производителя (бесплатный), который позволяет вам подключаться к вашему prod-серверу и выполнять задачи развертывания скриптов. Это очень простой способ, поскольку вы должны написать все команды самостоятельно, но некоторые могут предпочесть это.
- Capistrano: Это (бесплатно) проверенная популярная утилита для развертывания на ruby.
- Средство развертывания: (Бесплатный) PHP-эквивалент Capistrano. Проще в использовании, имеет множество встроенных задач (включая Laravel) и не требует ruby.
Использование этих утилит не обязательно исключает использование CI / CD, если вы хотите пойти этим путем. Вы можете использовать эти инструменты для определения шага CD в вашем конвейере, все еще выполняя другие шаги заранее.