DD / Dockerfile
sanch1tx's picture
Update Dockerfile
a235ac7 verified
# Use Node 20 Alpine
FROM node:20-alpine
# Install Git (Required for cloning and pulling)
RUN apk add --no-cache libc6-compat git
WORKDIR /app
# 1. Clone the repository
RUN git clone https://github.com/Anshu78780/ScarperApi.git .
# 2. Create the "Hacks" Script using Base64 to prevent syntax errors
# This script applies all the "Unlimited" & "No-DB" logic
# I have re-encoded the file contents carefully to avoid syntax errors.
RUN echo "Y29uc3QgZnMgPSByZXF1aXJlKCdmcycpOwpjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpOwoKY29uc29sZS5sb2coJ0FwcGx5aW5nIFVubGltaXRlZCBBY2Nlc3MgJiBOby1EQiBIYWNrcy4uLicpOwoKLy8gMS4gQnlwYXNzIEFQSSBLZXlzIChsaWIvYXBpLWF1dGgudHMpCmZzLndyaXRlRmlsZVN5bmMoJ2xpYi9hcGktYXV0aC50cycsIGBpbXBvcnQgeyBOZXh0UmVxdWVzdCwgTmV4dFJlc3BvbnNlIH0gZnJvbSAnbmV4dC9zZXJ2ZXInOwpleHBvcnQgYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVBcGlLZXkocmVxdWVzdDogTmV4dFJlcXVlc3QpIHsKICByZXR1cm4geyB2YWxpZDogdHJ1ZSwga2V5RGF0YTogeyBpZDogJ2J5cGFzcycsIHVzZXJJZDogJ2FkbWluJywga2V5OiAnYnlwYXNzJywgaXNBY3RpdmU6IHRydWUsIHJlcXVlc3RDb3VudDogMCwgcmVxdWVzdFF1b3RhOiBJbmZpbml0eSB9IH07Cn0KZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVuYXV0aG9yaXplZFJlc3BvbnNlKCkge3wKICByZXR1cm4gTmV4dFJlc3BvbnNlLmpzb24oeyBzdWNjZXNzOiB0cnVlLCBtZXNzYWdlOiAnVW5saW1pdGVkIGFjY2VzcyBhY3RpdmUnIH0sIHsgc3RhdHVzOiAyMDAgfSk7Cn0KZXhwb3J0IGNvbnN0IHZlcmlmeVJlcXVlc3QgPSB2YWxpZGF0ZUFwaUtleTsKZXhwb3J0IGNvbnN0IGF1dGhlbnRpY2F0ZUFwaSA9IHZhbGlkYXRlQXBpS2V5O2ApOwoKLy8gMi4gRGlzYWJsZSBEYXRhYmFzZSAobGliL2RiL2luZGV4LnRzKQpmcy53cml0ZUZpbGVTeW5jKCdsaWIvZGIvaW5kZXgudHMnLCBgZXhwb3J0IGNvbnN0IGRiID0gbmV3IFByb3h5KHt9LCB7IGdldDogKCkgPT4gKCkgPT4gW10gfSkgO2ApOwoKLy8gMy4gRGlzYWJsZSBBdXRoIChsaWIvYXV0aC50cykKZnMud3JpdGVGaWxlU3luYygnbGliL2F1dGgudHMnLCBgZXhwb3J0IGNvbnN0IGF1dGggPSB7IGFwaTogeyBnZXRTZXNzaW9uOiBhc3luYyAoKSA9PiBudWxsIH0sIGdldFNlc3Npb246IGFzeW5jICgpID0+IG51bGwgfTtgKTsKCi8vIDQuIERpc2FibGUgRW1haWwgKGxpYi9lbWFpbC1zZXJ2aWNlLnRzKQpmcy53cml0ZUZpbGVTeW5jKCdsaWIvZW1haWwtc2VydmljZS50cycsIGBleHBvcnQgY29uc3Qgc2VuZFF1b3RhV2FybmluZ0VtYWlsID0gYXN5bmMgKCkgPT4ge307CmV4cG9ydCBjb25zdCBzaG91bGRTZW5kUXVvdGFXYXJuaW5nID0gKCkgPT4gZmFsc2U7CmV4cG9ydCBjb25zdCBjYWxjdWxhdGVVc2FnZVBlcmNlbnRhZ2UgPSAoKSA9PiAwOwpleHBvcnQgY29uc3Qgc2VuZExvZ2luTm90aWZpY2F0aW9uID0gYXN5bmMgKCkgPT4ge307YCk7CgovLyA1LiBEaXNhYmxlIFJlZGlzICYgRXhwb3J0IFR5cGVzIChsaWIvcHJvdmlkZXItY2FjaGUudHMpCmNvbnN0IEFMTF9QUk9WSURFUlMgPSBbJzRrSERIdWInLCAnSERIdWI0dScsICdNb3ZpZXM0dScsICdEcml2ZScsICdWZWdhJywgJ1plZUZsaXonLCAnWmlua01vdmllcycsICdEZXNpcmVNb3ZpZXMnLCAnTmV0TWlycm9yJywgJ0FuaW1lU2FsdCcsICdLTU1vdmllcycsICdVaGRNb3ZpZXMnLCAnTW92aWVzbW9kJywgJ0FkdWx0J107CmZzLndyaXRlRmlsZVN5bmMoJ2xpYi9wcm92aWRlci1jYWNoZS50cycsIGBleHBvcnQgY29uc3QgQUxMX1BST1ZJREVSUyA9ICR7SlNPTi5zdHJpbmdpZnkoQUxMX1BST1ZJREVSUyl9IDsKZXhwb3J0IGNvbnN0IGNhY2hlID0geyBnZXQ6IGFzeW5jICgpID0+IG51bGwsIHNldDogYXN5bmMgKCkgPT4gbnVsbCwgZGVsZXRlOiBhc3luYyAoKSA9PiBudWxsIH07CmV4cG9ydCBjb25zdCBnZXRDYWNoZWREYXRhID0gYXN5bmMgKCkgPT4gbnVsbDsKZXhwb3J0IGNvbnN0IHNldENhY2hlZERhdGEgPSBhc3luYyAoKSA9PiBudWxsOwpleHBvcnQgY29uc3QgdXBkYXRlVXNlclByb3ZpZGVycyA9IGFzeW5jICgpID0+IHt9OwpleHBvcnQgY29uc3QgaW52YWxpZGF0ZVVzZXJQcm92aWRlckNhY2hlID0gYXN5bmMgKCkgPT4ge307CmV4cG9ydCBjb25zdCBnZXREZWZhdWx0UHJvdmlkZXJzID0gYXN5bmMgKCkgPT4gQUxMX1BST1ZJREVSUy5maWx0ZXIocCA9PiBwICE9PSAnQWR1bHQnKTsKZXhwb3J0IGNvbnN0IGlzUHJvdmlkZXJFbmFibGVkID0gYXN5bmMgKCkgPT4gdHJ1ZTsKZXhwb3J0IGNvbnN0IGdldFVzZXJFbmFibGVkUHJvdmlkZXJzID0gYXN5bmMgKCkgPT4gZ2V0RGVmYXVsdFByb3ZpZGVycygpO2ApOwoKLy8gNi4gQ29uZmlnIE9wdGltaXphdGlvbiAobmV4dC5jb25maWcudHMpCmZzLndyaXRlRmlsZVN5bmMoJ25leHQuY29uZmlnLnRzJywgYGltcG9ydCB0eXBlIHsgTmV4dENvbmZpZyB9IGZyb20gJ25leHQnOwpjb25zdCBuZXh0Q29uZmlnOiBOZXh0Q29uZmlnID0gewogIHJlYWN0U3RyaWN0TW9kZTogZmFsc2UsCiAgdHlwZXNjcmlwdDoge2lnbm9yZUJ1aWxkRXJyb3JzOiB0cnVlfSwKICBlc2xpbnQ6IHtpZ25vcmVEdXJpbmdCdWlsZHM6IHRydWV9LAogIGltYWdlczogeyByZW1vdGVQYXR0ZXJuczogW3sgcHJvdG9jb2w6ICdodHRwcycsIGhvc3RuYW1lOiAnKionIH1dIH0sCn07CmV4cG9ydCBkZWZhdWx0IG5leHRDb25maWc7YCk7" | base64 -d > scripts-apply-hacks.js
# 3. Apply hacks immediately for the first build
RUN node scripts-apply-hacks.js
# 4. Create the /sync Route (Base64 Encoded to prevent syntax errors)
RUN mkdir -p app/api/sync
RUN echo "aW1wb3J0IHsgTmV4dFJlc3BvbnNlIH0gZnJvbSAnbmV4dC9zZXJ2ZXInOwppbXBvcnQgeyBleGVjIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7CmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnOwpjb25zdCBleGVjQXN5bmMgPSBwcm9taXNpZnkoZXhlYyk7CgpleHBvcnQgY29uc3QgZHluYW1pYyA9ICdmb3JjZS1keW5hbWljJzsKCmV4cG9ydCBhc3luYyBmdW5jdGlvbiBHRVQoKSB7CiAgdHJ5IHsKICAgIGNvbnNvbGUubG9nKCdTeW5jaW5nLi4uJyk7CiAgICAvLyBSZXNldCB0byBkaXNjYXJkIGxvY2FsIGhhY2tzIChzbyBwdWxsIHdvcmtzKSwgdGhlbiBwdWxsCiAgICBhd2FpdCBleGVjQXN5bmMoJ2dpdCByZXNldCAtLWhhcmQgSEVBRCAmJiBnaXQgcHVsbCcpOwogICAgCiAgICAvLyBSZS1hcHBseSBoYWNrcyB1c2luZyB0aGUgc2NyaXB0IHdlIGNyZWF0ZWQKICAgIGF3YWl0IGV4ZWNBc3luYygnbm9kZSBzY3JpcHRzLWFwcGx5LWhhY2tzLmpzJyk7CiAgICAKICAgIC8vIFJlYnVpbGQgdGhlIGFwcAogICAgY29uc29sZS5sb2coJ0J1aWxkaW5nLi4uJyk7CiAgICAvLyBXZSBydW4gYnVpbGQgaW4gYmFja2dyb3VuZCBvciB3YWl0PyBXYWl0aW5nIG1pZ2h0IHRpbWVvdXQgSFRUUC4KICAgIC8vIEJ1dCB3ZSBuZWVkIGl0IGRvbmUgYmVmb3JlIHJlc3RhcnQuCiAgICBhd2FpdCBleGVjQXN5bmMoJ25wbSBydW4gYnVpbGQnKTsKICAgIAogICAgLy8gVHJpZ2dlciByZXN0YXJ0IChEb2NrZXIgd2lsbCByZXN0YXJ0IHRoZSBjb250YWluZXIpCiAgICBzZXRUaW1lb3V0KCgpID0+IHByb2Nlc3MuZXhpdCgxKSwgMTAwMCk7CiAgICAKICAgIHJldHVybiBOZXh0UmVzcG9uc2UuanNvbih7IHN1Y2Nlc3M6IHRydWUsIG1lc3NhZ2U6ICdVcGRhdGVkICYgUmVidWlsdC4gUmVzdGFydGluZy4uLicgfSk7CiAgfSBjYXRjaCAoZTogYW55KSB7CiAgICByZXR1cm4gTmV4dFJlc3BvbnNlLmpzb24oeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IGUubWVzc2FnZSB9LCB7IHN0YXR1czogNTAwIH0pOwogIH0KfQ==" | base64 -d > app/api/sync/route.ts
# 5. Install Dependencies
RUN npm ci --legacy-peer-deps || npm install --legacy-peer-deps
# 6. Initial Build
ENV NEXT_TELEMETRY_DISABLED=1
ENV DATABASE_URL="postgresql://mock:mock@localhost:5432/mock"
ENV BETTER_AUTH_SECRET="mock_secret"
ENV BETTER_AUTH_URL="http://localhost:3000"
ENV RESEND_API_KEY="re_mock_key_123"
RUN npm run build
# 7. Start Command
ENV PORT=7860
ENV NODE_ENV=production
EXPOSE 7860
# We use 'npm start' so it serves the .next folder we just built.
CMD ["npm", "start"]