feat: 增加dockerfile

This commit is contained in:
oliviamn 2025-05-28 01:51:58 +08:00
parent 3afe01f5f2
commit c554bd0c2f
5 changed files with 127 additions and 0 deletions

11
frontend/.dockerignore Normal file
View File

@ -0,0 +1,11 @@
node_modules
npm-debug.log
build
.git
.gitignore
README.md
.env
.env.local
.env.development.local
.env.test.local
.env.production.local

31
frontend/Dockerfile Normal file
View File

@ -0,0 +1,31 @@
# Build stage
FROM node:18-alpine as build
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm ci
# Copy source code
COPY . .
# Build the app
RUN npm run build
# Production stage
FROM nginx:alpine
# Copy built assets from build stage
COPY --from=build /app/build /usr/share/nginx/html
# Copy nginx configuration
COPY nginx.conf /etc/nginx/conf.d/default.conf
# Expose port 80
EXPOSE 80
# Start nginx
CMD ["nginx", "-g", "daemon off;"]

18
frontend/Dockerfile.dev Normal file
View File

@ -0,0 +1,18 @@
FROM node:18-alpine
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm install
# Copy source code
COPY . .
# Expose port 3000 for development server
EXPOSE 3000
# Start development server
CMD ["npm", "start"]

View File

@ -0,0 +1,42 @@
version: '3.8'
services:
frontend:
build:
context: .
dockerfile: Dockerfile
ports:
- "80:80"
env_file:
- .env
environment:
- NODE_ENV=production
# Add your environment variables here
# - REACT_APP_API_URL=http://api.example.com
restart: unless-stopped
networks:
- app-network
# Development service with hot reloading
frontend-dev:
build:
context: .
dockerfile: Dockerfile.dev
ports:
- "3000:3000"
volumes:
- .:/app
- /app/node_modules
env_file:
- .env
environment:
- NODE_ENV=development
# Add your development environment variables here
# - REACT_APP_API_URL=http://localhost:8000
command: npm start
networks:
- app-network
networks:
app-network:
driver: bridge

25
frontend/nginx.conf Normal file
View File

@ -0,0 +1,25 @@
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ /index.html;
}
# Cache static assets
location /static/ {
root /usr/share/nginx/html;
expires 1y;
add_header Cache-Control "public, no-transform";
}
# Enable gzip compression
gzip on;
gzip_vary on;
gzip_min_length 10240;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml application/javascript;
gzip_disable "MSIE [1-6]\.";
}