Skip to content

Instantly share code, notes, and snippets.

@lattespirit
Last active September 30, 2017 08:54
Show Gist options
  • Save lattespirit/2dd55a7baef49e1a6da1a7d2665497b9 to your computer and use it in GitHub Desktop.
Save lattespirit/2dd55a7baef49e1a6da1a7d2665497b9 to your computer and use it in GitHub Desktop.
Envoy config file to deoply Laravel 5.5 Project
@servers(['web' => 'me'])
@setup
$date = date('YmdHis');
$repo = 'git@example.com:username/repo.git';
$app_dir = 'your/host/path';
$releases = '/var/www/releases';
$release = "release_{$date}";
$vendors = '/var/www/vendors';
$vendor_folder = "vendor_{$date}";
$syslinks_folder = '/var/www/syslinks';
$vendor = '/var/www/syslinks/vendor';
$env_path = '/var/www/syslinks/.env';
$log_folder_path = '/var/www/syslinks/logs';
$repo_composer_file = "{$releases}/{$release}/composer.json";
$app_composer_file = "{$app_dir}/composer.json";
@endsetup
@task('init')
if [ ! -d {{ $releases }} ]; then
mkdir {{ $releases }};
cd {{ $releases }};
git clone -b master {{ $repo }} {{ $release }};
echo "Repository cloned";
cd {{ $release }};
composer install --prefer-dist --no-scripts;
php artisan clear-compiled;
php artisan package:discover;
echo "Composer install finished.";
[ -d {{ $syslinks_folder }} ] || mkdir {{ $syslinks_folder }};
mkdir -p {{ $vendors }}/{{ $vendor_folder }}
mv vendor {{ $vendors }}/{{ $vendor_folder }};
ln -nfs {{ $vendors }}/{{ $vendor_folder }}/vendor {{ $vendor }} ;
ln -nfs {{ $vendor }} vendor;
echo "Vendor folder set up";
composer dump-autoload;
echo "Composer dump autoload finished";
[ -d {{ $log_folder_path }} ] || mkdir {{ $log_folder_path }};
rm -rf storage/logs
ln -nfs {{ $log_folder_path }} storage;
chgrp -h vagrant storage/logs;
echo "Storage directory set up";
mv .env.example .env;
php artisan key:generate;
mv .env {{ $env_path }};
echo "Env key generated";
ln -s {{ $env_path }} .env;
echo "Environment file set up";
ln -nfs {{ $releases }}/{{ $release }} {{ $app_dir }};
chgrp -h vagrant {{ $app_dir }};
else
echo "Deployment path already initialised (current symlink exists)!"
fi
@endtask
@story('deploy', ['on' => 'web'])
fetch_repo
locate_vendor
update_permissions
update_symlinks
@endstory
@task('fetch_repo')
cd {{ $releases }};
git clone -b master {{ $repo }} {{ $release }};
@endtask
@task('locate_vendor')
cd {{ $releases }}/{{ $release }};
isComposerJsonUpdated=false
cmp -s {{ $repo_composer_file }} {{ $app_composer_file }} || isComposerJsonUpdated=true
if [[ $isComposerJsonUpdated == 'true' ]]; then
composer install --prefer-dist --no-scripts;
php artisan clear-compiled;
php artisan package:discover;
mkdir -p {{ $vendors }}/{{ $vendor_folder }};
mv vendor {{ $vendors }}/{{ $vendor_folder }};
ln -nfs {{ $vendors }}/{{ $vendor_folder }}/vendor {{ $vendor }};
echo 'Vendor folder updated.';
fi
ln -nfs {{ $vendor }} vendor;
echo "Vendor folder set up";
composer dump-autoload;
echo "Composer dump autoload finished";
@endtask
@task('update_permissions')
cd {{ $releases }};
chgrp -R vagrant {{ $release }};
chmod -R ug+rwx {{ $release }};
echo "Release folder permission set up";
@endtask
@task('update_symlinks')
cd {{ $releases }}/{{ $release }}
ln -s {{ $env_path }} .env;
echo "Environment file set up";
rm -rf storage/logs
ln -nfs {{ $log_folder_path }} storage;
chgrp -h vagrant storage/logs;
echo "Storage directory set up";
ln -nfs {{ $releases }}/{{ $release }} {{ $app_dir }};
chgrp -h vagrant {{ $app_dir }};
echo "Link to latest release code finished";
sudo service php7.1-fpm reload;
echo "PHP reloaded";
echo "Deployment finished";
@endtask
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment