small prod changes
This commit is contained in:
@@ -22,6 +22,7 @@ jobs:
|
||||
run: |
|
||||
cd client
|
||||
docker build \
|
||||
--target production-stage \
|
||||
--build-arg VITE_API_URL=${{ vars.VITE_API_URL }} \
|
||||
-t ${{ vars.REGISTRY_URL }}/zen-kanji-client:latest .
|
||||
docker push ${{ vars.REGISTRY_URL }}/zen-kanji-client:latest
|
||||
|
||||
@@ -1,15 +1,31 @@
|
||||
FROM node:24-alpine AS dev-stage
|
||||
# Stage 1: Build the Application
|
||||
FROM node:20-alpine AS build-stage
|
||||
WORKDIR /app
|
||||
|
||||
ARG VITE_API_URL
|
||||
ENV VITE_API_URL=$VITE_API_URL
|
||||
|
||||
COPY package*.json ./
|
||||
|
||||
RUN npm ci
|
||||
COPY . .
|
||||
|
||||
RUN npm run build
|
||||
|
||||
FROM node:20-alpine AS dev-stage
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm ci
|
||||
COPY . .
|
||||
EXPOSE 5173
|
||||
CMD ["npm", "run", "dev", "--", "--host"]
|
||||
|
||||
FROM dev-stage AS build-stage
|
||||
ARG VITE_API_URL
|
||||
ENV VITE_API_URL=$VITE_API_URL
|
||||
RUN npm run build
|
||||
FROM nginx:alpine AS production-stage
|
||||
RUN mkdir -p /run/nginx
|
||||
|
||||
COPY --from=build-stage /app/dist /usr/share/nginx/html
|
||||
|
||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||
|
||||
EXPOSE 80
|
||||
|
||||
CMD ["nginx", "-g", "daemon off;"]
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
||||
<title>Zen Kanji</title>
|
||||
<link rel="icon" type="image/x-icon" href="/assets/favicon.ico">
|
||||
<link rel="icon" type="image/x-icon" href="/src/assets/favicon.ico">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
16
client/nginx.conf
Normal file
16
client/nginx.conf
Normal file
@@ -0,0 +1,16 @@
|
||||
server {
|
||||
listen 80;
|
||||
server_name localhost;
|
||||
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, no-transform";
|
||||
}
|
||||
}
|
||||
@@ -18,15 +18,15 @@ export default defineConfig(({ mode }) => {
|
||||
},
|
||||
server: {
|
||||
allowedHosts: [
|
||||
env.VITE_HOST,
|
||||
'localhost',
|
||||
],
|
||||
host: true,
|
||||
port: 5173,
|
||||
strictPort: true,
|
||||
hmr: {
|
||||
host: env.VITE_HOST,
|
||||
protocol: 'wss',
|
||||
clientPort: 443,
|
||||
host: 'localhost',
|
||||
protocol: 'ws',
|
||||
clientPort: 5173,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
33
docker-compose.dev.yml
Normal file
33
docker-compose.dev.yml
Normal file
@@ -0,0 +1,33 @@
|
||||
services:
|
||||
mongo:
|
||||
image: mongo:6
|
||||
container_name: zen_mongo
|
||||
restart: always
|
||||
ports:
|
||||
- "27017:27017"
|
||||
volumes:
|
||||
- mongo-data:/data/db
|
||||
networks:
|
||||
- zen-network
|
||||
|
||||
server:
|
||||
depends_on:
|
||||
- mongo
|
||||
environment:
|
||||
- MONGO_URI=mongodb://mongo:27017/zenkanji
|
||||
volumes:
|
||||
- ./server:/app
|
||||
- /app/node_modules
|
||||
ports:
|
||||
- "3000:3000"
|
||||
command: npm run dev
|
||||
|
||||
client:
|
||||
build:
|
||||
target: dev-stage
|
||||
ports:
|
||||
- "5173:5173"
|
||||
volumes:
|
||||
- ./client:/app
|
||||
- /app/node_modules
|
||||
command: npm run dev -- --host
|
||||
0
docker-compose.prod.yml
Normal file
0
docker-compose.prod.yml
Normal file
@@ -1,47 +1,23 @@
|
||||
services:
|
||||
mongo:
|
||||
image: mongo:6
|
||||
container_name: zen_mongo
|
||||
restart: always
|
||||
ports:
|
||||
- "27017:27017"
|
||||
volumes:
|
||||
- mongo-data:/data/db
|
||||
networks:
|
||||
- zen-network
|
||||
|
||||
server:
|
||||
build: ./server
|
||||
build:
|
||||
context: ./server
|
||||
container_name: zen_server
|
||||
restart: always
|
||||
ports:
|
||||
- "3000:3000"
|
||||
env_file:
|
||||
- .env
|
||||
depends_on:
|
||||
- mongo
|
||||
- ./server/.env
|
||||
networks:
|
||||
- zen-network
|
||||
volumes:
|
||||
- ./server:/app
|
||||
- /app/node_modules
|
||||
|
||||
client:
|
||||
build:
|
||||
context: ./client
|
||||
target: dev-stage
|
||||
container_name: zen_client
|
||||
ports:
|
||||
- "5173:5173"
|
||||
env_file:
|
||||
- .env
|
||||
- ./client/.env
|
||||
depends_on:
|
||||
- server
|
||||
networks:
|
||||
- zen-network
|
||||
volumes:
|
||||
- ./client:/app
|
||||
- /app/node_modules
|
||||
|
||||
volumes:
|
||||
mongo-data:
|
||||
|
||||
@@ -17,10 +17,20 @@ const allowedOrigins = [
|
||||
'capacitor://localhost',
|
||||
'https://10.0.2.2:5173',
|
||||
'http://localhost:5173'
|
||||
];
|
||||
].filter(Boolean).map(uri => uri.replace(/\/$/, ''));
|
||||
|
||||
await fastify.register(cors, {
|
||||
origin: allowedOrigins,
|
||||
origin: (origin, cb) => {
|
||||
if (!origin) return cb(null, true);
|
||||
|
||||
if (allowedOrigins.includes(origin)) {
|
||||
return cb(null, true);
|
||||
}
|
||||
|
||||
console.log(`CORS BLOCKED: Browser sent "${origin}". Allowed list:`, allowedOrigins);
|
||||
|
||||
cb(new Error("Not allowed by CORS"));
|
||||
},
|
||||
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
|
||||
credentials: true
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user