Add PowerDNS config and DKIM/NS check tables required for zone provisioning.
Deploy Ladill Hosting / deploy (push) Successful in 49s

Hosting had PDNS env vars but no config/pdns.php and was missing domain_dkim_keys, so linked domains never got authoritative zones.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-07-13 17:05:28 +00:00
co-authored by Cursor
parent 40d3dc0fbe
commit bc199ccb43
2 changed files with 69 additions and 0 deletions
+13
View File
@@ -0,0 +1,13 @@
<?php
return [
'api_url' => env('PDNS_API_URL', 'http://127.0.0.1:8081'),
'api_key' => env('PDNS_API_KEY', ''),
'server' => env('PDNS_SERVER', 'localhost'),
'timeout' => (int) env('PDNS_TIMEOUT', 5),
'slave_masters' => array_filter(array_map('trim', explode(',', env('PDNS_SLAVE_MASTERS', '167.86.66.168')))),
'slave_api_url' => env('PDNS_SLAVE_API_URL', ''),
'slave_api_key' => env('PDNS_SLAVE_API_KEY', ''),
'slave_server' => env('PDNS_SLAVE_SERVER', 'localhost'),
];
@@ -0,0 +1,56 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
if (! Schema::hasTable('domain_dkim_keys')) {
Schema::create('domain_dkim_keys', function (Blueprint $table) {
$table->id();
$table->foreignId('domain_id')->constrained('domains')->cascadeOnDelete();
$table->string('selector');
$table->longText('public_key_txt');
$table->string('private_key_path')->nullable();
$table->string('status')->default('active');
$table->timestamp('generated_at')->nullable();
$table->timestamps();
$table->unique(['domain_id', 'selector']);
});
}
if (! Schema::hasTable('domain_ns_checks')) {
Schema::create('domain_ns_checks', function (Blueprint $table) {
$table->id();
$table->foreignId('domain_id')->constrained('domains')->cascadeOnDelete();
$table->string('check_type')->default('onboarding');
$table->string('result')->default('pending');
$table->json('expected_nameservers')->nullable();
$table->json('observed_nameservers')->nullable();
$table->boolean('has_authoritative_answer')->nullable();
$table->unsignedSmallInteger('manual_records_total')->default(0);
$table->unsignedSmallInteger('manual_records_verified')->default(0);
$table->string('status_before')->nullable();
$table->string('status_after')->nullable();
$table->string('state_before')->nullable();
$table->string('state_after')->nullable();
$table->text('notes')->nullable();
$table->timestamp('checked_at')->nullable();
$table->timestamps();
$table->index(['domain_id', 'checked_at']);
$table->index(['domain_id', 'result']);
});
}
}
public function down(): void
{
Schema::dropIfExists('domain_ns_checks');
Schema::dropIfExists('domain_dkim_keys');
}
};