DEV Community

Beaver Bridge
Beaver Bridge

Posted on

docker에서 supabase self-hosting으로 사용 중 폴더 위치 변경 시 파일 다시 업로드하기

참고 https://supabase.com/docs/guides/platform/migrating-and-upgrading-projects#migrate-storage-objects

// storage_restore.js

const { createClient } = require("@supabase/supabase-js");
const fs = require("fs");

const PROJECT_URL = "http://localhost:8100";
const PROJECT_SERVICE_KEY = "service_role_key";

(async () => {
  console.log("started at: ", new Date().toISOString());
  const supabaseRestClient = createClient(PROJECT_URL, PROJECT_SERVICE_KEY, {
    db: { schema: "storage" },
  });
  const supabaseClient = createClient(PROJECT_URL, PROJECT_SERVICE_KEY);

  // make sure you update max_rows in postgrest settings if you have a lot of objects or paginate here
  const { data: objects, error } = await supabaseRestClient
    .from("objects")
    .select();
//    .eq("bucket_id", "manuals");

  if (error) {
    console.log("error getting objects from old bucket");
    throw error;
  }

  for (const objectData of objects) {
    console.log(`moving ${objectData.id}`);
    try {
      const data = fs.readFileSync(
        `./storage/stub/stub/${objectData.bucket_id}/${objectData.name}/${objectData.version}`
      );

      const { _, error: uploadObjectError } = await supabaseClient.storage
        .from(objectData.bucket_id)
        .upload(objectData.name, data, {
          upsert: true,
          contentType: objectData.metadata.mimetype,
          cacheControl: objectData.metadata.cacheControl,
        });
      if (uploadObjectError) {
        throw uploadObjectError;
      }
    } catch (err) {
      console.log("error moving ", objectData);
      console.log(err);
    }
  }
  console.log("finished at: ", new Date().toISOString());
})();
Enter fullscreen mode Exit fullscreen mode

이 파일을 supabase studio 컨테이너로 이동시킨다.

docker cp storage_restore.js container_id:/app/
Enter fullscreen mode Exit fullscreen mode

기존 폴더에서 supabase studio 컨테이너로 파일을 이동시킨다.

docker cp storage container_id:/app/
Enter fullscreen mode Exit fullscreen mode

컨테이너 안으로 진입해서 스크립트를 실행한다

docker exec -it container_id bash
cd app
node store_restore.js
Enter fullscreen mode Exit fullscreen mode

Image of Datadog

Create and maintain end-to-end frontend tests

Learn best practices on creating frontend tests, testing on-premise apps, integrating tests into your CI/CD pipeline, and using Datadog’s testing tunnel.

Download The Guide

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay