Files
michaelschiemer/src/Domain/Vault/Migrations/CreateVaultTables.php
Michael Schiemer fc3d7e6357 feat(Production): Complete production deployment infrastructure
- Add comprehensive health check system with multiple endpoints
- Add Prometheus metrics endpoint
- Add production logging configurations (5 strategies)
- Add complete deployment documentation suite:
  * QUICKSTART.md - 30-minute deployment guide
  * DEPLOYMENT_CHECKLIST.md - Printable verification checklist
  * DEPLOYMENT_WORKFLOW.md - Complete deployment lifecycle
  * PRODUCTION_DEPLOYMENT.md - Comprehensive technical reference
  * production-logging.md - Logging configuration guide
  * ANSIBLE_DEPLOYMENT.md - Infrastructure as Code automation
  * README.md - Navigation hub
  * DEPLOYMENT_SUMMARY.md - Executive summary
- Add deployment scripts and automation
- Add DEPLOYMENT_PLAN.md - Concrete plan for immediate deployment
- Update README with production-ready features

All production infrastructure is now complete and ready for deployment.
2025-10-25 19:18:37 +02:00

109 lines
3.7 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Domain\Vault\Migrations;
use App\Framework\Database\ConnectionInterface;
use App\Framework\Database\Migration\Migration;
use App\Framework\Database\Migration\MigrationVersion;
use App\Framework\Database\Schema\Blueprint;
use App\Framework\Database\Schema\Schema;
/**
* Create Vault tables for secure secrets storage
*/
final class CreateVaultTables implements Migration
{
public function up(ConnectionInterface $connection): void
{
$schema = new Schema($connection);
// Main Vault Secrets Table
$schema->createIfNotExists('vault_secrets', function (Blueprint $table) {
$table->string('id', 36)->primary();
$table->string('secret_key', 255)->unique();
$table->text('encrypted_value');
$table->string('encryption_nonce', 255);
$table->integer('encryption_version')->default(1);
$table->timestamp('created_at')->useCurrent();
$table->timestamp('updated_at')->nullable();
$table->string('created_by', 255)->nullable();
$table->string('updated_by', 255)->nullable();
$table->integer('access_count')->default(0);
$table->timestamp('last_accessed_at')->nullable();
$table->index('secret_key');
$table->index('updated_at');
// Table options
$table->engine('InnoDB');
$table->charset('utf8mb4');
$table->collation('utf8mb4_unicode_ci');
});
// Vault Audit Log
$schema->createIfNotExists('vault_audit_log', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('secret_key', 255);
$table->enum('action', ['read', 'write', 'delete', 'rotate', 'export']);
$table->string('user_id', 255)->nullable();
$table->string('ip_address', 45)->nullable();
$table->text('user_agent')->nullable();
$table->boolean('success')->default(true);
$table->text('error_message')->nullable();
$table->timestamp('timestamp')->useCurrent();
$table->index('secret_key');
$table->index('action');
$table->index('timestamp');
$table->index('user_id');
// Table options
$table->engine('InnoDB');
$table->charset('utf8mb4');
$table->collation('utf8mb4_unicode_ci');
});
// Encryption Key Versions
$schema->createIfNotExists('vault_encryption_keys', function (Blueprint $table) {
$table->increments('id');
$table->integer('version')->unique();
$table->string('key_hash', 255);
$table->string('algorithm', 50)->default('libsodium');
$table->timestamp('created_at')->useCurrent();
$table->timestamp('rotated_at')->nullable();
$table->boolean('is_active')->default(true);
$table->index('version');
$table->index('is_active');
// Table options
$table->engine('InnoDB');
$table->charset('utf8mb4');
$table->collation('utf8mb4_unicode_ci');
});
$schema->execute();
}
public function down(ConnectionInterface $connection): void
{
$schema = new Schema($connection);
$schema->dropIfExists('vault_encryption_keys');
$schema->dropIfExists('vault_audit_log');
$schema->dropIfExists('vault_secrets');
$schema->execute();
}
public function getVersion(): MigrationVersion
{
return MigrationVersion::fromTimestamp("2025_10_05_090000");
}
public function getDescription(): string
{
return "Create Vault tables for secure secrets storage";
}
}