Bash деплой - аналог Envoyer
24.02.2021
382

Bash деплой - аналог Envoyer

Для быстрого деплоя личных или простых проектов можно использовать сервисы подобные Envoyer.io о котором писал ранее или написать свой велосипед на bash.


Скрипт создает резервную копию базы данных, клонирует репозиторий, устанавливает зависимости совместно с запуском нужных команд для релиза.


Структура папок:

  • releases - папка с резилами
  • backup - папка с бекапами базы данных


Изначально под root пользователем необходимо предоставить пользователю выполняющим скрипт права на выполнение перезагрузки сервисов (YOUR_USER заменить на пользователя запускающим скрипт):

echo "YOUR_USER ALL=NOPASSWD: /usr/sbin/service php7.4-fpm reload" | sudo tee -a /etc/sudoers.d/php-fpm > /dev/null
echo "YOUR_USER ALL=NOPASSWD: /usr/sbin/service nginx restart" | sudo tee -a /etc/sudoers.d/php-fpm > /dev/null
echo "YOUR_USER ALL=NOPASSWD: /usr/sbin/service supervisor restart" | sudo tee -a /etc/sudoers.d/php-fpm > /dev/null


Полный скрипт для деплоя проекта: 


#!/bin/sh

# Grant privileges
# echo "YOUR_USER ALL=NOPASSWD: /usr/sbin/service php7.4-fpm reload" | sudo tee -a /etc/sudoers.d/php-fpm > /dev/null
# echo "YOUR_USER ALL=NOPASSWD: /usr/sbin/service nginx restart" | sudo tee -a /etc/sudoers.d/php-fpm > /dev/null
# echo "YOUR_USER ALL=NOPASSWD: /usr/sbin/service supervisor restart" | sudo tee -a /etc/sudoers.d/php-fpm > /dev/null

NAME=$(date +"%m-%d-%Y-%H-%M-%S")
FOLDER=releases/$NAME
BACKUP=backup/before_$NAME.sql

echo "Backup..."
mysqldump -u USER -pPASSWORD DATABASE > $BACKUP

mkdir ${FOLDER}

cd ${FOLDER}

echo "Git clone..."
git clone git@bitbucket.org:USER/PROJECT.git .

rm -rf storage
ln -s ../../storage storage
ln -s ../../.env .env

echo "Composer install..."
composer install

echo "Npm install..."
npm install
npm run production

echo "Artisan..."
php artisan storage:link
php artisan route:clear
php artisan cache:clear
php artisan migrate --force
php artisan queue:restart

read -p "Restart and deploy? y/n:" answer

if [ $answer = "y" ]; then
    cd ../../
    if [ -f current ]; then
      rm current;
    fi
    ln -s ${FOLDER} current

    sudo service php7.4-fpm reload
    sudo service nginx restart
    sudo service supervisor restart
fi



Скрипт на GitHub

Источник: ZetRider
Начало работы с Google Data Studio + MySQL
18.07.2021
27
Начало работы с Google Data Studio + MySQL

Для составления отчетов или анализа данных Google предоставляет удобный инструмент/конструктор Data Studio.Data Studio умеет из "коробки" уд...

Читать →
Envoyer - деплой без задержек
26.01.2021
336
Envoyer - деплой без задержек

Zero Downtime PHP Deployment - способ развернуть сервис незаметно для посетителей.Во времена развития CI/CD на фоне инструментов GitLab, BitBucket, Tr...

Читать →