Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: dockerize build and add push for prod #2668

Closed
wants to merge 30 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
1f5b782
feat: add Dockerized building, and registry push for prod
siobh9 Oct 10, 2024
6194a52
chore: correct syntax
siobh9 Oct 10, 2024
cc649b3
chore: try deps and builder together
siobh9 Oct 10, 2024
4e49f96
chore: add env vars
siobh9 Oct 10, 2024
7e82237
chore: add args
siobh9 Oct 10, 2024
5a95245
chore: try args and only dollar
siobh9 Oct 10, 2024
c40975b
chore: correctly set build-args in github action
siobh9 Oct 10, 2024
335d7ea
chore: don't use standalone
siobh9 Oct 11, 2024
5a0a226
chore: reintro deps layer
siobh9 Oct 11, 2024
1ac539f
chore: rm extra and use just regular .next
siobh9 Oct 11, 2024
d3a733a
Revert "chore: reintro deps layer"
siobh9 Oct 11, 2024
c8d7672
chore: try basic version
siobh9 Oct 11, 2024
c5dfd13
chore: fix syntax
siobh9 Oct 11, 2024
f5e7767
chore: ensure yarn install works everywhere
siobh9 Oct 11, 2024
8cfe1dc
chore: make a dev image for testing
siobh9 Oct 11, 2024
ec48781
chore: expose 3000
siobh9 Oct 11, 2024
2577e77
chore: fix syntax
siobh9 Oct 11, 2024
4dee3e7
chore: syntax 2
siobh9 Oct 11, 2024
f1b6c77
chore: make one step
siobh9 Oct 11, 2024
dc57d46
chore: further consolidate
siobh9 Oct 11, 2024
89c1747
chore: correct registry name
siobh9 Oct 11, 2024
bd32560
chore: try standalone
siobh9 Oct 11, 2024
aa29ea5
chore: build working
siobh9 Oct 11, 2024
63e3475
feat: container successfully runs
siobh9 Oct 12, 2024
b2c43b8
chore: reorganize github workflows
siobh9 Oct 12, 2024
c2e7e4c
chore: clean up spaces
siobh9 Oct 12, 2024
4bd3cb7
chore: only push image for prod
siobh9 Oct 12, 2024
ed52197
chore: rename to branch name
siobh9 Oct 12, 2024
8f5dd37
chore: add compose file
siobh9 Oct 12, 2024
81fd37d
chore: change container naming
siobh9 Oct 12, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions .github/workflows/nextjs_docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: nextjs-docker

on: push

permissions:
packages: write

# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false

jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Set short git commit SHA
id: vars
run: |
calculatedSha=$(git rev-parse --short ${{ github.sha }})
echo "COMMIT_SHORT_SHA=$calculatedSha" >> $GITHUB_ENV

- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: https://ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push Docker image
uses: docker/build-push-action@v3
with:
context: .
push: ${{ github.ref == 'refs/heads/main' }}
tags: ghcr.io/jk-labs-inc/jokerace:main
build-args: |
NEXT_PUBLIC_SUPABASE_URL= ${{ github.ref == 'refs/heads/main' && secrets.PROD_NEXT_PUBLIC_SUPABASE_URL || secrets.DEV_NEXT_PUBLIC_SUPABASE_URL }}
NEXT_PUBLIC_SUPABASE_ANON_KEY= ${{ github.ref == 'refs/heads/main' && secrets.PROD_NEXT_PUBLIC_SUPABASE_ANON_KEY || secrets.DEV_NEXT_PUBLIC_SUPABASE_ANON_KEY }}
NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID= ${{ github.ref == 'refs/heads/main' && secrets.PROD_NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID || secrets.DEV_NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID }}
NEXT_PUBLIC_R2_ACCOUNT_ID= ${{ github.ref == 'refs/heads/main' && secrets.PROD_NEXT_PUBLIC_R2_ACCOUNT_ID || secrets.DEV_NEXT_PUBLIC_R2_ACCOUNT_ID }}
NEXT_PUBLIC_R2_ACCESS_KEY_ID= ${{ github.ref == 'refs/heads/main' && secrets.PROD_NEXT_PUBLIC_R2_ACCESS_KEY_ID || secrets.DEV_NEXT_PUBLIC_R2_ACCESS_KEY_ID }}
NEXT_PUBLIC_R2_SECRET_ACCESS_KEY= ${{ github.ref == 'refs/heads/main' && secrets.PROD_NEXT_PUBLIC_R2_SECRET_ACCESS_KEY || secrets.DEV_NEXT_PUBLIC_R2_SECRET_ACCESS_KEY }}
NEXT_PUBLIC_MERKLE_TREES_BUCKET= ${{ github.ref == 'refs/heads/main' && secrets.PROD_NEXT_PUBLIC_MERKLE_TREES_BUCKET || secrets.DEV_NEXT_PUBLIC_MERKLE_TREES_BUCKET }}
NEXT_PUBLIC_IMAGE_UPLOAD_BUCKET= ${{ github.ref == 'refs/heads/main' && secrets.PROD_NEXT_PUBLIC_IMAGE_UPLOAD_BUCKET || secrets.DEV_NEXT_PUBLIC_IMAGE_UPLOAD_BUCKET }}
NEXT_PUBLIC_ETHERSCAN_KEY= ${{ github.ref == 'refs/heads/main' && secrets.PROD_NEXT_PUBLIC_ETHERSCAN_KEY || secrets.DEV_NEXT_PUBLIC_ETHERSCAN_KEY }}
NEXT_PUBLIC_QUICKNODE_SLUG= ${{ github.ref == 'refs/heads/main' && secrets.PROD_NEXT_PUBLIC_QUICKNODE_SLUG || secrets.DEV_NEXT_PUBLIC_QUICKNODE_SLUG }}
NEXT_PUBLIC_QUICKNODE_KEY= ${{ github.ref == 'refs/heads/main' && secrets.PROD_NEXT_PUBLIC_QUICKNODE_KEY || secrets.DEV_NEXT_PUBLIC_QUICKNODE_KEY }}
NEXT_PUBLIC_ALCHEMY_KEY= ${{ github.ref == 'refs/heads/main' && secrets.PROD_NEXT_PUBLIC_ALCHEMY_KEY || secrets.DEV_NEXT_PUBLIC_ALCHEMY_KEY }}

