Add Docker development environment with hot reloading
This commit is contained in:
parent
2282e8d835
commit
6fc18aabac
4 changed files with 174 additions and 0 deletions
30
backend/Dockerfile.dev
Normal file
30
backend/Dockerfile.dev
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
FROM node:22-alpine
|
||||
|
||||
# Install ffmpeg for video processing
|
||||
RUN apk add --no-cache ffmpeg
|
||||
|
||||
# Set working directory
|
||||
WORKDIR /app
|
||||
|
||||
# Install dependencies
|
||||
COPY package*.json ./
|
||||
RUN npm ci
|
||||
|
||||
# Copy source code
|
||||
COPY . .
|
||||
|
||||
# Create uploads directory
|
||||
RUN mkdir -p uploads/videos uploads/thumbnails uploads/subtitles uploads/transcripts uploads/documents uploads/textversions
|
||||
|
||||
# Create a non-root user
|
||||
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
|
||||
RUN chown -R appuser:appgroup /app
|
||||
|
||||
# Switch to non-root user
|
||||
USER appuser
|
||||
|
||||
# Expose port
|
||||
EXPOSE 4000
|
||||
|
||||
# Start development server with hot reloading
|
||||
CMD ["npm", "run", "dev"]
|
||||
37
backend/tsconfig.json
Normal file
37
backend/tsconfig.json
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2022",
|
||||
"module": "commonjs",
|
||||
"lib": ["ES2022"],
|
||||
"outDir": "./dist",
|
||||
"rootDir": "./src",
|
||||
"strict": false,
|
||||
"esModuleInterop": true,
|
||||
"skipLibCheck": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"resolveJsonModule": true,
|
||||
"declaration": false,
|
||||
"declarationMap": false,
|
||||
"sourceMap": true,
|
||||
"removeComments": true,
|
||||
"noImplicitReturns": false,
|
||||
"noFallthroughCasesInSwitch": false,
|
||||
"noUnusedLocals": false,
|
||||
"noUnusedParameters": false,
|
||||
"exactOptionalPropertyTypes": false,
|
||||
"noImplicitOverride": false,
|
||||
"noPropertyAccessFromIndexSignature": false,
|
||||
"noUncheckedIndexedAccess": false,
|
||||
"allowUnusedLabels": true,
|
||||
"allowUnreachableCode": true
|
||||
},
|
||||
"include": [
|
||||
"src/**/*"
|
||||
],
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"dist",
|
||||
"**/*.test.ts",
|
||||
"**/*.spec.ts"
|
||||
]
|
||||
}
|
||||
83
docker-compose.dev.yml
Normal file
83
docker-compose.dev.yml
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
services:
|
||||
# Frontend development service with hot reloading
|
||||
frontend:
|
||||
build:
|
||||
context: ./frontend
|
||||
dockerfile: Dockerfile.dev
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3000:3000"
|
||||
depends_on:
|
||||
- mongodb
|
||||
environment:
|
||||
- NODE_ENV=development
|
||||
- NEXT_PUBLIC_API_URL=http://localhost:4000
|
||||
volumes:
|
||||
- ./frontend/src:/app/src:rw
|
||||
- ./frontend/public:/app/public:rw
|
||||
- ./frontend/package.json:/app/package.json:rw
|
||||
- ./frontend/package-lock.json:/app/package-lock.json:rw
|
||||
- ./frontend/next.config.js:/app/next.config.js:rw
|
||||
- ./frontend/tailwind.config.js:/app/tailwind.config.js:rw
|
||||
- ./frontend/postcss.config.js:/app/postcss.config.js:rw
|
||||
- ./frontend/tsconfig.json:/app/tsconfig.json:rw
|
||||
- /app/node_modules
|
||||
- /app/.next
|
||||
networks:
|
||||
- app-network
|
||||
command: npm run dev
|
||||
|
||||
# Backend development service with hot reloading
|
||||
backend:
|
||||
build:
|
||||
context: ./backend
|
||||
dockerfile: Dockerfile.dev
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "4000:4000"
|
||||
depends_on:
|
||||
- mongodb
|
||||
environment:
|
||||
- NODE_ENV=development
|
||||
- MONGODB_URI=mongodb://mongodb:27017/ocd-website
|
||||
- PORT=4000
|
||||
volumes:
|
||||
- ./backend/src:/app/src:rw
|
||||
- ./backend/package.json:/app/package.json:rw
|
||||
- ./backend/package-lock.json:/app/package-lock.json:rw
|
||||
- ./backend/tsconfig.json:/app/tsconfig.json:rw
|
||||
- ./backend/uploads:/app/uploads:rw
|
||||
- /app/node_modules
|
||||
- /app/dist
|
||||
networks:
|
||||
- app-network
|
||||
command: npm run dev
|
||||
|
||||
# MongoDB service for development
|
||||
mongodb:
|
||||
image: mongo:7.0
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "27017:27017"
|
||||
volumes:
|
||||
- mongo-dev-data:/data/db:rw
|
||||
- ./mongo-init:/docker-entrypoint-initdb.d:ro
|
||||
networks:
|
||||
- app-network
|
||||
environment:
|
||||
- MONGO_INITDB_DATABASE=ocd-website
|
||||
healthcheck:
|
||||
test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017 --quiet
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
# Networks
|
||||
networks:
|
||||
app-network:
|
||||
driver: bridge
|
||||
|
||||
# Volumes
|
||||
volumes:
|
||||
mongo-dev-data:
|
||||
name: ocd-mongo-dev-data
|
||||
24
frontend/Dockerfile.dev
Normal file
24
frontend/Dockerfile.dev
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
FROM node:22-alpine
|
||||
|
||||
# Set working directory
|
||||
WORKDIR /app
|
||||
|
||||
# Install dependencies
|
||||
COPY package*.json ./
|
||||
RUN npm ci
|
||||
|
||||
# Copy source code
|
||||
COPY . .
|
||||
|
||||
# Create a non-root user
|
||||
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
|
||||
RUN chown -R appuser:appgroup /app
|
||||
|
||||
# Switch to non-root user
|
||||
USER appuser
|
||||
|
||||
# Expose port
|
||||
EXPOSE 3000
|
||||
|
||||
# Start development server with hot reloading
|
||||
CMD ["npm", "run", "dev"]
|
||||
Loading…
Add table
Reference in a new issue