chpark-sync #425
|
|
@ -37,9 +37,11 @@ COPY --from=build /app/dist ./dist
|
||||||
# Copy package files
|
# Copy package files
|
||||||
COPY package*.json ./
|
COPY package*.json ./
|
||||||
|
|
||||||
# Create logs and uploads directories and set permissions
|
# Create logs directory and set permissions
|
||||||
RUN mkdir -p logs uploads && chown -R appuser:appgroup logs uploads && chmod -R 755 logs uploads
|
RUN mkdir -p logs && chown -R appuser:appgroup logs && chmod -R 755 logs
|
||||||
|
|
||||||
EXPOSE 8080
|
# uploads 디렉토리는 볼륨으로 마운트되므로 생성하지 않음
|
||||||
|
|
||||||
|
EXPOSE 3001
|
||||||
USER appuser
|
USER appuser
|
||||||
CMD ["node", "dist/app.js"]
|
CMD ["node", "dist/app.js"]
|
||||||
|
|
|
||||||
|
|
@ -1,29 +1,37 @@
|
||||||
services:
|
services:
|
||||||
# Node.js 백엔드 (운영용)
|
# Node.js 백엔드
|
||||||
backend:
|
plm-backend:
|
||||||
build:
|
build:
|
||||||
context: ../../backend-node
|
context: ../../backend-node
|
||||||
dockerfile: ../docker/prod/backend.Dockerfile # 운영용 Dockerfile
|
dockerfile: ../docker/prod/backend.Dockerfile
|
||||||
container_name: pms-backend-prod
|
container_name: plm-backend
|
||||||
network_mode: "host" # 호스트 네트워크 모드
|
restart: always
|
||||||
environment:
|
environment:
|
||||||
- NODE_ENV=production
|
NODE_ENV: production
|
||||||
- PORT=8080
|
PORT: "3001"
|
||||||
- HOST=0.0.0.0 # 모든 인터페이스에서 바인딩
|
DATABASE_URL: postgresql://postgres:ph0909!!@39.117.244.52:11132/plm
|
||||||
- DATABASE_URL=postgresql://postgres:ph0909!!@39.117.244.52:11132/plm
|
JWT_SECRET: ilshin-plm-super-secret-jwt-key-2024
|
||||||
- JWT_SECRET=ilshin-plm-super-secret-jwt-key-2024
|
JWT_EXPIRES_IN: 24h
|
||||||
- JWT_EXPIRES_IN=24h
|
CORS_ORIGIN: https://v1.vexplor.com
|
||||||
- CORS_ORIGIN=http://192.168.0.70:5555,http://39.117.244.52:5555,http://localhost:9771
|
CORS_CREDENTIALS: "true"
|
||||||
- CORS_CREDENTIALS=true
|
LOG_LEVEL: info
|
||||||
- LOG_LEVEL=info
|
volumes:
|
||||||
restart: unless-stopped
|
- /home/vexplor/backend_data:/app/uploads
|
||||||
|
labels:
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.backend.rule=Host(`api.vexplor.com`)
|
||||||
|
- traefik.http.routers.backend.entrypoints=websecure,web
|
||||||
|
- traefik.http.routers.backend.tls=true
|
||||||
|
- traefik.http.routers.backend.tls.certresolver=le
|
||||||
|
- traefik.http.services.backend.loadbalancer.server.port=3001
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
|
test: ["CMD", "curl", "-f", "http://localhost:3001/health"]
|
||||||
interval: 30s
|
interval: 30s
|
||||||
timeout: 10s
|
timeout: 10s
|
||||||
retries: 3
|
retries: 3
|
||||||
start_period: 60s
|
start_period: 60s
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
pms-network:
|
default:
|
||||||
driver: bridge
|
name: toktork_server_default
|
||||||
|
external: true
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,30 @@
|
||||||
services:
|
services:
|
||||||
# Next.js 프론트엔드만
|
# Next.js 프론트엔드
|
||||||
frontend:
|
plm-frontend:
|
||||||
build:
|
build:
|
||||||
context: ../../frontend
|
context: ../../frontend
|
||||||
dockerfile: ../docker/prod/frontend.Dockerfile
|
dockerfile: ../docker/prod/frontend.Dockerfile
|
||||||
args:
|
args:
|
||||||
- NEXT_PUBLIC_API_URL=http://39.117.244.52:8080/api
|
- NEXT_PUBLIC_API_URL=https://api.vexplor.com
|
||||||
container_name: pms-frontend-linux
|
container_name: plm-frontend
|
||||||
ports:
|
restart: always
|
||||||
- "5555:5555"
|
|
||||||
environment:
|
environment:
|
||||||
- NODE_ENV=production
|
NODE_ENV: production
|
||||||
- NEXT_PUBLIC_API_URL=http://39.117.244.52:8080/api
|
NEXT_PUBLIC_API_URL: https://api.vexplor.com
|
||||||
networks:
|
NEXT_TELEMETRY_DISABLED: "1"
|
||||||
- pms-network
|
PORT: "3000"
|
||||||
restart: unless-stopped
|
HOSTNAME: 0.0.0.0
|
||||||
|
volumes:
|
||||||
|
- /home/vexplor/frontend_data:/app/data
|
||||||
|
labels:
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.frontend.rule=Host(`v1.vexplor.com`)
|
||||||
|
- traefik.http.routers.frontend.entrypoints=websecure,web
|
||||||
|
- traefik.http.routers.frontend.tls=true
|
||||||
|
- traefik.http.routers.frontend.tls.certresolver=le
|
||||||
|
- traefik.http.services.frontend.loadbalancer.server.port=3000
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
pms-network:
|
default:
|
||||||
driver: bridge
|
name: toktork_server_default
|
||||||
external: true
|
external: true
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,8 @@ COPY . .
|
||||||
# Disable telemetry during the build
|
# Disable telemetry during the build
|
||||||
ENV NEXT_TELEMETRY_DISABLED 1
|
ENV NEXT_TELEMETRY_DISABLED 1
|
||||||
|
|
||||||
# 빌드 시 환경변수 설정 (ARG로 받아서 ENV로 설정)
|
# 빌드 시 환경변수 설정
|
||||||
ARG NEXT_PUBLIC_API_URL=http://192.168.0.70:8080/api
|
ARG NEXT_PUBLIC_API_URL=https://api.vexplor.com
|
||||||
ENV NEXT_PUBLIC_API_URL=$NEXT_PUBLIC_API_URL
|
ENV NEXT_PUBLIC_API_URL=$NEXT_PUBLIC_API_URL
|
||||||
|
|
||||||
# Build the application
|
# Build the application
|
||||||
|
|
@ -55,9 +55,9 @@ COPY --from=deps --chown=nextjs:nodejs /app/node_modules ./node_modules
|
||||||
|
|
||||||
USER nextjs
|
USER nextjs
|
||||||
|
|
||||||
EXPOSE 5555
|
EXPOSE 3000
|
||||||
|
|
||||||
ENV PORT 5555
|
ENV PORT 3000
|
||||||
ENV HOSTNAME "0.0.0.0"
|
ENV HOSTNAME "0.0.0.0"
|
||||||
|
|
||||||
# Next.js start 명령어 사용
|
# Next.js start 명령어 사용
|
||||||
|
|
|
||||||
|
|
@ -85,8 +85,10 @@ echo "============================================"
|
||||||
echo ""
|
echo ""
|
||||||
echo "📊 서비스 접속 정보:"
|
echo "📊 서비스 접속 정보:"
|
||||||
echo " [DATABASE] PostgreSQL: http://39.117.244.52:11132"
|
echo " [DATABASE] PostgreSQL: http://39.117.244.52:11132"
|
||||||
echo " [BACKEND] Spring Boot: http://localhost:8080/api"
|
echo " [BACKEND] API: https://api.vexplor.com"
|
||||||
echo " [FRONTEND] Next.js: http://localhost:5555"
|
echo " [FRONTEND] Web: https://v1.vexplor.com"
|
||||||
|
echo " [BACKEND LOCAL] http://localhost:3001/api"
|
||||||
|
echo " [FRONTEND LOCAL] http://localhost:3000"
|
||||||
echo ""
|
echo ""
|
||||||
echo "🔧 관리 명령어:"
|
echo "🔧 관리 명령어:"
|
||||||
echo " 서비스 상태 확인:"
|
echo " 서비스 상태 확인:"
|
||||||
|
|
@ -119,7 +121,7 @@ echo ""
|
||||||
echo "백엔드 헬스체크..."
|
echo "백엔드 헬스체크..."
|
||||||
backend_healthy=false
|
backend_healthy=false
|
||||||
for i in {1..12}; do
|
for i in {1..12}; do
|
||||||
if curl -s http://localhost:8080/health >/dev/null 2>&1; then
|
if curl -s http://localhost:3001/health >/dev/null 2>&1; then
|
||||||
echo " ✅ 백엔드 서비스 정상"
|
echo " ✅ 백엔드 서비스 정상"
|
||||||
backend_healthy=true
|
backend_healthy=true
|
||||||
break
|
break
|
||||||
|
|
@ -142,14 +144,14 @@ if [ "$backend_healthy" = false ]; then
|
||||||
docker-compose -f docker/prod/docker-compose.backend.prod.yml ps
|
docker-compose -f docker/prod/docker-compose.backend.prod.yml ps
|
||||||
echo " 최근 로그:"
|
echo " 최근 로그:"
|
||||||
docker-compose -f docker/prod/docker-compose.backend.prod.yml logs --tail=20
|
docker-compose -f docker/prod/docker-compose.backend.prod.yml logs --tail=20
|
||||||
echo " 포트 8080 사용 현황:"
|
echo " 포트 3001 사용 현황:"
|
||||||
netstat -tln 2>/dev/null | grep ':8080' || echo " 포트 8080이 사용되지 않음"
|
netstat -tln 2>/dev/null | grep ':3001' || echo " 포트 3001이 사용되지 않음"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 프론트엔드 헬스체크 (최대 30초 대기)
|
# 프론트엔드 헬스체크 (최대 30초 대기)
|
||||||
echo "프론트엔드 헬스체크..."
|
echo "프론트엔드 헬스체크..."
|
||||||
for i in {1..6}; do
|
for i in {1..6}; do
|
||||||
if curl -s http://localhost:5555 >/dev/null 2>&1; then
|
if curl -s http://localhost:3000 >/dev/null 2>&1; then
|
||||||
echo " ✅ 프론트엔드 서비스 정상"
|
echo " ✅ 프론트엔드 서비스 정상"
|
||||||
break
|
break
|
||||||
else
|
else
|
||||||
|
|
@ -159,7 +161,9 @@ for i in {1..6}; do
|
||||||
done
|
done
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "🎯 시작 완료! 브라우저에서 http://localhost:5555 을 확인하세요."
|
echo "🎯 시작 완료!"
|
||||||
|
echo " 브라우저에서 https://v1.vexplor.com 을 확인하세요."
|
||||||
|
echo " (로컬: http://localhost:3000)"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
read -p "계속하려면 Enter 키를 누르세요..."
|
read -p "계속하려면 Enter 키를 누르세요..."
|
||||||
Loading…
Reference in New Issue