Skip to content

Instantly share code, notes, and snippets.

@BenSampo
Last active April 30, 2024 03:41
Show Gist options
  • Save BenSampo/aa5f72584df79f679a7e603ace517c14 to your computer and use it in GitHub Desktop.
Save BenSampo/aa5f72584df79f679a7e603ace517c14 to your computer and use it in GitHub Desktop.
Laravel deploy script
# Change to the project directory
cd $FORGE_SITE_PATH
# Turn on maintenance mode
php artisan down || true
# Pull the latest changes from the git repository
# git reset --hard
# git clean -df
git pull origin $FORGE_SITE_BRANCH
# Install/update composer dependecies
composer install --no-interaction --prefer-dist --optimize-autoloader --no-dev
# Restart FPM
( flock -w 10 9 || exit 1
echo 'Restarting FPM...'; sudo -S service $FORGE_PHP_FPM reload ) 9>/tmp/fpmlock
# Run database migrations
php artisan migrate --force
# Clear caches
php artisan cache:clear
# Clear expired password reset tokens
php artisan auth:clear-resets
# Clear and cache routes
php artisan route:cache
# Clear and cache config
php artisan config:cache
# Clear and cache views
php artisan view:cache
# Install node modules
# npm ci
# Build assets using Laravel Mix
# npm run production --silent
# Turn off maintenance mode
php artisan up
@npostman
Copy link

npostman commented Jul 26, 2022

@ninety99nine Glad I could help with this issue.. but there is still something not feeling right to your approach. So you are deploying the application from within the application? What if something goes wrong in the script.. That will leave your application down, and no way for you to recover from that..(without terminal-ing into your server). I think you need to find a way to trigger the deployment outside of your application. Maybe some kind of stand-alone webhook you can call that does not rely on the laravel installation..

UPDATE:
Also, I'm not sure how that PHP constant will behave on multi-version PHP installations.. Guess that will conflict at some point.

@ninety99nine
Copy link

@npostman, Thank you for that. I understand what you mean and will look more into this. For now, I was running everything within the same application just to understand the basic concepts of simplifying the deployment process, but I do see that this will need to be an external process that is not coupled with the Laravel Application. Thanks for the PHP constant update, that makes sense.

@ejntaylor
Copy link

@npostman thanks for sharing the hash_resources.txt approach - works great!

@accubrain
Copy link

@ninety99nine I am also using same concept but I have a one master application, using that I am deploying other applications on same server. I used Stackoverflow solution for ssh key. Everything is configured properly but now I am getting permission issue for other project directories white trying to git pull

image

For security purpose I don't want to give permissions to www-data

Did you get such type of permission issues or any suggestion for this error?

Thank you.

@ninety99nine
Copy link

Hi @npostman, are you able to assist @accubrain regarding his permission issue?

@accubrain
Copy link

@ninety99nine @npostman It works if I run following commands:
sudo chown -R $USER:www-data /var/www/example.com
sudo chmod -R 775 /var/www/example.com/storage

Is this safe?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment