This commit is contained in:
2025-11-04 16:05:36 +05:00
parent e3e81e2ff9
commit 06c9ea171b
6 changed files with 103 additions and 22 deletions

12
.dockerignore Normal file
View File

@@ -0,0 +1,12 @@
node_modules
dist
.git
.gitignore
.env.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.DS_Store
*.md
.vscode
.idea

12
.env
View File

@@ -1 +1,11 @@
VITE_API_URL=https://simple-travel.felixits.uz/api/v1/ # API Configuration
VITE_API_URL=https://simple-travel.felixits.uz/api/v1/
VITE_API_TIMEOUT=30000
# App Configuration
VITE_APP_NAME=simple-travel-admin
VITE_APP_VERSION=1.0.0
# Environment
NODE_ENV=production

11
.env.production Normal file
View File

@@ -0,0 +1,11 @@
# API Configuration
VITE_API_URL=https://simple-travel.felixits.uz/api/v1/
VITE_API_TIMEOUT=30000
# App Configuration
VITE_APP_NAME=simple-travel-admin
VITE_APP_VERSION=1.0.0
# Environment
NODE_ENV=production

View File

@@ -1,13 +1,20 @@
FROM node:20-alpine AS builder # Build stage
WORKDIR /app
COPY package*.json ./
RUN npm install --legacy-peer-deps
COPY . .
RUN npm run build
FROM node:20-alpine FROM node:20-alpine
WORKDIR /app WORKDIR /app
COPY --from=builder /app/dist ./dist
RUN npm install -g serve # Copy dependencies
EXPOSE 3000 COPY package.json package-lock.json* ./
CMD ["serve", "-s", "dist"]
RUN npm ci --legacy-peer-deps
# Copy all source
COPY . .
# Set production env (agar .env.production bolsa ishlaydi)
ENV NODE_ENV=production
# Build for production
RUN npm run build
ENTRYPOINT npm run preview

View File

@@ -1,12 +1,20 @@
version: "3.9"
services: services:
frontend: simple-travel-admin:
image: muhammadvadud/simple-travel-front-admin:latest build:
build: . context: .
dockerfile: Dockerfile
args:
- VITE_API_URL=${VITE_API_URL}
- VITE_APP_NAME=${VITE_APP_NAME}
container_name: simple-travel-admin
ports: ports:
- "5263:3000" - "5263:4173"
deploy: env_file:
replicas: 2 - .env.production
restart_policy: restart: unless-stopped
condition: on-failure networks:
- network
networks:
network:
driver: bridge

33
nginx/nginx.conf Normal file
View File

@@ -0,0 +1,33 @@
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
# Gzip compression
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml+rss application/javascript application/json;
# Security headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
# React Router support
location / {
try_files $uri $uri/ /index.html;
}
# Cache static assets
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# Don't cache index.html
location = /index.html {
add_header Cache-Control "no-cache, no-store, must-revalidate";
}
}