Skip to content

Commit

Permalink
Create dockerfile for webapp project
Browse files Browse the repository at this point in the history
  • Loading branch information
prasadhonrao committed Oct 23, 2024
1 parent 1a0ecb2 commit 121ebee
Show file tree
Hide file tree
Showing 14 changed files with 193 additions and 6 deletions.
2 changes: 2 additions & 0 deletions .k8s/emptydir-volume/webapi/install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@ kubectl apply -f configmap.yaml
kubectl apply -f secret.yaml
kubectl apply -f deployment.yaml
kubectl apply -f service-nodeport.yaml
kubectl apply -f service-loadbalancer.yaml

13 changes: 13 additions & 0 deletions .k8s/emptydir-volume/webapi/service-loadbalancer.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
apiVersion: v1
kind: Service
metadata:
name: devcamper-webapi-loadbalancer-service
namespace: devcamper-namespace
spec:
type: LoadBalancer
ports:
- protocol: TCP
port: 8081
targetPort: 5000
selector:
app: devcamper-webapi
2 changes: 1 addition & 1 deletion .k8s/emptydir-volume/webapi/service-nodeport.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ spec:
- protocol: TCP
port: 80
targetPort: 5000
nodePort: 32018
nodePort: 32002
selector:
app: devcamper-webapi
3 changes: 2 additions & 1 deletion .k8s/emptydir-volume/webapi/uninstall.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@
kubectl delete -f configmap.yaml
kubectl delete -f secret.yaml
kubectl delete -f deployment.yaml
kubectl delete -f service-nodeport.yaml
kubectl delete -f service-nodeport.yaml
kubectl delete -f service-loadbalancer.yaml
7 changes: 7 additions & 0 deletions .k8s/emptydir-volume/webapp/configmap.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: devcamper-webapp-configmap
namespace: devcamper-namespace
data:
react_app_devcamper_base_api_uri: 'http://devcamper-webapi-nodeport-service.devcamper-namespace.svc.cluster.local:32002'
33 changes: 33 additions & 0 deletions .k8s/emptydir-volume/webapp/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: devcamper-webapp-deployment
namespace: devcamper-namespace
spec:
replicas: 1
selector:
matchLabels:
app: devcamper-webapp
template:
metadata:
labels:
app: devcamper-webapp
spec:
containers:
- name: devcamper-webapp-container
image: prasadhonrao/devcamper-webapp:latest
ports:
- containerPort: 3000
env:
- name: REACT_APP_DEVCAMPER_BASE_API_URI
valueFrom:
configMapKeyRef:
name: devcamper-webapp-configmap
key: react_app_devcamper_base_api_uri
resources:
limits:
memory: '2Gi'
cpu: '2'
requests:
memory: '1Gi'
cpu: '1'
4 changes: 4 additions & 0 deletions .k8s/emptydir-volume/webapp/install.sh
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
#!bin/bash
kubectl apply -f configmap.yaml
kubectl apply -f deployment.yaml
kubectl apply -f service-nodeport.yaml
kubectl apply -f service-loadbalancer.yaml
13 changes: 13 additions & 0 deletions .k8s/emptydir-volume/webapp/service-loadbalancer.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
apiVersion: v1
kind: Service
metadata:
name: devcamper-webapp-loadbalancer-service
namespace: devcamper-namespace
spec:
type: LoadBalancer
ports:
- protocol: TCP
port: 8080
targetPort: 3000
selector:
app: devcamper-webapp
14 changes: 14 additions & 0 deletions .k8s/emptydir-volume/webapp/service-nodeport.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
apiVersion: v1
kind: Service
metadata:
name: devcamper-webapp-nodeport-service
namespace: devcamper-namespace
spec:
type: NodePort
ports:
- protocol: TCP
port: 80
targetPort: 3000
nodePort: 32001
selector:
app: devcamper-webapp
4 changes: 4 additions & 0 deletions .k8s/emptydir-volume/webapp/uninstall.sh
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
#!bin/bash
kubectl delete -f configmap.yaml
kubectl delete -f deployment.yaml
kubectl delete -f service-nodeport.yaml
kubectl delete -f service-loadbalancer.yaml
40 changes: 40 additions & 0 deletions docker/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Web App Configuration
WEBAPP_PORT=3000
REACT_APP_DEVCAMPER_BASE_API_URI=http://localhost

# Server configuration
port=5000
node_env=development

# Database configuration
mongodb_host=localhost
mongodb_port=27017
mongodb_username=admin
mongodb_password=password
mongodb_db_name=devcamper-db
mongodb_db_params=authSource=admin

# Geocoder configuration
geocoder_provider=mapquest
geocoder_api_key=m5SpLGTkplsHrlCYbX9Yj5LOiALoK5o1

# File upload configuration
file_upload_path=../ui/public/images
max_file_upload=1000000

# JWT configuration
jwt_secret=jwt123
jwt_expire=30d
jwt_cookie_expire=30

# Email configuration
smtp_host=sandbox.smtp.mailtrap.io
smtp_port=2525
smtp_email=b672b25167e875
smtp_password=208334e8a6a9d8
from_email=[email protected]
from_name=DevCamper

# Rate limiting configuration
rate_limit_window=100
rate_limit_max=1000
16 changes: 16 additions & 0 deletions docker/docker-compose-mongo.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
version: '3.8'

services:
mongo:
image: mongo
container_name: devcamper-db
ports:
- 27017:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=password
volumes:
- mongo-data:/data/db

volumes:
mongo-data:
18 changes: 14 additions & 4 deletions api/docker-compose.yml → docker/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
version: '3.8'

services:
api:
webapp:
image: prasadhonrao/devcamper-webapp:latest
ports:
- '${WEBAPP_PORT}:3000'
environment:
- REACT_APP_DEVCAMPER_BASE_API_URI={REACT_APP_DEVCAMPER_BASE_API_URI} + ':' + ${WEBAPP_PORT}
depends_on:
- webapi
webapi:
image: prasadhonrao/devcamper-webapi:latest
ports:
- '${port}:${port}'
Expand Down Expand Up @@ -31,11 +39,13 @@ services:
- rate_limit_window_ms=${rate_limit_window_ms}
depends_on:
- mongo

mongo:
image: mongo:latest
image: mongo
ports:
- '27017:27017'
- 27017:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=${MONGO_INITDB_ROOT_USERNAME}
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD}
volumes:
- mongo-data:/data/db

Expand Down
30 changes: 30 additions & 0 deletions ui/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Use the official Node.js image as the base image
FROM node:14-alpine

# Set the working directory
WORKDIR /app

# Copy package.json and package-lock.json
COPY package*.json ./

# Install dependencies
RUN npm install

# Copy the rest of the application code
COPY . .

# Set build-time environment variables
ARG REACT_APP_DEVCAMPER_BASE_API_URI
ENV REACT_APP_DEVCAMPER_BASE_API_URI=${REACT_APP_DEVCAMPER_BASE_API_URI}

# Build the React application
RUN npm run build

# Install a simple HTTP server to serve the static files
RUN npm install -g serve

# Expose the port the app runs on
EXPOSE 3000

# Start the application
CMD ["serve", "-s", "build", "-l", "3000"]

0 comments on commit 121ebee

Please sign in to comment.