Laravel DigitalOcean API - 获取新创建的Droplet登录信息

时间:2018-04-03 13:52:14

标签: php laravel api laravel-5 digital-ocean

我是DigitalOcean API的新手,我正在努力完成任务。当用户完成步骤程序时,将在代码中创建新的Droplet。现在我需要这个新创建的Droplet的登录凭据。这些将通过电子邮件自动发送。我需要这些,所以我可以连接创建的Droplet并在其上执行命令。我怎样才能实现上述目标?我试过$droplet->user_data(),但不幸的是,这不起作用。

代码

public function store(Request $request, $id)
{

    $order = Order::find($id);

    $payment = Mollie::api()->payments()->get($order->mollie_transaction_id);

    $mainsettings = Session::get('main_settings');

    $webshop = $this->_webshopRepository->createWebshop();

    $addressData = [$mainsettings['region'], $mainsettings['city'], $mainsettings['postal_code'], $mainsettings['street_name'], $mainsettings['house_number']];
    $adres = $this->_addressRepository->createAddress($addressData);

    $mainsettingData = [$adres->id, $webshop->id, $mainsettings['store_name'], $mainsettings['store_tel'], $mainsettings['store_hoo'], $mainsettings['vat_number']];
    $mainsetting = $this->_mainsettingRepository->createMainSetting($mainsettingData);

    $images = DigitalOcean::image()->getAll(['private' => true]);
    $storeName = str_replace(' ', '-', $mainsetting['store_name']);

    // Here is where I am creating the droplet

    $droplet = DigitalOcean::droplet()->create($storeName, 'ams3', 's-1vcpu-1gb', $images[0]->id);

    $droplet->user_data();

    $commands = ["cd /home/", "rmdir test"];
    \SSH::run($commands, function($line){
        \Log::debug($line);
    });

    session()->forget('main_settings');
    session()->forget('chosen_theme');
    session()->forget('chosen_plugins');

    return $this->show($order, $payment);

}

1 个答案:

答案 0 :(得分:2)

这里有两种选择。第一个也是最安全的是在创建Droplet时为其添加SSH密钥。您需要在本地生成一个并将其上传到DigitalOcean。这可以通过API或直接在控制面板中即时完成。然后,在创建Droplet时,将密钥的ID作为$userData属性传递。这里需要注意的一点是,它采用一个数组并且可以包含多个密钥ID(参见the PHP library's docs)。

如果出于某种原因无法使用SSH密钥,您可以在首次启动时创建新用户,并通过将云配置脚本作为#cloud-config users: - name: demo groups: sudo shell: /bin/bash sudo: ['ALL=(ALL) NOPASSWD:ALL'] passwd: $6$j212wezy$7H/1LT4f9/N3wpgNunhsIqtMj62OKiS3nyNwuizouQc3u7MbYCarYeAHWYPYb2FT.lbioDm2RrkJPb9BZMN1O 属性传递来设置其密码。一个基本的例子,只是创建一个新用户并设置一个密码,如下所示:

passwd

注意:mkpasswd --method=SHA-512 --rounds=4096 不是密码本身,而是使用以下代码生成哈希:

{{1}}

查看“An Introduction to Cloud-Config Scripting”进行更深入的潜水。