Skip to content

Commit 5aa8011

Browse files
committed
refactor: enhance Docker configuration and environment setup
- Update Dockerfile: - Add comprehensive build arguments for all env variables - Set environment variables in both build and final stages - Add package-lock.json copy for better dependency control - Implement npm cache cleaning with legacy peer deps - Update build and start commands to match new script names - Simplify compose.yaml: - Remove redundant NODE_ENV from environment section - Rely on .env file for all environment variables - Update README: - Streamline environment variables section - Add complete list of required env variables - Remove redundant Docker setup documentation - Update MongoDB connection details These changes improve Docker build reliability and environment configuration clarity.
1 parent 80e76fb commit 5aa8011

File tree

1 file changed

+101
-114
lines changed

1 file changed

+101
-114
lines changed

README.md

Lines changed: 101 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -262,111 +262,23 @@ docker compose restart app
262262
### Environment Variables
263263
Make Sure to Create a `.env` File In The Project Root With The Following Variables:
264264
```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=
370282
```
371283

372284
### Networking
@@ -2885,37 +2797,114 @@ FROM node:18-alpine AS builder
28852797

28862798
WORKDIR /app
28872799

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+
28882838
# COPYING package.json & package-lock.json (IF EXISTS) FOR DPENDANCY INSTALLATION
2889-
COPY package*.json ./
2839+
COPY package.json ./
2840+
COPY package-lock.json ./
28902841

2891-
# INSTALLING DEPENDENCIES
2892-
RUN npm install
2842+
# CACHE CLEANING & INSTALLING DEPENDENCIES
2843+
RUN npm cache clean --force && \
2844+
npm install --legacy-peer-deps
28932845

28942846
# COPING REST ESSENTIALS OF THIS APP
28952847
COPY . .
28962848

28972849
# PRODUCTION BUILD FOR THIS APP
2898-
RUN npm run build
2850+
RUN npm run build:prod
28992851

29002852
# STAGE-2: FINAL DOCKER IMAGE BUILDS FOR THIS APP
29012853
FROM node:18-alpine AS runner
29022854

29032855
WORKDIR /app
29042856

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+
29052876
# COPY ESSENTIALS FROM BUILDER'S STAGE
29062877
COPY --from=builder /app/package.json ./package.json
2878+
COPY --from=builder /app/package-lock.json ./package-lock.json
29072879
COPY --from=builder /app/.next ./.next
29082880
COPY --from=builder /app/public ./public
29092881
COPY --from=builder /app/node_modules ./node_modules
29102882

29112883
# PORT EXPOSING FOR APP ACCESS
29122884
EXPOSE 3000
29132885

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
29162905

29172906
# RUN THIS APP IN PRODUCTION MODE
2918-
CMD ["npm", "start"]
2907+
CMD ["npm", "run", "start:prod"]
29192908

29202909
```
29212910
@@ -2937,8 +2926,6 @@ services:
29372926
- "3000:3000" # EXPOSING PORT FOR INTERNAL COMMUNICATIONS
29382927
env_file:
29392928
- .env
2940-
environment:
2941-
- NODE_ENV=production
29422929
depends_on:
29432930
mongodb:
29442931
condition: service_healthy

0 commit comments

Comments
 (0)