diff --git a/backend/Dockerfile b/backend/Dockerfile index 16fe12f..8ae3caa 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -14,6 +14,23 @@ RUN npm install # 소스 코드 복사 COPY . . +# 환경변수 설정 (Docker 환경용) +ENV NODE_ENV=production +ENV POSTGRES_HOST=192.168.11.46 +ENV POSTGRES_PORT=5431 +ENV POSTGRES_USER=genome +ENV POSTGRES_PASSWORD=genome1@3 +ENV POSTGRES_DB=genome_db +ENV POSTGRES_SYNCHRONIZE=false +ENV POSTGRES_LOGGING=false +ENV REDIS_URL=redis://192.168.11.46:6379 +ENV REDIS_HOST=192.168.11.46 +ENV REDIS_PORT=6379 +ENV JWT_SECRET=your-super-secret-jwt-key-change-this-in-production +ENV JWT_EXPIRES_IN=24h +ENV JWT_REFRESH_SECRET=your-refresh-token-secret +ENV JWT_REFRESH_EXPIRES_IN=7d + # NestJS 빌드 RUN npm run build diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml deleted file mode 100644 index e707b79..0000000 --- a/docker-compose.dev.yml +++ /dev/null @@ -1,89 +0,0 @@ -version: '3.8' - -services: - frontend: - build: - context: ./frontend - dockerfile: Dockerfile - container_name: nextjs-app - ports: - - "3000:3000" - environment: - - NODE_ENV=development - - NEXT_PUBLIC_API_URL=/backend/api - volumes: - - ./frontend:/app - - /app/node_modules - depends_on: - - backend - networks: - - app-network - - backend: - build: - context: ./backend - dockerfile: Dockerfile - container_name: nestjs-app - ports: - - "4000:4000" - environment: - - NODE_ENV=development - - DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB} - - POSTGRES_HOST=postgres - - REDIS_URL=redis://redis:6379 - - REDIS_HOST=redis - volumes: - - ./backend:/app - - /app/node_modules - depends_on: - - postgres - - redis - networks: - - app-network - - postgres: - image: postgres:15-alpine - container_name: postgres-db - ports: - - "5431:5432" - environment: - - POSTGRES_USER=${POSTGRES_USER} - - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - - POSTGRES_DB=${POSTGRES_DB} - volumes: - - postgres_data:/var/lib/postgresql/data - networks: - - app-network - - redis: - image: redis:7-alpine - container_name: redis-cache - ports: - - "6379:6379" - volumes: - - redis_data:/data - networks: - - app-network - - # nginx: - # image: nginx:alpine - # container_name: nginx-proxy - # ports: - # - "80:80" - # - "443:443" - # volumes: - # - ./nginx/nginx.conf:/etc/nginx/nginx.conf - # - ./nginx/ssl:/etc/nginx/ssl - # depends_on: - # - frontend - # - backend - # networks: - # - app-network - -volumes: - postgres_data: - redis_data: - -networks: - app-network: - driver: bridge \ No newline at end of file diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml deleted file mode 100644 index c60e243..0000000 --- a/docker-compose.prod.yml +++ /dev/null @@ -1,80 +0,0 @@ -version: '3.8' - -services: - frontend: - build: - context: ./frontend - dockerfile: Dockerfile.prod - container_name: nextjs-app-prod - environment: - - NODE_ENV=production - - NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL:-https://your-domain.com} - depends_on: - - backend - networks: - - app-network - - backend: - build: - context: ./backend - dockerfile: Dockerfile.prod - container_name: nestjs-app-prod - environment: - - NODE_ENV=production - - DATABASE_URL=postgresql://${POSTGRES_USER:-prod_user}:${POSTGRES_PASSWORD:-CHANGE_THIS_STRONG_PASSWORD}@postgres:5432/${POSTGRES_DB:-prod_db} - - REDIS_URL=redis://redis:${REDIS_PORT:-6379} - - JWT_SECRET=${JWT_SECRET:-SUPER_SECURE_JWT_SECRET_AT_LEAST_32_CHARACTERS_LONG} - - JWT_EXPIRES_IN=${JWT_EXPIRES_IN:-1h} - - CORS_ORIGIN=${CORS_ORIGIN:-https://your-domain.com} - - RATE_LIMIT_WINDOW_MS=${RATE_LIMIT_WINDOW_MS:-900000} - - RATE_LIMIT_MAX_REQUESTS=${RATE_LIMIT_MAX_REQUESTS:-50} - depends_on: - - postgres - - redis - networks: - - app-network - - postgres: - image: postgres:15-alpine - container_name: postgres-db-prod - environment: - - POSTGRES_USER=${POSTGRES_USER:-prod_user} - - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-CHANGE_THIS_STRONG_PASSWORD} - - POSTGRES_DB=${POSTGRES_DB:-prod_db} - volumes: - - postgres_data:/var/lib/postgresql/data - networks: - - app-network - - redis: - image: redis:7-alpine - container_name: redis-cache-prod - environment: - - REDIS_PASSWORD=${REDIS_PASSWORD:-} - volumes: - - redis_data:/data - networks: - - app-network - - nginx: - image: nginx:alpine - container_name: nginx-proxy-prod - ports: - - "${NGINX_HTTP_PORT:-80}:80" - - "${NGINX_HTTPS_PORT:-443}:443" - volumes: - - ./nginx/nginx.conf:/etc/nginx/nginx.conf - - ./nginx/ssl:/etc/nginx/ssl - depends_on: - - frontend - - backend - networks: - - app-network - -volumes: - postgres_data: - redis_data: - -networks: - app-network: - driver: bridge \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index d1dc72e..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,44 +0,0 @@ -version: "3.8" - -services: - postgres: - image: postgres:15-alpine - container_name: postgres-db - ports: - - "${POSTGRES_PORT:-5432}:5432" - environment: - - POSTGRES_USER=${POSTGRES_USER:-postgres} - - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-turbo123} - - POSTGRES_DB=${POSTGRES_DB:-genome_db} - volumes: - - postgres_data:/var/lib/postgresql/data - healthcheck: - test: ["CMD", "pg_isready", "-U", "${POSTGRES_USER:-user}"] - interval: 10s - timeout: 5s - retries: 5 - networks: - - app-network - - redis: - image: redis:7-alpine - container_name: redis-cache - ports: - - "${REDIS_PORT:-6379}:6379" - volumes: - - redis_data:/data - healthcheck: - test: ["CMD", "redis-cli", "ping"] - interval: 10s - timeout: 5s - retries: 5 - networks: - - app-network - -volumes: - postgres_data: - redis_data: - -networks: - app-network: - driver: bridge diff --git a/nginx/nginx.conf b/nginx/nginx.conf deleted file mode 100644 index 7971837..0000000 --- a/nginx/nginx.conf +++ /dev/null @@ -1,45 +0,0 @@ -events { - worker_connections 1024; -} - -http { - upstream frontend { - server frontend:3000; - } - - upstream backend { - server backend:4000; - } - - server { - listen 80; - server_name _; - - # Frontend routes - location / { - proxy_pass http://frontend; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - # Backend API routes - location /api/ { - proxy_pass http://backend/; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - # WebSocket support for Next.js hot reload - location /_next/webpack-hmr { - proxy_pass http://frontend; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_set_header Host $host; - } - } -} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 2c4846f..0000000 --- a/package-lock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "next_nest_docker_template-main", - "lockfileVersion": 3, - "requires": true, - "packages": {} -} diff --git a/postgres/.env b/postgres/.env deleted file mode 100644 index 1d60abc..0000000 --- a/postgres/.env +++ /dev/null @@ -1,102 +0,0 @@ -# ============================================== -# DEVELOPMENT ENVIRONMENT VARIABLES -# ============================================== -# Copy this file to .env.local for local development -# DO NOT commit sensitive values to version control - -# ============================================== -# DATABASE CONFIGURATION -# ============================================== -DATABASE_URL=postgresql://user:password@localhost:5431/genome_db -POSTGRES_HOST=localhost -POSTGRES_USER=postgres -POSTGRES_PASSWORD=turbo123 -POSTGRES_DB=postgres -POSTGRES_PORT=5431 -POSTGRES_SYNCHRONIZE=true -POSTGRES_LOGGING=true - -# ============================================== -# REDIS CONFIGURATION -# ============================================== -REDIS_URL=redis://localhost:6379 -REDIS_HOST=localhost -REDIS_PORT=6379 - -# ============================================== -# BACKEND CONFIGURATION -# ============================================== -BACKEND_PORT=4000 -NODE_ENV=development - -# ============================================== -# JWT AUTHENTICATION -# ============================================== -JWT_SECRET=your-super-secret-jwt-key-change-this-in-production -JWT_EXPIRES_IN=24h -JWT_REFRESH_SECRET=your-refresh-token-secret -JWT_REFRESH_EXPIRES_IN=7d - -# ============================================== -# CORS CONFIGURATION -# ============================================== -CORS_ORIGIN=http://localhost:3000,http://192.168.11.249:3000,http://123.143.174.11:5243 -CORS_CREDENTIALS=true - -# ============================================== -# SECURITY SETTINGS -# ============================================== -RATE_LIMIT_WINDOW_MS=900000 -RATE_LIMIT_MAX_REQUESTS=100 -BCRYPT_SALT_ROUNDS=12 - -# ============================================== -# FILE UPLOAD -# ============================================== -MAX_FILE_SIZE=10485760 -UPLOAD_DESTINATION=./uploads -ALLOWED_FILE_TYPES=jpg,jpeg,png,gif,pdf,doc,docx - -# ============================================== -# EMAIL CONFIGURATION -# ============================================== -SMTP_HOST=smtp.gmail.com -SMTP_PORT=587 -SMTP_SECURE=false -SMTP_USER=your-email@gmail.com -SMTP_PASS=your-app-password -FROM_EMAIL=noreply@yourdomain.com - -# ============================================== -# LOGGING -# ============================================== -LOG_LEVEL=debug -LOG_FORMAT=dev -LOG_FILE_ENABLED=true -LOG_FILE_PATH=./logs - -# ============================================== -# EXTERNAL SERVICES -# ============================================== -# AWS_ACCESS_KEY_ID=your-aws-access-key -# AWS_SECRET_ACCESS_KEY=your-aws-secret -# AWS_REGION=us-east-1 -# AWS_S3_BUCKET=your-bucket-name - -# ============================================== -# MONITORING -# ============================================== -# SENTRY_DSN=your-sentry-dsn -# HEALTH_CHECK_ENABLED=true - -# ============================================== -# FRONTEND CONFIGURATION -# ============================================== -FRONTEND_PORT=3000 -NEXT_PUBLIC_API_URL=http://192.168.11.249:4000 - -# ============================================== -# NGINX CONFIGURATION -# ============================================== -NGINX_HTTP_PORT=80 -NGINX_HTTPS_PORT=443 \ No newline at end of file diff --git a/postgres/docker-compose.yml b/postgres/docker-compose.yml deleted file mode 100644 index ad19641..0000000 --- a/postgres/docker-compose.yml +++ /dev/null @@ -1,47 +0,0 @@ -version: "1.0" -# 개발 편의를 위한 옵션 폴더 -# 개발 편의성 (컨테이너 재빌드 안 함) -# DB PostgreSQL, Redis만 Docker 컨테이너로 실행 -# Frontend/Backend는 로컬에서 직접 실행 -services: - postgres: - image: postgres:15-alpine - container_name: postgres-db - ports: - - "${POSTGRES_PORT:-5431}:5432" - environment: - - POSTGRES_USER=${POSTGRES_USER:-postgres} - - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-turbo123} - - POSTGRES_DB=${POSTGRES_DB:-genomic} - volumes: - - postgres_data:/var/lib/postgresql/data - healthcheck: - test: ["CMD", "pg_isready", "-U", "${POSTGRES_USER:-user}"] - interval: 10s - timeout: 5s - retries: 5 - networks: - - app-network - - redis: - image: redis:7-alpine - container_name: redis-cache - ports: - - "${REDIS_PORT:-6379}:6379" - volumes: - - redis_data:/data - healthcheck: - test: ["CMD", "redis-cli", "ping"] - interval: 10s - timeout: 5s - retries: 5 - networks: - - app-network - -volumes: - postgres_data: - redis_data: - -networks: - app-network: - driver: bridge