diff --git a/.dockerignore b/.dockerignore index 818f911..528dda2 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,6 @@ +Dockerfile +.dockerignore +.git minio node_modules sqlite.db diff --git a/Dockerfile b/Dockerfile index dabdafa..4ececfe 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,9 +11,15 @@ FROM base AS build RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile RUN pnpm run build -FROM base AS app +FROM node:20-slim AS app +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +RUN corepack enable +WORKDIR /app COPY --from=prod-deps /app/node_modules /app/node_modules COPY --from=build /app/dist /app/dist +COPY --from=base /app/package.json /app/package.json +COPY --from=base /app/drizzle /app/drizzle EXPOSE 3000 EXPOSE 3001 CMD [ "pnpm", "start" ] diff --git a/addMetadata.ts b/addMetadata.ts index 97d84e6..7f83567 100644 --- a/addMetadata.ts +++ b/addMetadata.ts @@ -2,11 +2,10 @@ import { db } from "./src/db"; import { group, opinion, zone, province } from "./src/schema"; import { Groups, Opinions, Provinces, Districts } from "./initialData"; import { createBucket, createClient } from "./src/minio"; +import { Config } from "./src/config"; async function main() { - let mc = createClient(); - await createBucket(mc); - + await setupBucket(); const isInitialized = await db.query.group .findMany() .then((groups) => groups.length > 0); @@ -35,4 +34,22 @@ async function main() { console.log("Done"); } +async function setupBucket() { + const BucketPolicy = { + Version: "2012-10-17", + Statement: [ + { + Action: ["s3:GetObject"], + Effect: "Allow", + Principal: "*", + Resource: [`arn:aws:s3:::${Config.bucketName}/*`], + Sid: "AllowAnonymousAccess", + }, + ], + }; + let mc = createClient(); + await createBucket(mc); + await mc.setBucketPolicy(Config.bucketName, JSON.stringify(BucketPolicy)); +} + main(); diff --git a/src/config.ts b/src/config.ts index b57aaa3..58d0115 100644 --- a/src/config.ts +++ b/src/config.ts @@ -5,6 +5,8 @@ export const Config = { token_duration: process.env.TOKEN_DURATION || "365d", api_url: process.env.API_URL || "http://localhost:3000", bucketName: process.env.BUCKET_NAME || "sorvor", + minioPublicBucketEndpoint: + process.env.MINIO_PUBLIC_BUCKET_ENDPOINT || "http://localhost:9000/sorvor", minioEndpoint: process.env.MINIO_ENDPOINT || "localhost", minioSSL: (process.env.MINIO_SSL && process.env.MINIO_SSL == "true") || false, minioPort: parseInt(process.env.MINIO_PORT || "9000"), diff --git a/src/trpc.ts b/src/trpc.ts index cc4ed27..2c0c428 100644 --- a/src/trpc.ts +++ b/src/trpc.ts @@ -40,7 +40,6 @@ export const createContext = async (opts: CreateHTTPContextOptions) => { const authorizationHeader = opts.req.headers.authorization || ""; const bearerToken = authorizationHeader.split(" ")[1]; - console.log(authorizationHeader, bearerToken); const phone = await verifyToken(bearerToken); if (phone !== null) { let user = await db.query.user.findFirst({ diff --git a/src/userRoute.ts b/src/userRoute.ts index 459a729..0d717b9 100644 --- a/src/userRoute.ts +++ b/src/userRoute.ts @@ -265,7 +265,9 @@ async function requestChangeImage( target: [imageToUser.userId], set: { imageName: objectName }, }); - return await createUploadImageUrl(mc, objectName, contentType); + let request = await createUploadImageUrl(mc, objectName, contentType); + request.postURL = Config.minioPublicBucketEndpoint; + return request; } async function confirmChangeImage(userId: number, oldImage: string | null) {