From cfbc124295b0d97c2f3aee6fee8813029c769b49 Mon Sep 17 00:00:00 2001 From: Baobhan Sith <80159437+Heavrnl@users.noreply.github.com> Date: Mon, 28 Apr 2025 14:09:43 +0800 Subject: [PATCH] update --- docker-compose.build.yml | 32 ----------- docker-compose.yml | 39 ++++++++++++-- docker-compose.yml3 | 54 +++++++++++++++++++ packages/backend/package.json | 3 +- .../src/components/RemoteDesktopModal.vue | 9 +++- packages/rdp/Dockerfile | 38 +++++++++++++ packages/rdp/package.json | 5 +- 7 files changed, 139 insertions(+), 41 deletions(-) delete mode 100644 docker-compose.build.yml create mode 100644 docker-compose.yml3 create mode 100644 packages/rdp/Dockerfile diff --git a/docker-compose.build.yml b/docker-compose.build.yml deleted file mode 100644 index f2c4b8b..0000000 --- a/docker-compose.build.yml +++ /dev/null @@ -1,32 +0,0 @@ -services: - frontend: - build: - context: . - dockerfile: packages/frontend/Dockerfile - container_name: nexus-terminal-frontend - ports: - - "18111:80" - depends_on: - - backend - networks: - - nexus-terminal-network - - backend: - build: - context: . - dockerfile: packages/backend/Dockerfile - container_name: nexus-terminal-backend - ports: - - "18112:3001" - environment: - NODE_ENV: production - PORT: 3001 - volumes: - - ./data:/app/data - networks: - - nexus-terminal-network - - -networks: - nexus-terminal-network: - driver: bridge \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index a3d2eb6..d5488c0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,28 +1,59 @@ services: frontend: - image: heavrnl/nexus-terminal-frontend + build: + context: . + dockerfile: packages/frontend/Dockerfile container_name: nexus-terminal-frontend ports: - "18111:80" depends_on: - backend + - rdp # Added rdp dependency networks: - nexus-terminal-network backend: - image: heavrnl/nexus-terminal-backend + build: + context: . + dockerfile: packages/backend/Dockerfile container_name: nexus-terminal-backend ports: - "18112:3001" environment: NODE_ENV: production PORT: 3001 + RDP_BACKEND_API_BASE: http://rdp:9090 # Add URL for backend to reach RDP service volumes: - ./data:/app/data networks: - nexus-terminal-network + rdp: + build: + context: . + dockerfile: packages/rdp/Dockerfile + container_name: nexus-terminal-rdp + environment: + GUACD_HOST: guacd + GUACD_PORT: 4822 + API_PORT: 9090 # Default API port for rdp service + GUAC_WS_PORT: 8081 # Default WebSocket port for rdp service + FRONTEND_URL: http://frontend # Allow CORS from frontend container + MAIN_BACKEND_URL: http://backend:3001 # Allow CORS from backend container + NODE_ENV: production + networks: + - nexus-terminal-network + depends_on: + - guacd + - backend + + guacd: + image: guacamole/guacd:latest + container_name: nexus-terminal-guacd + networks: + - nexus-terminal-network + restart: unless-stopped + networks: nexus-terminal-network: - driver: bridge - name: nexus-terminal-network + driver: bridge \ No newline at end of file diff --git a/docker-compose.yml3 b/docker-compose.yml3 new file mode 100644 index 0000000..6fc9c46 --- /dev/null +++ b/docker-compose.yml3 @@ -0,0 +1,54 @@ +services: + frontend: + image: heavrnl/nexus-terminal-frontend + container_name: nexus-terminal-frontend + ports: + - "18111:80" + depends_on: + - backend + - rdp # Added rdp dependency + networks: + - nexus-terminal-network + + backend: + image: heavrnl/nexus-terminal-backend + container_name: nexus-terminal-backend + ports: + - "18112:3001" + environment: + NODE_ENV: production + PORT: 3001 + RDP_BACKEND_API_BASE: http://rdp:9090 # Add URL for backend to reach RDP service + volumes: + - ./data:/app/data + networks: + - nexus-terminal-network + + rdp: + image: heavrnl/nexus-terminal-rdp # <-- Replace with your actual image name + container_name: nexus-terminal-rdp + environment: + GUACD_HOST: guacd + GUACD_PORT: 4822 + API_PORT: 9090 # Default API port for rdp service + GUAC_WS_PORT: 8081 # Default WebSocket port for rdp service + FRONTEND_URL: http://frontend # Allow CORS from frontend container + MAIN_BACKEND_URL: http://backend:3001 # Allow CORS from backend container + NODE_ENV: production + networks: + - nexus-terminal-network + depends_on: + - guacd + - backend + + guacd: + image: guacamole/guacd:latest + container_name: nexus-terminal-guacd + networks: + - nexus-terminal-network + restart: unless-stopped + +networks: + nexus-terminal-network: + driver: bridge + name: nexus-terminal-network diff --git a/packages/backend/package.json b/packages/backend/package.json index 5aeb11e..34f1a58 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -31,7 +31,8 @@ "sqlite3": "^5.1.7", "ssh2": "^1.16.0", "uuid": "^11.1.0", - "xterm": "^5.3.0" + "xterm": "^5.3.0", + "ws": "^8.18.1" }, "devDependencies": { "@types/bcrypt": "^5.0.2", diff --git a/packages/frontend/src/components/RemoteDesktopModal.vue b/packages/frontend/src/components/RemoteDesktopModal.vue index 3e71e63..413021b 100644 --- a/packages/frontend/src/components/RemoteDesktopModal.vue +++ b/packages/frontend/src/components/RemoteDesktopModal.vue @@ -38,8 +38,13 @@ const desiredModalHeight = ref(858); // User sets the desired TOTAL modal height const MIN_MODAL_WIDTH = 1024; const MIN_MODAL_HEIGHT = 768; -const RDP_BACKEND_API_BASE = 'http://localhost:9090'; -const RDP_BACKEND_WEBSOCKET_URL = 'ws://localhost:8081'; +const RDP_BACKEND_API_BASE = 'http://localhost:9090'; // This might need adjustment too if API is accessed directly from browser, but currently it's proxied via backend + +// Dynamically construct WebSocket URL +const wsProtocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; +const wsHost = window.location.hostname; +const wsPort = import.meta.env.VITE_RDP_WEBSOCKET_PORT || '18114'; // Read from env var or use default +const RDP_BACKEND_WEBSOCKET_URL = `${wsProtocol}//${wsHost}:${wsPort}`; // Removed localStorage keys const connectRdp = async () => { // Removed useInputValues parameter diff --git a/packages/rdp/Dockerfile b/packages/rdp/Dockerfile new file mode 100644 index 0000000..799e52b --- /dev/null +++ b/packages/rdp/Dockerfile @@ -0,0 +1,38 @@ +# Use a lightweight Node.js image +FROM node:20-alpine AS builder + +# Set the working directory +WORKDIR /app + +# Copy package.json and package-lock.json +COPY packages/rdp/package.json packages/rdp/package-lock.json* ./ + +# Install ALL dependencies (including devDependencies like typescript) +RUN npm install + +# Copy source code and tsconfig +COPY packages/rdp/src ./src +COPY packages/rdp/tsconfig.json ./tsconfig.json + +# Build the TypeScript code +RUN npm run build + +# Remove development dependencies after build +RUN npm prune --production + +# --- Production Stage --- +FROM node:20-alpine + +WORKDIR /app + +# Copy built code and node_modules from builder stage +COPY --from=builder /app/dist ./dist +COPY --from=builder /app/node_modules ./node_modules +COPY packages/rdp/package.json ./package.json + +# Expose the API and WebSocket ports +EXPOSE 9090 +EXPOSE 8081 + +# Command to run the application +CMD ["node", "dist/server.js"] \ No newline at end of file diff --git a/packages/rdp/package.json b/packages/rdp/package.json index 6f88ab5..0616bc5 100644 --- a/packages/rdp/package.json +++ b/packages/rdp/package.json @@ -1,10 +1,11 @@ { - "name": "backend", + "name": "@nexus-terminal/rdp", "version": "1.0.0", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "start": "tsc && node dist/server.js", + "build": "tsc", + "start": "node dist/server.js", "dev": "nodemon --exec \"ts-node --files src/server.ts\"" }, "keywords": [],