@@ -262,111 +262,23 @@ docker compose restart app
262
262
### Environment Variables
263
263
Make Sure to Create a ` .env ` File In The Project Root With The Following Variables:
264
264
``` plaintext
265
- # Required Environment Variables For The Application
266
- NODE_ENV=production
267
- MONGODB_URI=mongodb://mongodb:27017/rupantor
268
- # Add Other Required Environment Variables
269
- ```
270
-
271
- ### Networking
272
- - The Application Runs On Port 3000.
273
- - MongoDB Runs On Default Port 27017.
274
- - Services Are Connected Through The ` rupantor_network ` Network.
275
-
276
- ### Health Checks
277
- - Built-In Health Checks Are Configured For Both The Application & MongoDB.
278
- - Services Will Automatically Restart If They Become Unhealthy.
279
-
280
- ### Production Deployment
281
- For Production Deployment:
282
- 1 . Ensure All Environment Variables Are Properly Set.
283
- 2 . Use Production-Grade MongoDB Credentials.
284
- 3 . Consider Using Docker Volumes For Persistent Data.
285
- 4 . Enable & Configure SSL/TLS For Exposing To The Internet
286
-
287
- ### Troubleshooting
288
- 1 . ** Container Fails To Start**
289
- - Check Logs: ` docker compose logs app `
290
- - Verify Environment Variables.
291
- - Ensure Ports Are Not In Use.
292
-
293
- 2 . ** MongoDB Connection Issues**
294
- - Ensure MongoDB Container Is Healthy.
295
- - Check Network Connectivity.
296
- - Verify MongoDB Credentials.
297
-
298
- 3 . ** Performance Issues**
299
- - Monitor Container Resources: ` docker stats `
300
- - Check Application Logs For Bottlenecks.
301
- - Consider Scaling Services If Needed.
302
-
303
- </br >
304
- ## 🐳 Docker Setup & Usage
305
- </br >
306
- ### Prerequisites
307
- - Docker Installed On Your System.
308
- - Docker Compose Installed On Your System.
309
- - ` .env ` File With Required Environment Variables.
310
-
311
- ### Docker Commands
312
-
313
- 1 . ** Build & Run The Application**
314
- ``` bash
315
- # Build & Start All Services
316
- docker compose up --build
317
-
318
- # Run In Detached Mode (Background)
319
- docker compose up -d --build
320
- ```
321
-
322
- 2 . ** Stop The Application**
323
- ``` bash
324
- # Stop All Services
325
- docker compose down
326
-
327
- # Stop And Remove Volumes
328
- docker compose down -v
329
- ```
330
-
331
- 3 . ** View Logs**
332
- ``` bash
333
- # View Logs Of All Services
334
- docker compose logs
335
-
336
- # Follow Logs In Real-Time
337
- docker compose logs -f
338
-
339
- # View logs Of Specific Service
340
- docker compose logs app
341
- docker compose logs mongodb
342
- ```
343
-
344
- 4 . ** Container Management**
345
- ``` bash
346
- # List Running Containers
347
- docker compose ps
348
-
349
- # Restart Services
350
- docker compose restart
351
-
352
- # Restart Specific Service
353
- docker compose restart app
354
- ```
355
-
356
- ### Project Structure
357
- - ` Dockerfile ` : Multi-Stage Build Configuration For The Next.js Application.
358
- - ` compose.yaml ` : Docker Compose Configuration Defining Services:
359
- - ` app ` : Next.js Application Service.
360
- - ` mongodb ` : MongoDB Database Service.
361
- - ` nginx ` : Reverse Proxy Service. (If Configured)
362
-
363
- ### Environment Variables
364
- Make Sure to Create a ` .env ` File In The Project Root With The Following Variables:
365
- ``` plaintext
366
- # Required Environment Variables For The Application
367
- NODE_ENV=production
368
- MONGODB_URI=mongodb://mongodb:27017/rupantor
369
- # Add Other Required Environment Variables
265
+ NEXT_PUBLIC_CLERK_SIGN_IN_URL=
266
+ NEXT_PUBLIC_CLERK_SIGN_UP_URL=
267
+ NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=
268
+ NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=
269
+ MONGODB_URL=
270
+ NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=
271
+ CLERK_SECRET_KEY=
272
+ WEBHOOK_SECRET=
273
+ NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=
274
+ NEXT_PUBLIC_CLOUDINARY_API_KEY=
275
+ NEXT_PUBLIC_CLOUDINARY_API_SECRET=
276
+ NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET=
277
+ NEXT_PUBLIC_CLOUDINARY_BUCKET_NAME=
278
+ NEXT_PUBLIC_STRIPE_WEBHOOK_CHECKOUT_URL=
279
+ NEXT_PUBLIC_STRIPE_SECRET_KEY=
280
+ NEXT_PUBLIC_STRIPE_WEBHOOK_SECRET=
281
+ NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=
370
282
```
371
283
372
284
### Networking
@@ -2885,37 +2797,114 @@ FROM node:18-alpine AS builder
2885
2797
2886
2798
WORKDIR / app
2887
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
+
2888
2838
# COPYING package .json & package - lock .json (IF EXISTS ) FOR DPENDANCY INSTALLATION
2889
- COPY package * .json ./
2839
+ COPY package .json ./
2840
+ COPY package - lock .json ./
2890
2841
2891
- # INSTALLING DEPENDENCIES
2892
- RUN npm install
2842
+ # CACHE CLEANING & INSTALLING DEPENDENCIES
2843
+ RUN npm cache clean -- force && \
2844
+ npm install -- legacy - peer - deps
2893
2845
2894
2846
# COPING REST ESSENTIALS OF THIS APP
2895
2847
COPY . .
2896
2848
2897
2849
# PRODUCTION BUILD FOR THIS APP
2898
- RUN npm run build
2850
+ RUN npm run build : prod
2899
2851
2900
2852
# STAGE - 2 : FINAL DOCKER IMAGE BUILDS FOR THIS APP
2901
2853
FROM node : 18 -alpine AS runner
2902
2854
2903
2855
WORKDIR / app
2904
2856
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
+
2905
2876
# COPY ESSENTIALS FROM BUILDER ' S STAGE
2906
2877
COPY -- from = builder / app / package .json ./ package .json
2878
+ COPY -- from = builder / app / package - lock .json ./ package - lock .json
2907
2879
COPY -- from = builder / app / .next ./ .next
2908
2880
COPY -- from = builder / app / public ./ public
2909
2881
COPY -- from = builder / app / node_modules ./ node_modules
2910
2882
2911
2883
# PORT EXPOSING FOR APP ACCESS
2912
2884
EXPOSE 3000
2913
2885
2914
- # SETTING ENVIRONMENT VARIABLE FOR PRODUCTION
2915
- ENV PORT 3000
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
2916
2905
2917
2906
# RUN THIS APP IN PRODUCTION MODE
2918
- CMD [" npm" , " start" ]
2907
+ CMD [" npm" , " run " , " start:prod " ]
2919
2908
2920
2909
` ` `
2921
2910
@@ -2937,8 +2926,6 @@ services:
2937
2926
- " 3000:3000" # EXPOSING PORT FOR INTERNAL COMMUNICATIONS
2938
2927
env_file :
2939
2928
- .env
2940
- environment :
2941
- - NODE_ENV = production
2942
2929
depends_on :
2943
2930
mongodb :
2944
2931
condition : service_healthy
0 commit comments