Berikut adalah script PHP untuk sinkronisasi file dari folder /var/www/html/ ke bucket MinIO apik-prod. Script ini disesuaikan dengan kebutuhan Anda.


Script PHP

<?php
require 'vendor/autoload.php'; // Pastikan AWS SDK sudah diinstal via Composer

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

// Konfigurasi MinIO
$accessKey = 'kode_accessKey';
$secretKey = 'kdoe_secretKey';
$bucketName = 'nama_bucketName';
$minioEndpoint = 'https://namadomain.go.id';
$region = 'us-east-1';

// Folder lokal yang akan disinkronisasi
$sourceFolder = '/var/www/html/';

// File log untuk mencatat proses sinkronisasi
$logFile = '/var/log/sync_apik_minio.log';

// Buat instance S3 client
$s3 = new S3Client([
    'version' => 'latest',
    'region' => $region,
    'endpoint' => $minioEndpoint,
    'use_path_style_endpoint' => true,
    'credentials' => [
        'key' => $accessKey,
        'secret' => $secretKey,
    ],
]);

// Fungsi untuk menulis log
function writeLog($message)
{
    global $logFile;
    $timestamp = date('Y-m-d H:i:s');
    file_put_contents($logFile, "[$timestamp] $message\n", FILE_APPEND);
}

// Fungsi untuk mengupload file ke MinIO
function uploadFileToMinio($s3, $bucketName, $filePath, $key)
{
    try {
        $s3->putObject([
            'Bucket' => $bucketName,
            'Key' => $key,
            'SourceFile' => $filePath,
        ]);
        writeLog("File berhasil diupload: {$key}");
    } catch (S3Exception $e) {
        writeLog("Gagal upload file {$key}: " . $e->getMessage());
    }
}

// Sinkronisasi folder
function syncFolder($s3, $bucketName, $sourceFolder)
{
    $directory = new RecursiveDirectoryIterator($sourceFolder);
    $iterator = new RecursiveIteratorIterator($directory);

    foreach ($iterator as $fileInfo) {
        if ($fileInfo->isFile()) {
            $filePath = $fileInfo->getPathname();
            $key = str_replace($sourceFolder, '', $filePath); // Path relatif di bucket
            uploadFileToMinio($s3, $bucketName, $filePath, ltrim($key, '/'));
        }
    }
}

// Periksa apakah folder sumber ada
if (!is_dir($sourceFolder)) {
    writeLog("Folder sumber $sourceFolder tidak ditemukan.");
    die("Folder sumber $sourceFolder tidak ditemukan.\n");
}

// Jalankan sinkronisasi
writeLog("Memulai sinkronisasi folder $sourceFolder ke bucket $bucketName...");
syncFolder($s3, $bucketName, $sourceFolder);
writeLog("Sinkronisasi selesai.");


Langkah-Langkah

Instal AWS SDK: Pastikan Anda telah menginstal AWS SDK menggunakan Composer:
composer require aws/aws-sdk-php

Simpan Script: Simpan script ini di file, misalnya sync_apik.php.
Buat Folder Log: Pastikan folder log /var/log/ dapat diakses dan memiliki izin tulis untuk mencatat proses:
sudo chmod 666 /var/log/sync_apik_minio.log

Jalankan Script: Jalankan script menggunakan perintah nohup agar berjalan di latar belakang:
nohup php sync_apik.php > /dev/null 2>&1 &

Pantau Log: Untuk memantau hasil sinkronisasi, periksa file log:
tail -f /var/log/sync_apik_minio.log

Hentikan Script: Jika perlu menghentikan script, cari proses PHP yang berjalan:
ps aux | grep sync_apik.php

Hentikan proses dengan PID yang ditemukan:
kill <PID>


Penjelasan

  • Folder Sinkronisasi: Folder /var/www/html/ akan disinkronkan dengan struktur yang sama di bucket apik-prod.
  • Log File: Semua aktivitas akan dicatat di /var/log/sync_apik_minio.log.
  • Background Process: Script berjalan di latar belakang menggunakan nohup.