services: mongo: image: mongo:4.4 # Sử dụng phiên bản MongoDB cụ thể để đảm bảo tính ổn định container_name: 3dtours_mongo restart: always ports: - "27017:27017" # Mở cổng MongoDB ra ngoài (có thể bỏ nếu chỉ dùng nội bộ Docker) volumes: - mongo_data:/data/db # Lưu trữ dữ liệu MongoDB bền vững environment: MONGO_INITDB_ROOT_USERNAME: ${MONGO_USERNAME} MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD} redis: image: redis:6-alpine # Sử dụng phiên bản Redis nhẹ container_name: 3dtours_redis restart: always ports: - "6379:6379" # Mở cổng Redis ra ngoài (có thể bỏ nếu chỉ dùng nội bộ Docker) volumes: - redis_data:/data # Lưu trữ dữ liệu Redis bền vững (tùy chọn) app: build: context: ./backend # Đường dẫn image trên Gitea Registry của bạn dockerfile: Dockerfile container_name: 3dtours_app restart: always ports: - "${PORT}:${PORT}" # Khớp cổng máy host với cổng bên trong container (ví dụ: 3000:3000) volumes: - uploads:/app/uploads # Lưu trữ các tệp ảnh panorama đã tải lên - ./frontend:/frontend # Gắn thư mục frontend vào container để Node.js truy cập được qua ../frontend environment: # Biến môi trường cho ứng dụng Node.js PORT: ${PORT} MONGODB_URI: ${MONGODB_URI} JWT_SECRET: ${JWT_SECRET} REDIS_HOST: ${REDIS_HOST} REDIS_PORT: ${REDIS_PORT} UPLOAD_DIR: ${UPLOAD_DIR} NODE_ENV: ${NODE_ENV} SYSTEM_HOST: ${SYSTEM_HOST} ADDITIONAL_ALLOWED_ORIGINS: ${ADDITIONAL_ALLOWED_ORIGINS} depends_on: - mongo # Đảm bảo MongoDB khởi động trước - redis # Đảm bảo Redis khởi động trước command: node server.js volumes: mongo_data: redis_data: uploads: