Skip to content

Commit e253087

Browse files
committed
refactor: optimize Docker workflow and configuration
- Simplify Dockerfile by removing redundant build args - Update GitHub Actions workflow name and structure - Fix repository paths in README.md - Improve environment variable handling in container builds
1 parent 7501e13 commit e253087

File tree

3 files changed

+97
-98
lines changed

3 files changed

+97
-98
lines changed

β€Ž.github/workflows/Docker-Image-Build.yml renamed to β€Ž.github/workflows/docker.img.build-ghcr.io.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ jobs:
2222

2323
steps:
2424
- uses: actions/checkout@v4
25-
2625
- name: Use Node.js ${{ matrix.node-version }}
2726
uses: actions/setup-node@v4
2827
with:

β€ŽDockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ RUN npm cache clean --force && npm install --legacy-peer-deps
1212
# Copy The Rest Of The Application Files
1313
COPY . .
1414

15-
# Load Environment Variables from the .env File Created in the GitHub Actions Workflow
15+
# Load Environment Variables From the .env File Created In The GitHub Actions Workflow
1616
RUN if [ -f .env ]; then export $(grep -v '^#' .env | xargs); fi
1717

1818
# Build The Aplication

β€ŽREADME.md

Lines changed: 96 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ Make Sure, You have The Following Dependancies Installed on Your Machine:
107107
**Cloning The Repository**
108108

109109
```bash
110-
git clone https://github.com/aknibircse/RUPANTAR_An-AI-Based-SaaS.git
111-
cd RUPANTAR_An-AI-Based-SaaS
110+
git clone https://github.com/aknibircse/rupantor-ai-saas.git
111+
cd rupantor-ai-saas
112112
```
113113

