Как правильно деплоить laravel проект?

Добрый день, интересует вопрос - как правильно работать и деплоить laravel проект.

К примеру сейчас веду разработку полностью по фтп на прямую обновляя изменения на сайте. Но это не актуально если проект посещает много людей и могут увидеть ошибку в любой момент обновления.

Так вот, никогда не работал с гитом и с прочими системами. Насколько я понимаю разработку можно вести на локалке, только не понимаю как тогда будет бд подтягиваться (отдельно локальная и отдельно сервер или общая?). Так же установить git (систему контроля версия). Затем работать на локалке, а когда уже все оттестировано, загружать сначала на git, а потом каким то образом получить все изменения на сервере.

Постарался максимально объяснить суть проблемы, надеюсь получилось. Спасибо, хорошего дня!
  • Вопрос задан
  • 703 просмотра
Решения вопроса 1
tommy-vercetti
@tommy-vercetti
Symfony/Golang
Т.к вы не работали с системами контроля версий и не сталкивались с деплоем, то я не буду вам советовать CI/CD с различными ветками и тд. Вам сходу будет сложно разобраться.

Предлагаю для начала более простой способ:

Если проект коммерческий, то создаем приватный репозиторий в каком-то сервисе (к примеру, GitHub).
Коммитим (фиксируем) изменения и пушим их в репозиторий.
Контроль версий нам нужен для того, чтобы хранить историю изменений проекта, делать откаты в случае ошибки и тд.

У Laravel есть пакет Laravel Envoy. В файле Envoy.blade.php описывыем список команд что нужно сделать на сервере, подключившись по SSH.
@task('production:deploy', ['on' => 'production'])
    cd /var/www/my-project-folder

    git pull origin master // подтягиваем изменения из репозитория

    php composer install --no-dev --optimize-autoloader

    php artisan migrate --force // запуск миграций
@endtask

И локально (на своем ПК) запускаем таску envoy run production:deploy. Envoy подключится по SSH к серверу и запустит там эти команды.

Про работу с базамы данных:

Должно быть несколько БД: локальная и продакшн.
Допустим, я хочу добавить новое поле в БД. Для этого локально создаю миграцию (это обычный php-класс), описываю какое поле добавить и запускаю её. Коммичу изменения в git и делаю пуш в репозиторий. И запускаю таску envoy run production:deploy, а там у нас уже есть команда для миграций.
Для генерации тестовых данных для локальной бд можно использовать сиды.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
SH8DER
@SH8DER
Начинающий Web-разработчик
Я профессионально не занимаюсь разработкой, и тем более не знаком с Laravel. НО

Ведёшь разработку локально, база данных у тебя тоже локальная с фейковыми данным (в Laravel вроде Facker Seeds есть), структуру меняешь через миграции. Пишешь тесты на каждую новую фичу, используешь Composer.

У тебя должен быть репозиторий с несколькими ветками, минимум 2 - dev - master.

Когда сделал новую фичу на локалке, пушиш её в ветку dev, изменения улетают допустим в GitLAb -- там запускается CI скрипт, прогоняются тесты, если всё ок, то делается мёрдж ветки с данной фичей в мастер, после чего запускается хук и прод.сервер делает у себя Pull мастера, после чего на серваке запускаются скрипты обновления зависимостей Composer, миграции и т.д.

Ну в общем как-то так, я думаю профессионалы поправят меня, но в целом примерно так ведётся разработка.
ps - можно ещё это всё в docker контейнеры запихать, по желанию.
Ответ написан
php666
@php666
PHP-макака
только не понимаю как тогда будет бд подтягиваться
никак. зачем тебе боевые данные на локалке? Достаточно раз в неделю/месяц сделать восстановление из файла бэкапа с боевого сервера. У тебя не так часто меняются таблицы думаю.

Про структуру таблиц - есть миграции. Это в доках по ларавелу написано.

По гиту и композеру. Самое простое:

Нужен локально гит. Под windows тут.
Нужен композер (или архив composer.phar)
Инициализируешь на гитхабе репозиторий
сливаешь локально этот пустой репозиторий к себе на комп, делая в утилите gitbash
cd C:/govnocode
git clone https://github.com/youprofilename/reponame.git .
кидаешь в C:/govnocode свой код, предварительно указав в gitignore то, что не должно быть в гите - файлы логов, файлы с изображениями пользователей, всякие мусорные файлы типа test.php и тд
делаешь
git commit -a -m "govnocode"
git push origin master
говнокод твой улетит в репозиторий - это будет первый пуш кода в репозиторий

на сервере делаешь новую боевую директорию, выполняешь
git clone https://github.com/youprofilename/reponame.git .
с гита все файлы прилетят тебе на хост

дома правишь файлы, делаешь
git commit -a -m "govnocode version 2"
git pull origin master
git push origin master

изменения уйдут в репо. когда надо подтянуть на сервер. делаешь на сервере
git pull origin master

кмпозер запускаешь для подтягивания зависимостей, доки в сети есть, запускать нужно и на локальном пк и на серваке
Ответ написан
zorca
@zorca
Deployer вполне справится. Есть готовая обертка для Laravel: https://github.com/lorisleiva/laravel-deployer
Следующим шагом вешаем деплой на Github Actions на ветку stage скажем и наслаждаемся автоматической отправкой изменений при пуше в эту ветку.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы