Reusable Deployer 8 tasks and recipes for Statik.be projects.
- PHP 8.3+
- Deployer 8.x
composer require --dev statikbe/deployer-tasksOr use our bitbucket images which already have this package installed. If you update this package, please rebuild the bitbucket Docker images so the new changes are usable in the CI/CD pipelines.
<?php
namespace Deployer;
require 'vendor/statikbe/deployer-tasks/recipe/laravel.php';
// regular deployer host configuration:
set('application', 'my-app');
set('repository', 'git@github.com:statikbe/my-app.git');
host('production')
->set('hostname', 'prod.example.org')
->set('deploy_path', '/var/www/my-app');<?php
namespace Deployer;
require 'vendor/statikbe/deployer-tasks/recipe/craft.php';
// ...host configRequire an individual task file and wire the hook yourself:
require 'vendor/statikbe/deployer-tasks/recipe/tasks/voight.php';
after('deploy', 'statik:voight');| Task | Description |
|---|---|
statik:reload-phpfpm |
Reload PHP-FPM safely with mutex, debounce, and opcache validation. Wired by both starters to after('deploy:symlink', ...). Combell-specific — set combell_hosting to false (globally or per-host) to skip it on non-Combell hosts. |
statik:copy_env |
Copy the stage-specific .env file (env_file, relative to release_path) into {{deploy_path}}/shared/.env. No-ops when env_file is unset. Wired by the Laravel starter to before('deploy:shared', ...). |
statik:copy_htaccess |
Copy the stage-specific htaccess file (htaccess_file, relative to release_path) into {{public_path}}/.htaccess. No-ops when htaccess_file is unset. Wired by both starters to before('deploy:shared', ...). |
statik:voight |
Download and run the Voight versioning script in the release path. |
env_file and htaccess_file are read with an inline null default, so they never shadow a value set per host (e.g. in hosts.yml) or globally. Set them per host:
# hosts.yml
production:
hostname: prod.example.org
deploy_path: /var/www/my-app
env_file: .env.production
htaccess_file: .htaccess.productionstatik:copy_htaccess (and statik:reload-phpfpm) resolve the web root via {{public_path}}. The Laravel base recipe sets this to public; the Craft starter sets it to web. If you require either task à la carte without a framework recipe, set public_path yourself.
More tasks (composer install with secret env, local-build asset rsync, maintenance banner, config-file sync) ship in upcoming releases.
If the probe URL is behind .htaccess basic auth, configure the credentials in your project's deploy.php after the require line:
require 'vendor/statikbe/deployer-tasks/recipe/laravel.php';
set('basic_auth_user', 'htaccess_user');
set('basic_auth_password', 'htaccess_password');
host('production')->set(/* ... */);Both values must be set; if either is empty the task runs without auth. You can also source them from the environment (e.g. set('basic_auth_user', getenv('BASIC_AUTH_USER'));) — handy for Bitbucket Pipelines repository variables. Per-host overrides work too: host('staging')->set('basic_auth_user', '...');.
The application's .env no longer needs BASIC_AUTH_USER / BASIC_AUTH_PASSWORD for this task. Existing projects should remove those keys from .env and move them to deploy.php via the set() calls above.
composer install
composer test # Pest — currently no tests; helper classes in src/ will get unit tests
composer format # Laravel Pint
composer analyse # PHPStan (exits non-zero until src/ has PHP files; recipe/ is intentionally excluded since Deployer's global functions need stubs)The recipes are smoke-tested by loading them through Deployer:
vendor/bin/dep --file=tests/fixtures/laravel-deploy.php list
vendor/bin/dep --file=tests/fixtures/craft-deploy.php listMIT — see LICENSE.