73 changes: 73 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
FROM node:18-alpine AS base

FROM base AS builder

# Install
RUN apk add --update python3 make g++\
&& rm -rf /var/cache/apk/*
WORKDIR /app
COPY . .

RUN yarn --production

# Build
# disable telemetry during the build
ENV NEXT_TELEMETRY_DISABLED=1

ARG NEXT_PUBLIC_SUPABASE_URL
ARG NEXT_PUBLIC_SUPABASE_ANON_KEY
ARG NEXT_PUBLIC_R2_ACCOUNT_ID
ARG NEXT_PUBLIC_R2_ACCESS_KEY_ID
ARG NEXT_PUBLIC_R2_SECRET_ACCESS_KEY
ARG NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID
ARG NEXT_PUBLIC_MERKLE_TREES_BUCKET
ARG NEXT_PUBLIC_IMAGE_UPLOAD_BUCKET
ARG NEXT_PUBLIC_ETHERSCAN_KEY
ARG NEXT_PUBLIC_QUICKNODE_SLUG
ARG NEXT_PUBLIC_QUICKNODE_KEY
ARG NEXT_PUBLIC_ALCHEMY_KEY

ENV NEXT_PUBLIC_SUPABASE_URL=$NEXT_PUBLIC_SUPABASE_URL
ENV NEXT_PUBLIC_SUPABASE_ANON_KEY=$NEXT_PUBLIC_SUPABASE_ANON_KEY
ENV NEXT_PUBLIC_R2_ACCOUNT_ID=$NEXT_PUBLIC_R2_ACCOUNT_ID
ENV NEXT_PUBLIC_R2_ACCESS_KEY_ID=$NEXT_PUBLIC_R2_ACCESS_KEY_ID
ENV NEXT_PUBLIC_R2_SECRET_ACCESS_KEY=$NEXT_PUBLIC_R2_SECRET_ACCESS_KEY
ENV NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID=$NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID
ENV NEXT_PUBLIC_MERKLE_TREES_BUCKET=$NEXT_PUBLIC_MERKLE_TREES_BUCKET
ENV NEXT_PUBLIC_IMAGE_UPLOAD_BUCKET=$NEXT_PUBLIC_IMAGE_UPLOAD_BUCKET
ENV NEXT_PUBLIC_ETHERSCAN_KEY=$NEXT_PUBLIC_ETHERSCAN_KEY
ENV NEXT_PUBLIC_QUICKNODE_SLUG=$NEXT_PUBLIC_QUICKNODE_SLUG
ENV NEXT_PUBLIC_QUICKNODE_KEY=$NEXT_PUBLIC_QUICKNODE_KEY
ENV NEXT_PUBLIC_ALCHEMY_KEY=$NEXT_PUBLIC_ALCHEMY_KEY

RUN yarn build

FROM base AS runner
WORKDIR /app

ENV NODE_ENV=production
# Uncomment the following line in case you want to disable telemetry during runtime.
ENV NEXT_TELEMETRY_DISABLED=1

# Set the correct permission for prerender cache
RUN addgroup nodejs
RUN adduser -SDH nextjs
RUN mkdir .next
RUN chown nextjs:nodejs .next

# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY --from=builder --chown=nextjs:nodejs /app/packages/react-app-revamp/.next/standalone/packages/react-app-revamp ./
COPY --from=builder --chown=nextjs:nodejs /app/packages/react-app-revamp/.next/standalone/node_modules ./node_modules
COPY --from=builder --chown=nextjs:nodejs /app/packages/react-app-revamp/.next/static ./.next/static
COPY --from=builder /app/packages/react-app-revamp/public ./public

USER nextjs

# Exposed port (for orchestrators and dynamic reverse proxies)
EXPOSE 3000
ENV PORT=3000
ENV HOSTNAME="0.0.0.0"
HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 CMD [ "wget", "-q0", "http://localhost:3000/health" ]

CMD ["node", "server.js"]
24 changes: 24 additions & 0 deletions compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
services:
main-jokerace:
container_name: main-jokerace
image: ghcr.io/jk-labs-inc/jokerace:main
deploy:
mode: replicated
replicas: 3
restart: always

watchtower:
container_name: jokerace-watchtower
image: containrrr/watchtower
command:
- "main-jokerace"
- "--interval"
- "30"
- "--cleanup"
- "true"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
deploy:
mode: global
restart: always

1 change: 1 addition & 0 deletions packages/react-app-revamp/next.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ const nextConfig = {
],
},
transpilePackages: ["react-tweet"],
output: "standalone",
};

module.exports = withPWA({
Expand Down
Loading