fix(docker): fix config files reading & add compose file

This commit is contained in:
Ralex
2025-10-19 12:32:46 +02:00
parent 96bff164c0
commit 90555891f8
9 changed files with 29 additions and 50 deletions

View File

@@ -1,2 +1,2 @@
WEB_ORIGIN=http://localhost:3000 # Default: http://localhost:3000, for allow all origins use '*'
SOCKET_URL=http://localhost:3001 # Default: http://localhost:3001 SOCKET_URL=http://localhost:3001 # Default: http://localhost:3001
SOCKER_PORT=3001 # Default: 3001

View File

@@ -67,6 +67,7 @@ EXPOSE 3000 5505
# Environment variables # Environment variables
ENV NODE_ENV=production ENV NODE_ENV=production
ENV CONFIG_PATH=/app/config
# Start both services (Next.js web app + Socket server) # Start both services (Next.js web app + Socket server)
CMD ["sh", "-c", "node packages/web/server.js & node packages/socket/dist/index.cjs"] CMD ["sh", "-c", "node packages/web/server.js & node packages/socket/dist/index.cjs"]

13
compose.yml Normal file
View File

@@ -0,0 +1,13 @@
version: "3.8"
services:
rahoot:
image: rahoot
ports:
- "3000:3000"
- "3001:3001"
volumes:
- ./config:/app/config # Path to your game config
environment:
- WEB_ORIGIN=http://localhost:3000
- SOCKET_URL=http://localhost:3001

View File

@@ -1,4 +0,0 @@
{
"managerPassword": "PASSWORD",
"music": true
}

View File

@@ -1,41 +0,0 @@
{
"subject": "Example Quizz",
"questions": [
{
"question": "What is good answer ?",
"answers": [
"No",
"Good answer",
"No",
"No"
],
"solution": 1,
"cooldown": 5,
"time": 15
},
{
"question": "What is good answer with image ?",
"answers": [
"No",
"No",
"No",
"Good answer"
],
"image": "https://placehold.co/600x400.png",
"solution": 3,
"cooldown": 5,
"time": 20
},
{
"question": "What is good answer with two answers ?",
"answers": [
"Good answer",
"No"
],
"image": "https://placehold.co/600x400.png",
"solution": 0,
"cooldown": 5,
"time": 20
}
]
}

View File

@@ -3,10 +3,12 @@ import { z } from "zod/v4"
const env = createEnv({ const env = createEnv({
server: { server: {
WEB_ORIGIN: z.string().optional().default("http://localhost:3000"),
SOCKER_PORT: z.string().optional().default("3001"), SOCKER_PORT: z.string().optional().default("3001"),
}, },
runtimeEnv: { runtimeEnv: {
WEB_ORIGIN: process.env.WEB_ORIGIN,
SOCKER_PORT: process.env.SOCKER_PORT, SOCKER_PORT: process.env.SOCKER_PORT,
}, },
}) })

View File

@@ -7,11 +7,15 @@ import Registry from "@rahoot/socket/services/registry"
import { withGame } from "@rahoot/socket/utils/game" import { withGame } from "@rahoot/socket/utils/game"
import { Server as ServerIO } from "socket.io" import { Server as ServerIO } from "socket.io"
const io: Server = new ServerIO() const io: Server = new ServerIO({
cors: {
origin: [env.WEB_ORIGIN],
},
})
Config.init() Config.init()
const registry = Registry.getInstance() const registry = Registry.getInstance()
const port = env.SOCKER_PORT || 3001 const port = 3001
console.log(`Socket server running on port ${port}`) console.log(`Socket server running on port ${port}`)
io.listen(Number(port)) io.listen(Number(port))

View File

@@ -2,8 +2,12 @@ import { QuizzWithId } from "@rahoot/common/types/game"
import fs from "fs" import fs from "fs"
import { resolve } from "path" import { resolve } from "path"
const inContainerPath = process.env.CONFIG_PATH
const getPath = (path: string = "") => const getPath = (path: string = "") =>
resolve(process.cwd(), "../../config", path) inContainerPath
? resolve(inContainerPath, path)
: resolve(process.cwd(), "../../config", path)
class Config { class Config {
static init() { static init() {

View File

@@ -4,7 +4,7 @@
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
"build": "next build", "build": "next build",
"start": "node .next/standalone/packages/web/server.js", "start": "next start",
"lint": "eslint" "lint": "eslint"
}, },
"dependencies": { "dependencies": {