114114
</br>
@@ -2792,118 +2792,46 @@ http {
27922792
<summary><code>dockerfile</code></summary>
27932793
27942794
```dockerfile
2795-
# STAGE-1: CONFIGURING DOCKER IMAGE
2795+
# STAGE 1: BUILD IMAGE
27962796
FROM node:18-alpine AS builder
27972797

27982798
WORKDIR /app
27992799

2800-
# Define Build Arguments
2801-
ARG NEXT_PUBLIC_CLERK_SIGN_IN_URL
2802-
ARG NEXT_PUBLIC_CLERK_SIGN_UP_URL
2803-
ARG NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL
2804-
ARG NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL
2805-
ARG MONGODB_URL
2806-
ARG NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY
2807-
ARG CLERK_SECRET_KEY
2808-
ARG WEBHOOK_SECRET
2809-
ARG NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME
2810-
ARG NEXT_PUBLIC_CLOUDINARY_API_KEY
2811-
ARG NEXT_PUBLIC_CLOUDINARY_API_SECRET
2812-
ARG NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET
2813-
ARG NEXT_PUBLIC_CLOUDINARY_BUCKET_NAME
2814-
ARG NEXT_PUBLIC_STRIPE_WEBHOOK_CHECKOUT_URL
2815-
ARG NEXT_PUBLIC_STRIPE_SECRET_KEY
2816-
ARG NEXT_PUBLIC_STRIPE_WEBHOOK_SECRET
2817-
ARG NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY
2818-
2819-
# Set Environment Variables For Build Stage
2820-
ENV NEXT_PUBLIC_CLERK_SIGN_IN_URL=$NEXT_PUBLIC_CLERK_SIGN_IN_URL \
2821-
NEXT_PUBLIC_CLERK_SIGN_UP_URL=$NEXT_PUBLIC_CLERK_SIGN_UP_URL \
2822-
NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=$NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL \
2823-
NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=$NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL \
2824-
MONGODB_URL=$MONGODB_URL \
2825-
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=$NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY \
2826-
CLERK_SECRET_KEY=$CLERK_SECRET_KEY \
2827-
WEBHOOK_SECRET=$WEBHOOK_SECRET \
2828-
NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=$NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME \
2829-
NEXT_PUBLIC_CLOUDINARY_API_KEY=$NEXT_PUBLIC_CLOUDINARY_API_KEY \
2830-
NEXT_PUBLIC_CLOUDINARY_API_SECRET=$NEXT_PUBLIC_CLOUDINARY_API_SECRET \
2831-
NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET=$NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET \
2832-
NEXT_PUBLIC_CLOUDINARY_BUCKET_NAME=$NEXT_PUBLIC_CLOUDINARY_BUCKET_NAME \
2833-
NEXT_PUBLIC_STRIPE_WEBHOOK_CHECKOUT_URL=$NEXT_PUBLIC_STRIPE_WEBHOOK_CHECKOUT_URL \
2834-
NEXT_PUBLIC_STRIPE_SECRET_KEY=$NEXT_PUBLIC_STRIPE_SECRET_KEY \
2835-
NEXT_PUBLIC_STRIPE_WEBHOOK_SECRET=$NEXT_PUBLIC_STRIPE_WEBHOOK_SECRET \
2836-
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=$NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY
2837-
2838-
# COPYING package.json & package-lock.json (IF EXISTS) FOR DPENDANCY INSTALLATION
2839-
COPY package.json ./
2840-
COPY package-lock.json ./
2841-
2842-
# CACHE CLEANING & INSTALLING DEPENDENCIES
2843-
RUN npm cache clean --force && \
2844-
npm install --legacy-peer-deps
2845-
2846-
# COPING REST ESSENTIALS OF THIS APP
2800+
# Copy Package Files First For Caching Dependencies
2801+
COPY package.json package-lock.json ./
2802+
2803+
# Install Dependencies
2804+
RUN npm cache clean --force && npm install --legacy-peer-deps
2805+
2806+
# Copy The Rest Of The Application Files
28472807
COPY . .
28482808

2849-
# PRODUCTION BUILD FOR THIS APP
2809+
# Load Environment Variables From the .env File Created In The GitHub Actions Workflow
2810+
RUN if [ -f .env ]; then export $(grep -v '^#' .env | xargs); fi
2811+
2812+
# Build The Aplication
28502813
RUN npm run build:prod
28512814

2852-
# STAGE-2: FINAL DOCKER IMAGE BUILDS FOR THIS APP
2815+
# STAGE 2: RUN IMAGE
28532816
FROM node:18-alpine AS runner
28542817

28552818
WORKDIR /app
28562819

2857-
# Define Build Arguments Again For The Final Stage
2858-
ARG NEXT_PUBLIC_CLERK_SIGN_IN_URL
2859-
ARG NEXT_PUBLIC_CLERK_SIGN_UP_URL
2860-
ARG NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL
2861-
ARG NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL
2862-
ARG MONGODB_URL
2863-
ARG NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY
2864-
ARG CLERK_SECRET_KEY
2865-
ARG WEBHOOK_SECRET
2866-
ARG NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME
2867-
ARG NEXT_PUBLIC_CLOUDINARY_API_KEY
2868-
ARG NEXT_PUBLIC_CLOUDINARY_API_SECRET
2869-
ARG NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET
2870-
ARG NEXT_PUBLIC_CLOUDINARY_BUCKET_NAME
2871-
ARG NEXT_PUBLIC_STRIPE_WEBHOOK_CHECKOUT_URL
2872-
ARG NEXT_PUBLIC_STRIPE_SECRET_KEY
2873-
ARG NEXT_PUBLIC_STRIPE_WEBHOOK_SECRET
2874-
ARG NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY
2875-
2876-
# COPY ESSENTIALS FROM BUILDER'S STAGE
2877-
COPY --from=builder /app/package.json ./package.json
2878-
COPY --from=builder /app/package-lock.json ./package-lock.json
2820+
# Copy Built Files & Dependencies From The Builder Stage
2821+
COPY --from=builder /app/package.json package.json
2822+
COPY --from=builder /app/package-lock.json package-lock.json
28792823
COPY --from=builder /app/.next ./.next
28802824
COPY --from=builder /app/public ./public
28812825
COPY --from=builder /app/node_modules ./node_modules
28822826

2883-
# PORT EXPOSING FOR APP ACCESS
2827+
# Expose Application Port
28842828
EXPOSE 3000
28852829

2886-
# Set Environment Variables From Build Arguments
2887-
ENV PORT=3000 \
2888-
NEXT_PUBLIC_CLERK_SIGN_IN_URL=$NEXT_PUBLIC_CLERK_SIGN_IN_URL \
2889-
NEXT_PUBLIC_CLERK_SIGN_UP_URL=$NEXT_PUBLIC_CLERK_SIGN_UP_URL \
2890-
NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=$NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL \
2891-
NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=$NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL \
2892-
MONGODB_URL=$MONGODB_URL \
2893-
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=$NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY \
2894-
CLERK_SECRET_KEY=$CLERK_SECRET_KEY \
2895-
WEBHOOK_SECRET=$WEBHOOK_SECRET \
2896-
NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=$NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME \
2897-
NEXT_PUBLIC_CLOUDINARY_API_KEY=$NEXT_PUBLIC_CLOUDINARY_API_KEY \
2898-
NEXT_PUBLIC_CLOUDINARY_API_SECRET=$NEXT_PUBLIC_CLOUDINARY_API_SECRET \
2899-
NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET=$NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET \
2900-
NEXT_PUBLIC_CLOUDINARY_BUCKET_NAME=$NEXT_PUBLIC_CLOUDINARY_BUCKET_NAME \
2901-
NEXT_PUBLIC_STRIPE_WEBHOOK_CHECKOUT_URL=$NEXT_PUBLIC_STRIPE_WEBHOOK_CHECKOUT_URL \
2902-
NEXT_PUBLIC_STRIPE_SECRET_KEY=$NEXT_PUBLIC_STRIPE_SECRET_KEY \
2903-
NEXT_PUBLIC_STRIPE_WEBHOOK_SECRET=$NEXT_PUBLIC_STRIPE_WEBHOOK_SECRET \
2904-
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=$NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY
2905-
2906-
# RUN THIS APP IN PRODUCTION MODE
2830+
# Load Environment Variables From The .env File
2831+
ENV PORT=3000
2832+
COPY .env .env
2833+
2834+
# Run The Application
29072835
CMD ["npm", "run", "start:prod"]
29082836

29092837
```
@@ -2988,6 +2916,78 @@ volumes:
29882916
</details>
29892917
<br/>
29902918
2919+
<details>
2920+
<summary><code>docker.img.build-ghcr.io.yaml</code></summary>
2921+
2922+
```yaml
2923+
name: docker-containers-to-build-docker-image
2924+
2925+
on:
2926+
push:
2927+
branches: [ "main" ]
2928+
workflow_dispatch: {}
2929+
2930+
env:
2931+
REGISTRY: ghcr.io
2932+
IMAGE_NAME: ${{ github.repository }}
2933+
2934+
jobs:
2935+
build:
2936+
runs-on: ubuntu-latest
2937+
permissions:
2938+
contents: read
2939+
packages: write
2940+
2941+
strategy:
2942+
matrix:
2943+
node-version: [18.12.0]
2944+
2945+
steps:
2946+
- uses: actions/checkout@v4
2947+
- name: Use Node.js ${{ matrix.node-version }}
2948+
uses: actions/setup-node@v4
2949+
with:
2950+
node-version: ${{ matrix.node-version }}
2951+
cache: 'npm'
2952+
2953+
- name: Login Into Github Container Registry
2954+
run: |
2955+
docker login --username ${{ github.actor }} --password ${{ secrets.AUTH_SECRET }} ghcr.io
2956+
2957+
- name: Create .env File
2958+
run: |
2959+
echo "NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=${{ secrets.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY }}" >> .env
2960+
echo "CLERK_SECRET_KEY=${{ secrets.CLERK_SECRET_KEY }}" >> .env
2961+
echo "NEXT_PUBLIC_CLERK_SIGN_IN_URL=${{ secrets.NEXT_PUBLIC_CLERK_SIGN_IN_URL }}" >> .env
2962+
echo "NEXT_PUBLIC_CLERK_SIGN_UP_URL=${{ secrets.NEXT_PUBLIC_CLERK_SIGN_UP_URL }}" >> .env
2963+
echo "NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=${{ secrets.NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL }}" >> .env
2964+
echo "NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=${{ secrets.NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL }}" >> .env
2965+
echo "MONGODB_URL=${{ secrets.MONGODB_URL }}" >> .env
2966+
echo "WEBHOOK_SECRET=${{ secrets.WEBHOOK_SECRET }}" >> .env
2967+
echo "NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=${{ secrets.NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME }}" >> .env
2968+
echo "NEXT_PUBLIC_CLOUDINARY_API_KEY=${{ secrets.NEXT_PUBLIC_CLOUDINARY_API_KEY }}" >> .env
2969+
echo "NEXT_PUBLIC_CLOUDINARY_API_SECRET=${{ secrets.NEXT_PUBLIC_CLOUDINARY_API_SECRET }}" >> .env
2970+
echo "NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET=${{ secrets.NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET }}" >> .env
2971+
echo "NEXT_PUBLIC_CLOUDINARY_BUCKET_NAME=${{ secrets.NEXT_PUBLIC_CLOUDINARY_BUCKET_NAME }}" >> .env
2972+
echo "NEXT_PUBLIC_STRIPE_WEBHOOK_CHECKOUT_URL=${{ secrets.NEXT_PUBLIC_STRIPE_WEBHOOK_CHECKOUT_URL }}" >> .env
2973+
echo "NEXT_PUBLIC_STRIPE_SECRET_KEY=${{ secrets.NEXT_PUBLIC_STRIPE_SECRET_KEY }}" >> .env
2974+
echo "NEXT_PUBLIC_STRIPE_WEBHOOK_SECRET=${{ secrets.NEXT_PUBLIC_STRIPE_WEBHOOK_SECRET }}" >> .env
2975+
echo "NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=${{ secrets.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY }}" >> .env
2976+
2977+
- name: Set Docker Image Tag
2978+
id: image_tag
2979+
run: echo "IMAGE_TAG=$(echo $GITHUB_SHA | cut -c1-7)" >> $GITHUB_OUTPUT
2980+
2981+
- name: Build Docker Image
2982+
run: |
2983+
docker build --no-cache . --tag ghcr.io/aknibircse/rupantor-ai-saas:${{ steps.image_tag.outputs.IMAGE_TAG }}
2984+
2985+
- name: Push Docker Image To Registry
2986+
run: docker push ghcr.io/aknibircse/rupantor-ai-saas:${{ steps.image_tag.outputs.IMAGE_TAG }}
2987+
```
2988+
2989+
</details>
2990+
<br/>
29912991
29922992
29932993
## πŸ“ƒ <a name="copyright">COPYRIGHTS</a>

0 commit comments

Comments
Β (0)