@@ -107,8 +107,8 @@ Make Sure, You have The Following Dependancies Installed on Your Machine:
107
107
** Cloning The Repository**
108
108
109
109
``` 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
112
112
```
113
113
114
114
</br >
@@ -2792,118 +2792,46 @@ http {
2792
2792
<summary><code>dockerfile</code></summary>
2793
2793
2794
2794
` ` ` dockerfile
2795
- # STAGE - 1 : CONFIGURING DOCKER IMAGE
2795
+ # STAGE 1 : BUILD IMAGE
2796
2796
FROM node : 18 -alpine AS builder
2797
2797
2798
2798
WORKDIR / app
2799
2799
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
2847
2807
COPY . .
2848
2808
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
2850
2813
RUN npm run build : prod
2851
2814
2852
- # STAGE - 2 : FINAL DOCKER IMAGE BUILDS FOR THIS APP
2815
+ # STAGE 2 : RUN IMAGE
2853
2816
FROM node : 18 -alpine AS runner
2854
2817
2855
2818
WORKDIR / app
2856
2819
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
2879
2823
COPY -- from = builder / app / .next ./ .next
2880
2824
COPY -- from = builder / app / public ./ public
2881
2825
COPY -- from = builder / app / node_modules ./ node_modules
2882
2826
2883
- # PORT EXPOSING FOR APP ACCESS
2827
+ # Expose Application Port
2884
2828
EXPOSE 3000
2885
2829
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
2907
2835
CMD [" npm" , " run" , " start:prod" ]
2908
2836
2909
2837
` ` `
@@ -2988,6 +2916,78 @@ volumes:
2988
2916
</details>
2989
2917
<br/>
2990
2918
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/>
2991
2991
2992
2992
2993
2993
## π <a name="copyright">COPYRIGHTS</a>
0 commit comments