Created
September 17, 2018 07:08
-
-
Save sidigi/bb7557b7485fe560fe0c828def9c0218 to your computer and use it in GitHub Desktop.
Laravel deploy (envoy file)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@setup | |
$user = ''; | |
/* | |
|-------------------------------------------------------------------------- | |
| Git Config | |
|-------------------------------------------------------------------------- | |
| | |
| The git repository location. | |
| | |
*/ | |
$repo = ''; | |
$branch = 'master'; | |
/* | |
|-------------------------------------------------------------------------- | |
| Server Paths | |
|-------------------------------------------------------------------------- | |
| | |
| The base paths where the deployment will happens. | |
| | |
*/ | |
$timezone = 'Europe/Moscow'; | |
$date = new DateTime('now', new DateTimeZone($timezone)); | |
$path = '/var/www/salaries'; | |
$current_dir = $path . '/current'; | |
$releases_dir = $path . '/releases'; | |
$release = $date->format('YmdHis'); | |
$release_dir = $releases_dir . '/' . $release; | |
/* | |
|-------------------------------------------------------------------------- | |
| Num of releases | |
|-------------------------------------------------------------------------- | |
| | |
| The number of releases to keep. | |
| | |
*/ | |
$keep = 15; | |
/* | |
|-------------------------------------------------------------------------- | |
| Sharable resources | |
|-------------------------------------------------------------------------- | |
| | |
| Define a associative array with the resources to be shared across releases. | |
| The value of a element in the array can only be 'd' for directories or 'f' for files. | |
| | |
*/ | |
$shared = [ | |
'storage' => 'd', | |
'.env' => 'f', | |
]; | |
/* | |
|-------------------------------------------------------------------------- | |
| Writable resources | |
|-------------------------------------------------------------------------- | |
| | |
| Define the resources that needs writable permissions. | |
| | |
*/ | |
$writable = [ | |
'storage' | |
]; | |
@endsetup | |
@servers(['production' => $user . '@' ]) | |
@macro('app:install', ['on' => 'production']) | |
clone | |
composer:install | |
assets:install | |
assets:build | |
permissions | |
symlinks | |
{{-- migrate:refresh | |
tests--}} | |
clean | |
@endmacro | |
@macro('app:import', ['on' => 'production']) | |
import | |
@endmacro | |
@macro('app:deploy', ['on' => 'production']) | |
clone | |
composer:install | |
assets:install | |
assets:build | |
permissions | |
symlinks | |
down | |
migrate | |
optimize | |
up | |
{{--tests--}} | |
clean | |
@endmacro | |
@task('clone', ['on' => $on]) | |
mkdir -p {{$release_dir}} | |
git clone --depth 1 -b {{$branch}} "{{$repo}}" {{$release_dir}} | |
echo '# - Repository has been cloned' | |
@endtask | |
@task('composer:install', ['on' => $on]) | |
composer self-update | |
cd {{$release_dir}} | |
composer install --no-interaction --no-dev --prefer-dist -q -o | |
echo '# - Composer dependencies has been installed' | |
@endtask | |
@task('permissions', ['on' => $on]) | |
@foreach($writable as $item) | |
chmod -R 755 {{ $release_dir }}/{{ $item }} | |
chmod -R g+s {{ $release_dir }}/{{ $item }} | |
chgrp -R www-data {{ $release_dir }}/{{ $item }} | |
echo "# - Permissions have been set for {{ $release_dir }}/{{ $item }}" | |
@endforeach | |
@endtask | |
@task('symlinks', ['on' => $on]) | |
[ -d {{ $path }}/shared ] || mkdir -p {{ $path }}/shared; | |
@foreach($shared as $item => $type) | |
if ( [ -{{ $type }} '{{ $path }}/shared/{{ $item }}' ] && [ -{{ $type }} '{{ $release_dir }}/{{ $item }}' ] ); | |
then | |
rm -rf {{ $release_dir }}/{{ $item }}; | |
echo "# - rm -rf {{ $release_dir }}/{{ $item }}"; | |
elif ( [ ! -{{ $type }} '{{ $path }}/shared/{{ $item }}' ] && [ -{{ $type }} '{{ $release_dir }}/{{ $item }}' ] ); | |
then | |
mv {{ $release_dir }}/{{ $item }} {{ $path }}/shared/{{ $item }}; | |
echo "# - mv {{ $release_dir }}/{{ $item }} {{ $path }}/shared/{{ $item }}"; | |
fi | |
ln -nfs {{ $path }}/shared/{{ $item }} {{ $release_dir }}/{{ $item }} | |
echo "# - Symlink has been set for {{ $release_dir }}/{{ $item }}" | |
@endforeach | |
ln -nfs {{ $release_dir }} {{ $path }}/current; | |
chgrp -h www-data {{ $path }}/current; | |
echo "# - All symlinks have been set" | |
@endtask | |
@task('optimize', ['on' => $on]) | |
cd {{$release_dir}} | |
php artisan clear-compiled --env={{ $on }}; | |
{{--php artisan optimize --env={{ $on }};--}} | |
php artisan config:cache --env={{ $on }}; | |
{{--php artisan route:cache --env={{ $on }};--}} | |
php artisan cache:clear --env={{ $on }}; | |
echo '# - Artisan optimized'; | |
@endtask | |
@task('migrate', ['on' => $on]) | |
php {{ $release_dir }}/artisan migrate --force --no-interaction; | |
@endtask | |
@task('migrate:refresh', ['on' => $on]) | |
php {{ $release_dir }}/artisan migrate:refresh --seed --force --no-interaction; | |
@endtask | |
@task('assets:install', ['on' => $on]) | |
cd {{ $release_dir }}; | |
yarn; | |
echo '# - Assets has been installed' | |
@endtask | |
@task('assets:build', ['on' => $on]) | |
cd {{ $release_dir }}; | |
yarn run production; | |
echo '# - Assets has been build' | |
@endtask | |
@task('tests', ['on' => $on]) | |
{{ $release_dir }}/vendor/bin/phpunit {{ $release_dir }}; | |
echo '# - All test has passed' | |
@endtask | |
@task('clean', ['on' => $on]) | |
cd {{ $releases_dir }}; | |
rm -rf $(ls -t | tail -n +{{ $keep }}); | |
echo '# - Old releases has been deleted' | |
@endtask | |
@task('down') | |
cd {{ $release_dir }}; | |
php artisan down; | |
echo '# - App is down' | |
@endtask | |
@task('up') | |
cd {{ $current_dir }}; | |
php artisan up; | |
echo '# - App is up' | |
@endtask | |
@task('import', ['on' => $on]) | |
cd {{$current_dir}} | |
php artisan import | |
echo '# - Import was successfully done' | |
@endtask |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment