我是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);
}
答案 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”进行更深入的潜水。