-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathswitch-mode.sh
More file actions
executable file
·189 lines (153 loc) · 5.62 KB
/
switch-mode.sh
File metadata and controls
executable file
·189 lines (153 loc) · 5.62 KB
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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
#!/bin/bash
# Script to switch between production and development modes
MODE=$1
if [ "$MODE" != "dev" ] && [ "$MODE" != "prod" ]; then
echo "Usage: ./switch-mode.sh [dev|prod]"
echo " dev: Switch to development mode"
echo " prod: Switch to production mode"
exit 1
fi
# Make backup copies of the configuration files
cp Dockerfile Dockerfile.bak
cp docker-compose.yml docker-compose.yml.bak
if [ "$MODE" = "dev" ]; then
echo "Switching to development mode..."
# Create new Dockerfile with development settings
cat > Dockerfile << 'EOF'
# Use official Node.js image
FROM node:18
WORKDIR /app
# Install deps early (cache optimized)
COPY package.json package-lock.json* pnpm-lock.yaml* ./
RUN npm install
# Copy full app source
COPY . .
# =====================================================
# PRODUCTION BUILD STEP
# Uncomment for production mode and comment for development mode
# =====================================================
# Build the Next.js app
# RUN npm run build
# =====================================================
# ENVIRONMENT SETUP
# Toggle between production and development as needed
# =====================================================
# For production mode, uncomment:
# ENV NODE_ENV=production
# For development mode, uncomment:
ENV NODE_ENV=development
# Generate Prisma Client for Linux ARM inside Docker
RUN npx prisma generate
# Make sure Node process can write to the /app/prisma directory
RUN chmod -R a+rwX /app/prisma
# Expose app port
EXPOSE 3000
# =====================================================
# DEFAULT START COMMAND
# The actual command can be overridden in docker-compose.yml
# =====================================================
# This command starts the production server
CMD ["npm", "start"]
# For development server, override in docker-compose.yml with: npm run dev
EOF
# Create new docker-compose.yml with development settings
cat > docker-compose.yml << 'EOF'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=file:/app/prisma/production.db
# =====================================================
# DEVELOPMENT MODE CONFIGURATION
# Uncomment these lines for development mode
# =====================================================
volumes:
- .:/app
- /app/node_modules # Don't override node_modules
- /app/.next # Don't override .next directory
command: npm run dev # Run in development mode
# =====================================================
# PRODUCTION MODE CONFIGURATION
# Uncomment these lines for production mode and comment out the development section above
# =====================================================
# volumes:
# - ./src:/app/src # Only mount source code
# - ./public:/app/public # For public assets
# - ./prisma:/app/prisma # For database files
# Command is not needed here as it will use the default from Dockerfile (npm start)
EOF
elif [ "$MODE" = "prod" ]; then
echo "Switching to production mode..."
# Create new Dockerfile with production settings
cat > Dockerfile << 'EOF'
# Use official Node.js image
FROM node:18
WORKDIR /app
# Install deps early (cache optimized)
COPY package.json package-lock.json* pnpm-lock.yaml* ./
RUN npm install
# Copy full app source
COPY . .
# =====================================================
# PRODUCTION BUILD STEP
# Uncomment for production mode and comment for development mode
# =====================================================
# Build the Next.js app
RUN npm run build
# =====================================================
# ENVIRONMENT SETUP
# Toggle between production and development as needed
# =====================================================
# For production mode, uncomment:
ENV NODE_ENV=production
# For development mode, uncomment:
# ENV NODE_ENV=development
# Generate Prisma Client for Linux ARM inside Docker
RUN npx prisma generate
# Make sure Node process can write to the /app/prisma directory
RUN chmod -R a+rwX /app/prisma
# Expose app port
EXPOSE 3000
# =====================================================
# DEFAULT START COMMAND
# The actual command can be overridden in docker-compose.yml
# =====================================================
# This command starts the production server
CMD ["npm", "start"]
# For development server, override in docker-compose.yml with: npm run dev
EOF
# Create new docker-compose.yml with production settings
cat > docker-compose.yml << 'EOF'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=file:/app/prisma/production.db
# =====================================================
# DEVELOPMENT MODE CONFIGURATION
# Uncomment these lines for development mode
# =====================================================
# volumes:
# - .:/app
# - /app/node_modules # Don't override node_modules
# - /app/.next # Don't override .next directory
# command: npm run dev # Run in development mode
# =====================================================
# PRODUCTION MODE CONFIGURATION
# Uncomment these lines for production mode and comment out the development section above
# =====================================================
volumes:
- ./src:/app/src # Only mount source code
- ./public:/app/public # For public assets
- ./prisma:/app/prisma # For database files
# Command is not needed here as it will use the default from Dockerfile (npm start)
EOF
fi
echo "Configuration updated. Please rebuild your Docker containers:"
echo " docker compose down"
echo " docker compose build"
echo " docker compose up"