Laravel.io
<?php

namespace App\Jobs;

use Log;
use App\Jobs\Job;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\DispatchesJobs;
use App\Provider;
use Mpociot\Blacksmith\Blacksmith;

class AddWeb2Server extends Job implements ShouldQueue
{
    use InteractsWithQueue, SerializesModels, DispatchesJobs;

    protected $provider;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(Provider $provider)
    {
        $this->provider = $provider;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Log::info('Job AddWeb2Server startet');

        $provider = $this->provider;

        if ($this->attempts() <= 1 && $provider->status == 2)
        {
            $sitename = parse_url($provider->domain, PHP_URL_HOST);

            $blacksmith = new Blacksmith(env('FORGE_EMAIL'), env('FORGE_PASSWORD'));

            $server = $blacksmith->getActiveServers()->first();

            $addSite = $server->addSite($sitename, $project_type = 'php', $directory = '/public', $wildcards = false);

            $provider->server_site_id = $addSite->id;
            $provider->status = 3;
            $provider->save();

            Log::info('Job AddWeb2Server done');

            #session(['provider_status' => $provider->status]);

            // wait 30 seconds for execution of next job
            $job = (new AddApp2Server($provider))->delay(30);
            $this->dispatch($job);

            Log::info('Job AddApp2Server dispatched');
        }
    }

        /**
        * Handle a job failure.
        *
        * @return void
        */
        public function failed()
        {
            Log::error('Job AddWeb2Server failed!');
        }

}

Please note that all pasted data is publicly available.