PHP code example of artisan-build / forge-client
1. Go to this page and download the library: Download artisan-build/forge-client library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
artisan-build / forge-client example snippets
// config/forge-client.php
return [
'default_organization' => env('FORGE_ORGANIZATION', 'my-org'),
'default_server' => env('FORGE_SERVER', 'production-server'),
];
use ArtisanBuild\ForgeClient\ForgeClient;
// Initialize the SDK
$forge = new ForgeClient();
// Authenticate with your API token
$forge->authenticate(config('forge-client.api_token'));
// List all organizations
$response = $forge->organizations()->organizationsIndex(
sort: '-created_at',
pagesize: 25,
pagecursor: null
);
$organizations = $response->json('data');
foreach ($organizations as $org) {
echo "Organization: {$org['name']} (ID: {$org['id']})\n";
}
use ArtisanBuild\ForgeClient\ForgeClient;
$forge = new ForgeClient();
$forge->authenticate(config('forge-client.api_token'));
$response = $forge->organizations()->organizationsIndex(
sort: '-created_at',
pagesize: 25,
pagecursor: null
);
$organizations = $response->json('data');
$response = $forge->organizations()->organizationsShow(
organization: 'my-organization' // slug or ID
);
$organization = $response->json('data');
$response = $forge->servers()->organizationsServersIndex(
organization: 'my-org',
sort: '-created_at',
pagesize: 25,
pagecursor: null,
filteripAddress: null,
filtername: null,
filterregion: null,
filtersize: null,
filterprovider: null,
filterubuntuVersion: null,
filterphpVersion: null,
filterdatabaseType: null
);
$servers = $response->json('data');
$response = $forge->servers()->organizationsServersShow(
organization: 'my-org',
server: 12345 // server ID
);
$server = $response->json('data');
use ArtisanBuild\ForgeClient\Enums\CloudProvider;
use ArtisanBuild\ForgeClient\Enums\ServerType;
use ArtisanBuild\ForgeClient\Enums\DatabaseType;
use ArtisanBuild\ForgeClient\Enums\PhpVersion;
use ArtisanBuild\ForgeClient\Enums\UbuntuVersion;
$response = $forge->servers()->organizationsServersStore(
organization: 'my-org'
);
// Note: Body parameters are set on the request object
// Check the generated request class for available parameters
$response = $forge->servers()->organizationsServersActionsStore(
organization: 'my-org',
server: 12345
);
$response = $forge->servers()->organizationsServersDestroy(
organization: 'my-org',
server: 12345
);
$response = $forge->sites()->organizationsServersSitesIndex(
organization: 'my-org',
server: 12345,
sort: '-created_at',
pagesize: 25,
pagecursor: null,
filteraliases: null,
filtername: null
);
$sites = $response->json('data');
$response = $forge->sites()->organizationsServersSitesShow(
organization: 'my-org',
server: 12345,
site: 67890
);
$site = $response->json('data');
$response = $forge->sites()->organizationsServersSitesStore(
organization: 'my-org',
server: 12345
);
// Body parameters set on request object
$response = $forge->sites()->organizationsServersSitesUpdate(
organization: 'my-org',
server: 12345,
site: 67890
);
$response = $forge->sites()->organizationsServersSitesActionsStore(
organization: 'my-org',
server: 12345,
site: 67890
);
// Enable quick deploy
$response = $forge->sites()->organizationsServersSitesQuickDeployStore(
organization: 'my-org',
server: 12345,
site: 67890
);
// Disable quick deploy
$response = $forge->sites()->organizationsServersSitesQuickDeployDestroy(
organization: 'my-org',
server: 12345,
site: 67890
);
$response = $forge->sites()->organizationsServersSitesDestroy(
organization: 'my-org',
server: 12345,
site: 67890
);
$response = $forge->deployments()->organizationsServersSitesDeploymentsIndex(
organization: 'my-org',
server: 12345,
site: 67890,
sort: '-created_at',
pagesize: 25,
pagecursor: null
);
$deployments = $response->json('data');
$response = $forge->deployments()->organizationsServersSitesDeploymentsShow(
organization: 'my-org',
server: 12345,
site: 67890,
deployment: 111213
);
$deployment = $response->json('data');
$response = $forge->deployments()->organizationsServersSitesDeploymentsStore(
organization: 'my-org',
server: 12345,
site: 67890
);
$response = $forge->deployments()->organizationsServersSitesDeploymentsScriptsUpdate(
organization: 'my-org',
server: 12345,
site: 67890
);
// Body contains the deployment script content
$response = $forge->databases()->organizationsServersDatabasesIndex(
organization: 'my-org',
server: 12345,
sort: '-created_at',
pagesize: 25,
pagecursor: null,
filtername: null
);
$databases = $response->json('data');
$response = $forge->databases()->organizationsServersDatabasesShow(
organization: 'my-org',
server: 12345,
database: 44556
);
$database = $response->json('data');
$response = $forge->databases()->organizationsServersDatabasesStore(
organization: 'my-org',
server: 12345
);
// Body parameters
$response = $forge->databases()->organizationsServersDatabasesDestroy(
organization: 'my-org',
server: 12345,
database: 44556
);
$response = $forge->databases()->organizationsServersDatabaseUsersIndex(
organization: 'my-org',
server: 12345,
sort: '-created_at',
pagesize: 25,
pagecursor: null,
filtername: null
);
$users = $response->json('data');
$response = $forge->databases()->organizationsServersDatabaseUsersStore(
organization: 'my-org',
server: 12345
);
// Body parameters
$response = $forge->databases()->organizationsServersDatabaseUsersUpdate(
organization: 'my-org',
server: 12345,
databaseUser: 77889
);
$response = $forge->databases()->organizationsServersDatabaseUsersDestroy(
organization: 'my-org',
server: 12345,
databaseUser: 77889
);
$response = $forge->backgroundProcesses()->organizationsServersBackgroundProcessesIndex(
organization: 'my-org',
server: 12345,
sort: '-created_at',
pagesize: 25,
pagecursor: null,
filtercommand: null,
filterstatus: null
);
$processes = $response->json('data');
$response = $forge->backgroundProcesses()->organizationsServersBackgroundProcessesShow(
organization: 'my-org',
server: 12345,
backgroundProcess: 99887
);
$process = $response->json('data');
$response = $forge->backgroundProcesses()->organizationsServersBackgroundProcessesStore(
organization: 'my-org',
server: 12345
);
// Body
$response = $forge->backgroundProcesses()->organizationsServersBackgroundProcessesUpdate(
organization: 'my-org',
server: 12345,
backgroundProcess: 99887
);
$response = $forge->backgroundProcesses()->organizationsServersBackgroundProcessesActionsStore(
organization: 'my-org',
server: 12345,
backgroundProcess: 99887
);
$response = $forge->backgroundProcesses()->organizationsServersBackgroundProcessesDestroy(
organization: 'my-org',
server: 12345,
backgroundProcess: 99887
);
$response = $forge->firewallRules()->organizationsServersFirewallRulesIndex(
organization: 'my-org',
server: 12345,
sort: '-created_at',
pagesize: 25,
pagecursor: null,
filtername: null,
filterport: null,
filtertype: null
);
$rules = $response->json('data');
$response = $forge->firewallRules()->organizationsServersFirewallRulesShow(
organization: 'my-org',
server: 12345,
firewallRule: 55443
);
$rule = $response->json('data');
use ArtisanBuild\ForgeClient\Enums\FirewallRuleType;
$response = $forge->firewallRules()->organizationsServersFirewallRulesStore(
organization: 'my-org',
server: 12345
);
// Body
$response = $forge->firewallRules()->organizationsServersFirewallRulesDestroy(
organization: 'my-org',
server: 12345,
firewallRule: 55443
);
$response = $forge->sites()->organizationsServersSitesCertificatesIndex(
organization: 'my-org',
server: 12345,
site: 67890,
sort: '-created_at',
pagesize: 25,
pagecursor: null,
filterdomain: null
);
$certificates = $response->json('data');
$response = $forge->sites()->organizationsServersSitesCertificatesShow(
organization: 'my-org',
server: 12345,
site: 67890,
certificate: 22334
);
$certificate = $response->json('data');
use ArtisanBuild\ForgeClient\Enums\CertificateType;
$response = $forge->sites()->organizationsServersSitesCertificatesStore(
organization: 'my-org',
server: 12345,
site: 67890
);
// Body
$response = $forge->sites()->organizationsServersSitesCertificatesActionsStore(
organization: 'my-org',
server: 12345,
site: 67890,
certificate: 22334
);
$response = $forge->sites()->organizationsServersSitesCertificatesDestroy(
organization: 'my-org',
server: 12345,
site: 67890,
certificate: 22334
);
// List server commands
$response = $forge->commands()->organizationsServersCommandsIndex(
organization: 'my-org',
server: 12345,
sort: '-created_at',
pagesize: 25,
pagecursor: null
);
// List scheduled jobs
$response = $forge->scheduledJobs()->organizationsServersScheduledJobsIndex(
organization: 'my-org',
server: 12345,
sort: '-created_at',
pagesize: 25,
pagecursor: null
);
use ArtisanBuild\ForgeClient\Enums\CloudProvider;
CloudProvider::AWS; // 'aws'
CloudProvider::OCEAN2; // 'ocean2' (DigitalOcean)
CloudProvider::HETZNER; // 'hetzner'
CloudProvider::VULTR; // 'vultr'
CloudProvider::AKAMAI; // 'akamai' (Linode/Akamai)
CloudProvider::LARAVEL; // 'laravel' (Laravel Cloud)
CloudProvider::CUSTOM; // 'custom'
CloudProvider::OCEAN2->label(); // "DigitalOcean"
CloudProvider::OCEAN2->description(); // "DigitalOcean cloud hosting"
CloudProvider::isValid('ocean2'); // true
CloudProvider::options(); // Array of all options
use ArtisanBuild\ForgeClient\Enums\ServerType;
ServerType::APP; // 'app'
ServerType::WEB; // 'web'
ServerType::LOADBALANCER; // 'loadbalancer'
ServerType::DATABASE; // 'database'
ServerType::CACHE; // 'cache'
ServerType::WORKER; // 'worker'
ServerType::MEILISEARCH; // 'meilisearch'
use ArtisanBuild\ForgeClient\Enums\DatabaseType;
DatabaseType::MYSQL8; // 'mysql8'
DatabaseType::MYSQL; // 'mysql'
DatabaseType::MARIADB; // 'mariadb'
DatabaseType::POSTGRES; // 'postgres'
DatabaseType::NONE; // 'none'
DatabaseType::MYSQL8->label(); // "MySQL 8"
DatabaseType::MYSQL8->description(); // "MySQL 8.0"
DatabaseType::MYSQL8->isMySQL(); // true
DatabaseType::POSTGRES->isPostgreSQL(); // true
use ArtisanBuild\ForgeClient\Enums\PhpVersion;
PhpVersion::PHP74; // 'php74'
PhpVersion::PHP80; // 'php80'
PhpVersion::PHP81; // 'php81'
PhpVersion::PHP82; // 'php82'
PhpVersion::PHP83; // 'php83'
PhpVersion::PHP84; // 'php84'
PhpVersion::PHP85; // 'php85'
PhpVersion::PHP84->label(); // "PHP 8.4"
PhpVersion::PHP84->version(); // "8.4"
PhpVersion::PHP84->isSupported(); // true
PhpVersion::latest(); // PhpVersion::PHP85
PhpVersion::supported(); // Array of supported versions
use ArtisanBuild\ForgeClient\Enums\UbuntuVersion;
UbuntuVersion::UBUNTU_22_04; // '2204'
UbuntuVersion::UBUNTU_24_04; // '2404'
UbuntuVersion::UBUNTU_24_04->label(); // "Ubuntu 24.04"
UbuntuVersion::UBUNTU_24_04->version(); // "24.04"
UbuntuVersion::UBUNTU_24_04->isLTS(); // true
UbuntuVersion::latest(); // UbuntuVersion::UBUNTU_24_04
use ArtisanBuild\ForgeClient\Enums\FirewallRuleType;
FirewallRuleType::ALLOW; // 'allow'
FirewallRuleType::DENY; // 'deny'
use ArtisanBuild\ForgeClient\Enums\CertificateType;
CertificateType::LETSENCRYPT; // 'letsencrypt'
CertificateType::EXISTING; // 'existing'
CertificateType::CLONE; // 'clone'
use ArtisanBuild\ForgeClient\Enums\SiteType;
SiteType::LARAVEL; // 'laravel'
SiteType::SYMFONY; // 'symfony'
SiteType::STATAMIC; // 'statamic'
SiteType::WORDPRESS; // 'wordpress'
SiteType::PHPMYADMIN; // 'phpmyadmin'
SiteType::PHP; // 'php'
SiteType::NEXTJS; // 'next.js'
SiteType::NUXTJS; // 'nuxt.js'
SiteType::STATIC_HTML; // 'static-html'
SiteType::OTHER; // 'other'
SiteType::CUSTOM; // 'custom'
use ArtisanBuild\ForgeClient\Enums\IntegrationType;
IntegrationType::GITHUB; // 'github'
IntegrationType::GITLAB; // 'gitlab'
IntegrationType::BITBUCKET; // 'bitbucket'
use ArtisanBuild\ForgeClient\Enums\JobFrequency;
JobFrequency::MINUTELY; // 'minutely'
JobFrequency::HOURLY; // 'hourly'
JobFrequency::NIGHTLY; // 'nightly'
JobFrequency::WEEKLY; // 'weekly'
JobFrequency::MONTHLY; // 'monthly'
JobFrequency::CUSTOM; // 'custom'
use ArtisanBuild\ForgeClient\Enums\LogType;
LogType::APP; // 'app'
LogType::NGINX; // 'nginx'
LogType::PHP; // 'php'
LogType::MYSQL; // 'mysql'
use ArtisanBuild\ForgeClient\Enums\MonitorType;
MonitorType::CPU; // 'cpu'
MonitorType::MEMORY; // 'memory'
MonitorType::DISK; // 'disk'
MonitorType::CUSTOM; // 'custom'
use ArtisanBuild\ForgeClient\Enums\CloudProvider;
use ArtisanBuild\ForgeClient\Enums\PhpVersion;
use ArtisanBuild\ForgeClient\Enums\DatabaseType;
// In your code
$provider = CloudProvider::OCEAN2;
$phpVersion = PhpVersion::PHP84;
$database = DatabaseType::MYSQL8;
// Validation
if (CloudProvider::isValid('ocean2')) {
// Valid provider
}
// Get all options for dropdowns
$providers = CloudProvider::options();
// Returns: ['ocean2' => 'DigitalOcean', 'akamai' => 'Akamai', ...]
// Get latest/recommended versions
$latestPhp = PhpVersion::latest(); // PHP 8.5
$supportedPhp = PhpVersion::supported(); // All supported versions
use ArtisanBuild\ForgeClient\Exceptions\ForgeException;
try {
$response = $forge->servers()->organizationsServersShow('my-org', 12345);
} catch (ForgeException $e) {
echo "Forge Error: {$e->getMessage()}";
echo "Context: " . json_encode($e->getContext());
}
use ArtisanBuild\ForgeClient\Exceptions\ValidationException;
try {
// Invalid PHP version
$response = $forge->servers()->organizationsServersStore('my-org');
} catch (ValidationException $e) {
echo "Validation Error: {$e->getMessage()}";
echo "Failed Field: {$e->getField()}";
echo "Invalid Value: {$e->getValue()}";
}
use ArtisanBuild\ForgeClient\Exceptions\ApiException;
try {
$response = $forge->servers()->organizationsServersShow('my-org', 99999);
} catch (ApiException $e) {
echo "API Error: {$e->getMessage()}";
echo "Status Code: {$e->getStatusCode()}";
echo "Response: " . json_encode($e->getResponseData());
}
use ArtisanBuild\ForgeClient\Exceptions\AuthenticationException;
try {
$forge->authenticate('invalid-token');
$response = $forge->organizations()->organizationsIndex();
} catch (AuthenticationException $e) {
echo "Authentication Error: {$e->getMessage()}";
echo "Troubleshooting:\n";
echo "1. Check your API token in .env\n";
echo "2. Verify token is active in Forge dashboard\n";
echo "3. Ensure token has
use ArtisanBuild\ForgeClient\Exceptions\RateLimitException;
try {
$response = $forge->servers()->organizationsServersIndex('my-org');
} catch (RateLimitException $e) {
echo "Rate Limit Exceeded: {$e->getMessage()}";
echo "Retry After: {$e->getRetryAfter()} seconds";
// Wait and retry
sleep($e->getRetryAfter());
$response = $forge->servers()->organizationsServersIndex('my-org');
}
use ArtisanBuild\ForgeClient\Exceptions\{
ValidationException,
AuthenticationException,
RateLimitException,
ApiException,
ForgeException
};
try {
$response = $forge->servers()->organizationsServersShow('my-org', $serverId);
$server = $response->json('data');
} catch (ValidationException $e) {
// Handle validation errors (before API call)
Log::error('Invalid parameters', [
'field' => $e->getField(),
'value' => $e->getValue(),
]);
} catch (AuthenticationException $e) {
// Handle authentication failures
Log::error('Authentication failed', ['message' => $e->getMessage()]);
throw $e; // Re-throw for application-level handling
} catch (RateLimitException $e) {
// Handle rate limiting
Log::warning('Rate limit hit', ['retry_after' => $e->getRetryAfter()]);
sleep($e->getRetryAfter());
// Retry logic here
} catch (ApiException $e) {
// Handle API errors (404, 500, etc.)
if ($e->getStatusCode() === 404) {
Log::warning('Server not found', ['server_id' => $serverId]);
} else {
Log::error('API error', [
'status' => $e->getStatusCode(),
'response' => $e->getResponseData(),
]);
}
} catch (ForgeException $e) {
// Catch-all for any other SDK errors
Log::error('Forge Client error', ['message' => $e->getMessage()]);
}
use ArtisanBuild\ForgeClient\Exceptions\RateLimitException;
use ArtisanBuild\ForgeClient\Exceptions\AuthenticationException;
public function register(): void
{
$this->reportable(function (RateLimitException $e) {
// Log rate limit hits for monitoring
Log::warning('Forge rate limit exceeded', [
'retry_after' => $e->getRetryAfter(),
]);
});
$this->reportable(function (AuthenticationException $e) {
// Alert team about auth failures
Log::critical('Forge authentication failed', [
'message' => $e->getMessage(),
]);
});
}
use Illuminate\Support\Facades\Cache;
$key = 'forge-api-requests';
$requests = Cache::increment($key);
if ($requests === 1) {
Cache::put($key, 1, now()->addMinute());
}
if ($requests > 55) {
sleep(60); // Wait for rate limit reset
}
// In a service provider or bootstrap file
use Illuminate\Support\Facades\Log;
if (config('app.debug')) {
// Log all Forge API calls
Event::listen(\Saloon\Events\SendingRequest::class, function ($event) {
Log::debug('Forge API Request', [
'method' => $event->request->getMethod(),
'uri' => $event->request->getUri(),
]);
});
Event::listen(\Saloon\Events\ResponseReceived::class, function ($event) {
Log::debug('Forge API Response', [
'status' => $event->response->status(),
'body' => $event->response->body(),
]);
});
}
bash
php artisan vendor:publish --tag="forge-client-config"
bash
# Correct: deployment → site → server → organization
php artisan forge:get-deployment {deployment} --site={site} --server={server} --organization={org}
# Correct: site → server → organization
php artisan forge:get-site {site} --server={server} --organization={org}
# Correct: database-user → server → organization
php artisan forge:get-database-user {user} --server={server} --organization={org}
# Correct: server → organization
php artisan forge:get-server {server} --organization={org}
bash
php artisan forge:list-organizations
bash
php artisan forge:create-server \
--organization=my-org \
--name=new-server \
--provider=ocean2 \
--credential=123 \
--size=456 \
--region=nyc3 \
--type=app \
--php-version=php84 \
--database=mysql8 \
--ubuntu-version=24.04
bash
# Requires confirmation
php artisan forge:reboot-server 12345 --organization=my-org
# Skip confirmation for automation
php artisan forge:reboot-server 12345 \
--organization=my-org \
--dangerously-skip-confirmation
bash
# Requires confirmation (destructive operation)
php artisan forge:destroy-server 12345 --organization=my-org
# For automation
php artisan forge:destroy-server 12345 \
--organization=my-org \
--dangerously-skip-confirmation
bash
php artisan forge:list-sites \
--organization=my-org \
--server=12345
bash
php artisan forge:get-site 67890 \
--organization=my-org \
--server=12345
bash
php artisan forge:create-site \
--organization=my-org \
--server=12345 \
--domain=example.com \
--project-type=php \
--directory=/public
bash
php artisan forge:update-site 67890 \
--organization=my-org \
--server=12345 \
--directory=/public
bash
# Triggers deployment (ite 67890 \
--organization=my-org \
--server=12345
bash
# Requires confirmation (destructive)
php artisan forge:destroy-site 67890 \
--organization=my-org \
--server=12345
bash
php artisan forge:list-deployments 67890 \
--organization=my-org \
--server=12345
bash
php artisan forge:get-deployment 111213 \
--site=67890 \
--organization=my-org \
--server=12345
bash
# Requires confirmation
php artisan forge:trigger-deployment 67890 \
--organization=my-org \
--server=12345
bash
php artisan forge:update-deployment-script 67890 \
--organization=my-org \
--server=12345 \
--script="cd /home/forge/site && git pull && php artisan migrate --force"
bash
php artisan forge:list-databases \
--organization=my-org \
--server=12345
bash
php artisan forge:get-database 44556 \
--organization=my-org \
--server=12345
bash
php artisan forge:create-database \
--organization=my-org \
--server=12345 \
--name=my_database
bash
# Requires confirmation (destructive)
php artisan forge:destroy-database 44556 \
--organization=my-org \
--server=12345
bash
php artisan forge:list-database-users \
--organization=my-org \
--server=12345
bash
php artisan forge:create-database-user \
--organization=my-org \
--server=12345 \
--name=app_user \
--password=secure_password \
--databases=my_database
bash
php artisan forge:update-database-user 77889 \
--organization=my-org \
--server=12345 \
--databases=my_database,another_database
bash
# Requires confirmation (destructive)
php artisan forge:destroy-database-user 77889 \
--organization=my-org \
--server=12345
bash
php artisan forge:list-background-processes \
--organization=my-org \
--server=12345
bash
php artisan forge:create-background-process \
--organization=my-org \
--server=12345 \
--command="php artisan horizon" \
--user=forge \
--directory=/home/forge/app
bash
php artisan forge:update-background-process 99887 \
--organization=my-org \
--server=12345 \
--command="php artisan horizon"
bash
php artisan forge:restart-background-process 99887 \
--organization=my-org \
--server=12345
bash
php artisan forge:list-firewall-rules \
--organization=my-org \
--server=12345
bash
php artisan forge:get-firewall-rule 55443 \
--organization=my-org \
--server=12345
bash
php artisan forge:create-firewall-rule \
--organization=my-org \
--server=12345 \
--name="Allow Redis" \
--port=6379 \
--type=allow \
--ip-address=192.168.1.100
bash
# Requires confirmation
php artisan forge:destroy-firewall-rule 55443 \
--organization=my-org \
--server=12345
bash
php artisan forge:get-ssl-certificate 22334 \
--site=67890 \
--organization=my-org \
--server=12345
bash
php artisan forge:activate-ssl-certificate 22334 \
--site=67890 \
--organization=my-org \
--server=12345
bash
php artisan forge:list-organizations
bash
php artisan forge:get-organization {organization}
bash
php artisan forge:list-server-credentials {organization?}
bash
php artisan forge:list-providers
bash
php artisan forge:list-providers
bash
php artisan forge:list-provider-regions {provider}
bash
php artisan forge:list-provider-sizes {provider}
bash
php artisan forge:list-servers
bash
php artisan forge:get-server {server}
bash
php artisan forge:create-server
bash
php artisan forge:reboot-server {server}
bash
# With confirmation
php artisan forge:reboot-server production-server
# Skip confirmation
php artisan forge:reboot-server production-server --dangerously-skip-confirmation
bash
php artisan forge:destroy-server {server}
bash
php artisan forge:destroy-server old-server --dangerously-skip-confirmation
bash
php artisan forge:list-sites
bash
php artisan forge:get-site {site}
bash
php artisan forge:create-site
bash
php artisan forge:create-site \
--organization=my-org \
--server=production-server \
--domain=example.com \
--project-type=php \
--directory=/public
bash
php artisan forge:update-site {site}
bash
php artisan forge:deploy-site {site}
bash
php artisan forge:deploy-site example.com --dangerously-skip-confirmation
bash
php artisan forge:enable-quick-deploy {site}
bash
php artisan forge:disable-quick-deploy {site}
bash
php artisan forge:destroy-site {site}
bash
php artisan forge:list-deployments {site}
bash
php artisan forge:get-deployment {deployment}
bash
php artisan forge:trigger-deployment {site}
bash
php artisan forge:update-deployment-script {site}
bash
php artisan forge:update-deployment-script example.com \
--script="cd /home/forge/example.com && git pull origin main && composer install --no-dev && php artisan migrate --force"
bash
php artisan forge:list-databases
bash
php artisan forge:get-database {database}
bash
php artisan forge:create-database
bash
php artisan forge:create-database \
--organization=my-org \
--server=production-server \
--name=my_application_db
bash
php artisan forge:destroy-database {database}
bash
php artisan forge:list-database-users
bash
php artisan forge:get-database-user {user}
bash
php artisan forge:create-database-user
bash
php artisan forge:update-database-user {user}
bash
php artisan forge:destroy-database-user {user}
bash
php artisan forge:list-background-processes
bash
php artisan forge:get-background-process {process}
bash
php artisan forge:create-background-process
bash
php artisan forge:create-background-process \
--organization=my-org \
--server=production-server \
--command="php artisan horizon" \
--user=forge \
--directory=/home/forge/example.com