From baf8e2ac817162c9f1083f4a4038a444766414bb Mon Sep 17 00:00:00 2001 From: Santosh Tharu Date: Fri, 26 Jul 2024 09:50:19 +0545 Subject: [PATCH 1/5] added seeder script --- package.json | 5 +++-- scripts/seed.js | 21 +++++++++++++++++++++ scripts/seeds/admin-user.js | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 scripts/seed.js create mode 100644 scripts/seeds/admin-user.js diff --git a/package.json b/package.json index d002388f8..d77d0d6a1 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "build": "npm-run-all check-env build-db check-db build-tracker build-geo build-app", "start": "next start", "build-docker": "npm-run-all build-db build-tracker build-geo build-app", - "start-docker": "npm-run-all check-db update-tracker start-server", + "start-docker": "npm-run-all check-db update-tracker seed start-server", "start-env": "node scripts/start-env.js", "start-server": "node server.js", "build-app": "next build", @@ -45,7 +45,8 @@ "postbuild": "node scripts/postbuild.js", "test": "jest", "cypress-open": "cypress open cypress run", - "cypress-run": "cypress run cypress run" + "cypress-run": "cypress run cypress run", + "seed": "node scripts/seed.js" }, "lint-staged": { "**/*.{js,jsx,ts,tsx}": [ diff --git a/scripts/seed.js b/scripts/seed.js new file mode 100644 index 000000000..bb87c233d --- /dev/null +++ b/scripts/seed.js @@ -0,0 +1,21 @@ +/* eslint-disable no-console */ +require('dotenv').config(); +const { client: prismaClient } = require('@umami/prisma-client'); + +const { seedAdminUser } = require('./seeds/admin-user'); + +async function main() { + // seed admin user + await seedAdminUser(); + + console.log('Seeding complete.'); +} + +main() + .catch(e => { + console.error(e); + process.exit(1); + }) + .finally(async () => { + await prismaClient.$disconnect(); + }); diff --git a/scripts/seeds/admin-user.js b/scripts/seeds/admin-user.js new file mode 100644 index 000000000..1ad653ea0 --- /dev/null +++ b/scripts/seeds/admin-user.js @@ -0,0 +1,32 @@ +const { hashPassword } = require('next-basics'); + +/* eslint-disable no-console */ +const { client: prismaClient } = require('@umami/prisma-client'); + +async function seedAdminUser() { + const adminUserId = process.env.ADMIN_USER_ID; + const adminUsername = process.env.ADMIN_USERNAME; + const adminPassword = process.env.ADMIN_PASSWORD; + + if (!adminUserId || !adminUsername || !adminPassword) { + console.error('Admin credentials are not set.'); + process.exit(1); + } + + await prismaClient.user.upsert({ + where: { username: adminUsername }, + update: {}, + create: { + id: adminUserId, + username: adminUsername, + password: hashPassword(adminPassword), + role: 'admin', + }, + }); + + console.log('Admin user seeded successfully.'); +} + +module.exports = { + seedAdminUser, +}; From 39b32edc9da0f55dffa08b28507ab09a343f08f3 Mon Sep 17 00:00:00 2001 From: Santosh Tharu Date: Fri, 26 Jul 2024 10:41:55 +0545 Subject: [PATCH 2/5] commented docker hub uses --- .github/workflows/cd-manual.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/cd-manual.yml b/.github/workflows/cd-manual.yml index ac701fcc5..7b55e9833 100644 --- a/.github/workflows/cd-manual.yml +++ b/.github/workflows/cd-manual.yml @@ -32,12 +32,12 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - uses: mr-smithers-excellent/docker-build-push@v6 - name: Build & push Docker image to docker.io for ${{ matrix.db-type }} - with: - image: umamisoftware/umami - tags: ${{ matrix.db-type }}-${{ inputs.version }}, ${{ matrix.db-type }}-latest - buildArgs: DATABASE_TYPE=${{ matrix.db-type }} - registry: docker.io - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} \ No newline at end of file + # - uses: mr-smithers-excellent/docker-build-push@v6 + # name: Build & push Docker image to docker.io for ${{ matrix.db-type }} + # with: + # image: umamisoftware/umami + # tags: ${{ matrix.db-type }}-${{ inputs.version }}, ${{ matrix.db-type }}-latest + # buildArgs: DATABASE_TYPE=${{ matrix.db-type }} + # registry: docker.io + # username: ${{ secrets.DOCKER_USERNAME }} + # password: ${{ secrets.DOCKER_PASSWORD }} \ No newline at end of file From b518b15559a3e47a46cc07e1666b9e9721de40e6 Mon Sep 17 00:00:00 2001 From: Santosh Tharu Date: Sat, 27 Jul 2024 13:16:23 +0545 Subject: [PATCH 3/5] fixed runtime env allowed_frame_urls --- Dockerfile | 9 ++++++++- entrypoint.sh | 27 +++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 entrypoint.sh diff --git a/Dockerfile b/Dockerfile index 801b2bc20..d4d185fb7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,7 +23,8 @@ ENV BASE_PATH $BASE_PATH ENV NEXT_TELEMETRY_DISABLED 1 -RUN yarn build-docker +RUN ALLOWED_FRAME_URLS=/__ENTRYPOINT__ yarn build-docker +ENV ALLOWED_FRAME_URLS="" # Production image, copy all the files and run next FROM node:18-alpine AS runner @@ -51,6 +52,10 @@ COPY --from=builder /app/scripts ./scripts COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static +# Create entrypoint script +COPY entrypoint.sh ./entrypoint.sh +RUN chmod +x ./entrypoint.sh + USER nextjs EXPOSE 3000 @@ -58,4 +63,6 @@ EXPOSE 3000 ENV HOSTNAME 0.0.0.0 ENV PORT 3000 +ENTRYPOINT ["./entrypoint.sh"] + CMD ["yarn", "start-docker"] diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 000000000..1b03768c4 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +# replace /__ENTRYPOINT__ with the runtime-configured entrypoint +escaped_frame_urls=$(echo "$ALLOWED_FRAME_URLS" | sed 's/\//\\\//g') + +echo "Replacing /__ENTRYPOINT__ in all .next file..." +find .next -type f -exec sed -i 's/\/__ENTRYPOINT__/'"${escaped_frame_urls}"'/g' {} + + +# Check if any replacements were made in .next files +if [ $? -eq 0 ]; then + echo "Replacements in .next completed." +else + echo "No replacements made in .next or an error occurred." +fi + +# Replace /__ENTRYPOINT__ in server.js +echo "Replacing /__ENTRYPOINT__ in server.js..." +sed -i "s/\/__ENTRYPOINT__/${escaped_frame_urls}/g" server.js + +# Check if any replacements were made in server.js +if [ $? -eq 0 ]; then + echo "Replacements in server.js completed." +else + echo "No replacements made in server.js or an error occurred." +fi + +$@ \ No newline at end of file From f8aa276c36a4738f1e1848eca9ed32c635185aee Mon Sep 17 00:00:00 2001 From: Santosh Tharu Date: Sat, 27 Jul 2024 16:59:46 +0545 Subject: [PATCH 4/5] entrypoint fixes --- entrypoint.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/entrypoint.sh b/entrypoint.sh index 1b03768c4..4920d167d 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,6 +1,19 @@ #!/bin/sh # replace /__ENTRYPOINT__ with the runtime-configured entrypoint +if [ "$ALLOWED_FRAME_URLS" = "" ]; then + # root entrypoint is handled differently from non-root, in particular + # - basePath="" rather than "/" + # - an extra redirect is added /x/ => /x -- but with root that would be // => / which is invalid + cp .next/routes-manifest.json .next/routes-manifest.json.in + jq -rc '.basePath = "" + | .redirects = [ + .redirects + | .[] + | select((.source == "/__ENTRYPOINT__/" and .destination == "/__ENTRYPOINT__") | not) + ]' .next/routes-manifest.json.in > .next/routes-manifest.json +fi + escaped_frame_urls=$(echo "$ALLOWED_FRAME_URLS" | sed 's/\//\\\//g') echo "Replacing /__ENTRYPOINT__ in all .next file..." From 0e4026bd8d4f0c7c1f7b3bd721f56fa4768a8d65 Mon Sep 17 00:00:00 2001 From: Santosh Tharu Date: Sat, 27 Jul 2024 19:15:06 +0545 Subject: [PATCH 5/5] reverting entrypoint --- Dockerfile | 9 +-------- entrypoint.sh | 40 ---------------------------------------- 2 files changed, 1 insertion(+), 48 deletions(-) delete mode 100644 entrypoint.sh diff --git a/Dockerfile b/Dockerfile index d4d185fb7..801b2bc20 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,8 +23,7 @@ ENV BASE_PATH $BASE_PATH ENV NEXT_TELEMETRY_DISABLED 1 -RUN ALLOWED_FRAME_URLS=/__ENTRYPOINT__ yarn build-docker -ENV ALLOWED_FRAME_URLS="" +RUN yarn build-docker # Production image, copy all the files and run next FROM node:18-alpine AS runner @@ -52,10 +51,6 @@ COPY --from=builder /app/scripts ./scripts COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static -# Create entrypoint script -COPY entrypoint.sh ./entrypoint.sh -RUN chmod +x ./entrypoint.sh - USER nextjs EXPOSE 3000 @@ -63,6 +58,4 @@ EXPOSE 3000 ENV HOSTNAME 0.0.0.0 ENV PORT 3000 -ENTRYPOINT ["./entrypoint.sh"] - CMD ["yarn", "start-docker"] diff --git a/entrypoint.sh b/entrypoint.sh deleted file mode 100644 index 4920d167d..000000000 --- a/entrypoint.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/sh - -# replace /__ENTRYPOINT__ with the runtime-configured entrypoint -if [ "$ALLOWED_FRAME_URLS" = "" ]; then - # root entrypoint is handled differently from non-root, in particular - # - basePath="" rather than "/" - # - an extra redirect is added /x/ => /x -- but with root that would be // => / which is invalid - cp .next/routes-manifest.json .next/routes-manifest.json.in - jq -rc '.basePath = "" - | .redirects = [ - .redirects - | .[] - | select((.source == "/__ENTRYPOINT__/" and .destination == "/__ENTRYPOINT__") | not) - ]' .next/routes-manifest.json.in > .next/routes-manifest.json -fi - -escaped_frame_urls=$(echo "$ALLOWED_FRAME_URLS" | sed 's/\//\\\//g') - -echo "Replacing /__ENTRYPOINT__ in all .next file..." -find .next -type f -exec sed -i 's/\/__ENTRYPOINT__/'"${escaped_frame_urls}"'/g' {} + - -# Check if any replacements were made in .next files -if [ $? -eq 0 ]; then - echo "Replacements in .next completed." -else - echo "No replacements made in .next or an error occurred." -fi - -# Replace /__ENTRYPOINT__ in server.js -echo "Replacing /__ENTRYPOINT__ in server.js..." -sed -i "s/\/__ENTRYPOINT__/${escaped_frame_urls}/g" server.js - -# Check if any replacements were made in server.js -if [ $? -eq 0 ]; then - echo "Replacements in server.js completed." -else - echo "No replacements made in server.js or an error occurred." -fi - -$@ \ No newline at end of file