Spaces:
Sleeping
Sleeping
| FROM node:20-slim | |
| ENV DEBIAN_FRONTEND=noninteractive | |
| # Build timestamp: 2026-01-13T17:50 | |
| WORKDIR /app | |
| # Copy backend package.json and install ALL deps (including dev for tsx) | |
| COPY trigo-web/backend/package.json ./package.json | |
| RUN npm install | |
| # Copy backend source | |
| COPY trigo-web/backend/src/ ./backend/src/ | |
| # Copy inc folder | |
| COPY trigo-web/inc/ ./inc/ | |
| # Copy frontend dist | |
| COPY trigo-web/app/dist/ ./app/dist/ | |
| # Copy env files (only .env, .env.local is for local development only) | |
| COPY trigo-web/backend/.env ./backend/.env | |
| # Create a Docker-specific entry point that sets correct paths | |
| RUN echo 'import express from "express"; \ | |
| import { createServer } from "http"; \ | |
| import { Server } from "socket.io"; \ | |
| import cors from "cors"; \ | |
| import { GameManager } from "./backend/src/services/gameManager"; \ | |
| import { setupSocketHandlers } from "./backend/src/sockets/gameSocket"; \ | |
| const app = express(); \ | |
| const httpServer = createServer(app); \ | |
| const io = new Server(httpServer, { cors: { origin: true, methods: ["GET", "POST"], credentials: true } }); \ | |
| const gameManager = new GameManager(); \ | |
| const PORT = parseInt(process.env.PORT || "7860", 10); \ | |
| app.use(cors()); \ | |
| app.use(express.json()); \ | |
| app.use(express.static("app/dist")); \ | |
| app.get("/health", (req, res) => res.json({status: "ok", timestamp: new Date().toISOString()})); \ | |
| app.get("*", (req, res, next) => { if (req.path.startsWith("/health") || req.path.startsWith("/socket.io")) return next(); res.sendFile("app/dist/index.html", {root: "/app"}); }); \ | |
| io.on("connection", (socket) => { console.log("Client connected:", socket.id); setupSocketHandlers(io, socket, gameManager); socket.on("disconnect", () => console.log("Client disconnected:", socket.id)); }); \ | |
| httpServer.listen(PORT, "0.0.0.0", () => console.log("Server running on port " + PORT));' > docker-entry.ts | |
| ENV PORT=7860 | |
| ENV HOST=0.0.0.0 | |
| ENV NODE_ENV=production | |
| EXPOSE 7860 | |
| CMD ["npx", "tsx", "docker-entry.ts"] | |