-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathDockerfile
173 lines (130 loc) · 4.2 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# # # # # FROM node:18-alpine
# # # # # WORKDIR /app
# # # # # COPY package*.json ./
# # # # # RUN npm install
# # # # # COPY . .
# # # # # # Build the React app
# # # # # RUN npm run build
# # # # # # Install serve to run the built app
# # # # # RUN npm install -g serve
# # # # # EXPOSE 3000
# # # # # # # Serve the built app
# # # # # CMD ["serve", "-s", "build", "-l", "3000"]
# # # # # Build stage
# # # # FROM node:18-alpine AS builder
# # # # WORKDIR /app
# # # # COPY package*.json ./
# # # # RUN npm install --legacy-peer-deps
# # # # COPY . .
# # # # RUN npm run build
# # # # # Production stage
# # # # FROM nginx:alpine
# # # # COPY --from=builder /app/build /usr/share/nginx/html
# # # # COPY nginx.conf /etc/nginx/conf.d/default.conf
# # # # RUN npm install -g serve
# # # # EXPOSE 3000
# # # # # # Serve the built app
# # # # CMD ["serve", "-s", "build", "-l", nginx", "-g", "daemon off" ,3000"]
# # # # Build stage
# # # FROM node:18-alpine AS builder
# # # WORKDIR /app
# # # # Copy package files
# # # COPY package*.json ./
# # # # First remove package-lock.json to avoid conflicts
# # # RUN rm -f package-lock.json
# # # # Install dependencies
# # # RUN npm install
# # # # Copy source code
# # # COPY . .
# # # # Build the application
# # # RUN npm run build
# # # # Production stage
# # # FROM nginx:alpine
# # # # Copy built assets from builder stage
# # # COPY --from=builder /app/build /usr/share/nginx/html
# # # # Copy nginx configuration
# # # COPY nginx.conf /etc/nginx/conf.d/default.conf
# # # # Expose port 80 for nginx
# # # EXPOSE 80
# # # # Start nginx in foreground
# # # CMD ["nginx", "-g", "daemon off;"]
# # # Build stage
# # FROM node:18-alpine AS builder
# # WORKDIR /app
# # # Copy package files
# # COPY package*.json ./
# # # First remove package-lock.json to avoid conflicts
# # RUN rm -f package-lock.json
# # # Install dependencies with legacy peer deps
# # RUN npm install --legacy-peer-deps
# # # Copy source code
# # COPY . .
# # # Build the application
# # RUN npm run build
# # # Production stage
# # FROM nginx:alpine
# # # Copy built assets from builder stage
# # COPY --from=builder /app/build /usr/share/nginx/html
# # # Copy nginx configuration
# # COPY nginx.conf /etc/nginx/conf.d/default.conf
# # # Expose port 80 for nginx
# # EXPOSE 80
# # # Start nginx in foreground
# # CMD ["nginx", "-g", "daemon off;"]
FROM node:18-alpine AS builder
WORKDIR /app
# Copy package files
COPY package*.json ./
# Clean install with specific resolutions
RUN npm cache clean --force && \
rm -f package-lock.json && \
npm install --legacy-peer-deps --force
# Copy source code
COPY . .
# Set environment variable to skip optional dependencies
ENV SKIP_OPTIONAL_DEPENDENCIES=true
# Build with specific dependency versions
RUN npm install --save --legacy-peer-deps \
ajv@^6.12.6 \
ajv-keywords@^3.5.2 && \
npm run build
# Production stage
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 3000
CMD ["nginx", "-g", "daemon off;"]
# FROM node:18-alpine AS builder
# WORKDIR /app
# # Copy package files
# COPY package*.json ./
# # Clean install with specific resolutions
# RUN npm cache clean --force && \
# rm -f package-lock.json && \
# npm install --legacy-peer-deps --force
# # Copy source code
# COPY . .
# # Set environment variable to skip optional dependencies
# ENV SKIP_OPTIONAL_DEPENDENCIES=true
# # Build with specific dependency versions
# RUN npm install --save --legacy-peer-deps \
# ajv@^6.12.6 \
# ajv-keywords@^3.5.2 && \
# npm run build
# # Production stage
# FROM nginx:alpine
# # Create nginx user if it doesn't exist
# RUN adduser -D -H -u 101 -s /sbin/nologin nginx
# COPY --from=builder /app/build /usr/share/nginx/html
# COPY nginx.conf /etc/nginx/conf.d/default.conf
# # Set proper permissions
# RUN chown -R nginx:nginx /usr/share/nginx/html && \
# chmod -R 755 /usr/share/nginx/html && \
# chown -R nginx:nginx /var/cache/nginx && \
# chown -R nginx:nginx /var/log/nginx && \
# chown -R nginx:nginx /etc/nginx/conf.d && \
# touch /var/run/nginx.pid && \
# chown -R nginx:nginx /var/run/nginx.pid
# USER nginx
# EXPOSE 3000
# CMD ["nginx", "-g", "daemon off;"]