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