Skip to content

Commit 0d3cd86

Browse files
authored
feat(setup): add docker compose config for deployment (#14)
2 parents 1bc0f1e + 91f9ff0 commit 0d3cd86

12 files changed

Lines changed: 1027 additions & 0 deletions

File tree

.dockerignore

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Exclude everything by default
2+
*
3+
4+
# Include workspace files
5+
!pnpm-lock.yaml
6+
!pnpm-workspace.yaml
7+
!package.json
8+
9+
# Include web service
10+
!apps/web/
11+
12+
# Include API service
13+
!apps/api/
14+
15+
# Include recommendation API service
16+
!apps/recommendation-api/
17+
18+
# Exclude node_modules and build artifacts
19+
**/node_modules/
20+
**/dist/
21+
**/.vite/
22+
**/coverage/
23+
**/.nyc_output/
24+
25+
# But include generated Prisma client
26+
!**/src/generated/
27+
28+
# Exclude logs and temporary files
29+
*.log
30+
*.tsbuildinfo
31+
.cache/
32+
.temp/
33+
34+
# Exclude git and editor files
35+
.git/
36+
.vscode/
37+
.idea/
38+
*.swp
39+
*.swo
40+
41+
# Exclude OS files
42+
.DS_Store
43+
Thumbs.db
44+
45+
# Exclude docker files
46+
docker-compose*.yml
47+
Dockerfile*
48+
.dockerignore
49+
Makefile
50+
51+
# But include startup scripts
52+
!**/start.sh

Makefile

Lines changed: 176 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
1+
.PHONY: help dev prod build clean logs shell db-migrate db-reset test
2+
3+
# Default target
4+
help:
5+
@echo "Available commands:"
6+
@echo " dev - Start development environment"
7+
@echo " prod - Start production environment"
8+
@echo " build - Build all services"
9+
@echo " build-dev - Build development environment"
10+
@echo " build-prod - Build production environment"
11+
@echo " clean - Stop and remove all containers and volumes"
12+
@echo " logs - Show logs for all services"
13+
@echo " logs-web - Show logs for web service"
14+
@echo " logs-api - Show logs for API service"
15+
@echo " logs-rec - Show logs for recommendation API service"
16+
@echo " shell-web - Access web service shell"
17+
@echo " shell-api - Access API service shell"
18+
@echo " shell-rec - Access recommendation API service shell"
19+
@echo " db-migrate - Run database migrations"
20+
@echo " db-reset - Reset database (WARNING: This will delete all data)"
21+
@echo " db-shell - Access database shell"
22+
@echo " test - Run tests for all services"
23+
@echo " setup - Initial setup (copy env file and build)"
24+
25+
# Development environment
26+
dev:
27+
@echo "Starting development environment..."
28+
docker-compose -f docker-compose.dev.yml up --build
29+
30+
dev-detached:
31+
@echo "Starting development environment in background..."
32+
docker-compose -f docker-compose.dev.yml up -d --build
33+
34+
# Production environment
35+
prod:
36+
@echo "Starting production environment..."
37+
docker-compose up --build
38+
39+
prod-detached:
40+
@echo "Starting production environment in background..."
41+
docker-compose up -d --build
42+
43+
# Build commands
44+
build:
45+
@echo "Building all services..."
46+
docker-compose build
47+
48+
build-dev:
49+
@echo "Building development environment..."
50+
docker-compose -f docker-compose.dev.yml build
51+
52+
build-prod:
53+
@echo "Building production environment..."
54+
docker-compose build
55+
56+
# Cleanup
57+
clean:
58+
@echo "Stopping and removing all containers and volumes..."
59+
docker-compose down -v
60+
docker-compose -f docker-compose.dev.yml down -v
61+
docker system prune -f
62+
63+
# Logs
64+
logs:
65+
@echo "Showing logs for all services..."
66+
docker-compose logs -f
67+
68+
logs-web:
69+
@echo "Showing logs for web service..."
70+
docker-compose logs -f web
71+
72+
logs-api:
73+
@echo "Showing logs for API service..."
74+
docker-compose logs -f api
75+
76+
logs-rec:
77+
@echo "Showing logs for recommendation API service..."
78+
docker-compose logs -f recommendation-api
79+
80+
# Shell access
81+
shell-web:
82+
@echo "Accessing web service shell..."
83+
docker-compose exec web sh
84+
85+
shell-api:
86+
@echo "Accessing API service shell..."
87+
docker-compose exec api sh
88+
89+
shell-rec:
90+
@echo "Accessing recommendation API service shell..."
91+
docker-compose exec recommendation-api sh
92+
93+
# Database operations
94+
db-migrate:
95+
@echo "Running database migrations..."
96+
docker-compose exec api pnpm prisma migrate deploy
97+
98+
db-generate:
99+
@echo "Generating Prisma client..."
100+
docker-compose exec api pnpm prisma generate
101+
102+
db-reset:
103+
@echo "WARNING: This will delete all database data!"
104+
@read -p "Are you sure? (y/N): " confirm && [ "$$confirm" = "y" ] || exit 1
105+
docker-compose exec api pnpm prisma migrate reset --force
106+
107+
db-shell:
108+
@echo "Accessing database shell..."
109+
docker-compose exec postgres psql -U postgres -d openlearn
110+
111+
# Testing
112+
test:
113+
@echo "Running tests for all services..."
114+
@echo "Testing web service..."
115+
docker-compose exec web pnpm test
116+
@echo "Testing API service..."
117+
docker-compose exec api pnpm test
118+
119+
# Setup
120+
setup:
121+
@echo "Setting up development environment..."
122+
@if [ ! -f .env ]; then \
123+
cp env.example .env; \
124+
echo "Created .env file from env.example"; \
125+
else \
126+
echo ".env file already exists"; \
127+
fi
128+
@echo "Building development environment..."
129+
docker-compose -f docker-compose.dev.yml build
130+
131+
# Health checks
132+
health:
133+
@echo "Checking service health..."
134+
@echo "Web service:"
135+
@curl -f http://localhost:5173/health || echo "Web service not responding"
136+
@echo "API service:"
137+
@curl -f http://localhost:3000/health || echo "API service not responding"
138+
@echo "Recommendation API service:"
139+
@curl -f http://localhost:8000/ || echo "Recommendation API service not responding"
140+
141+
# Development shortcuts
142+
restart-dev:
143+
@echo "Restarting development environment..."
144+
docker-compose -f docker-compose.dev.yml restart
145+
146+
stop-dev:
147+
@echo "Stopping development environment..."
148+
docker-compose -f docker-compose.dev.yml down
149+
150+
stop-prod:
151+
@echo "Stopping production environment..."
152+
docker-compose down
153+
154+
# Monitoring
155+
ps:
156+
@echo "Container status:"
157+
docker-compose ps
158+
159+
ps-dev:
160+
@echo "Development container status:"
161+
docker-compose -f docker-compose.dev.yml ps
162+
163+
# Resource usage
164+
stats:
165+
@echo "Container resource usage:"
166+
docker stats --no-stream
167+
168+
# Backup and restore
169+
backup:
170+
@echo "Creating database backup..."
171+
docker-compose exec postgres pg_dump -U postgres openlearn > backup_$(shell date +%Y%m%d_%H%M%S).sql
172+
173+
restore:
174+
@echo "Restoring database from backup..."
175+
@read -p "Enter backup file name: " backup_file && \
176+
docker-compose exec -T postgres psql -U postgres openlearn < $$backup_file

apps/api/.dockerignore

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
node_modules
2+
npm-debug.log*
3+
yarn-debug.log*
4+
yarn-error.log*
5+
pnpm-debug.log*
6+
lerna-debug.log*
7+
8+
# Runtime data
9+
pids
10+
*.pid
11+
*.seed
12+
*.pid.lock
13+
14+
# Coverage directory used by tools like istanbul
15+
coverage
16+
*.lcov
17+
18+
# nyc test coverage
19+
.nyc_output
20+
21+
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
22+
.grunt
23+
24+
# Bower dependency directory (https://bower.io/)
25+
bower_components
26+
27+
# node-waf configuration
28+
.lock-wscript
29+
30+
# Compiled binary addons (https://nodejs.org/api/addons.html)
31+
build/Release
32+
33+
# Dependency directories
34+
node_modules/
35+
jspm_packages/
36+
37+
# TypeScript cache
38+
*.tsbuildinfo
39+
40+
# Optional npm cache directory
41+
.npm
42+
43+
# Optional eslint cache
44+
.eslintcache
45+
46+
# Microbundle cache
47+
.rpt2_cache/
48+
.rts2_cache_cjs/
49+
.rts2_cache_es/
50+
.rts2_cache_umd/
51+
52+
# Optional REPL history
53+
.node_repl_history
54+
55+
# Output of 'npm pack'
56+
*.tgz
57+
58+
# Yarn Integrity file
59+
.yarn-integrity
60+
61+
# dotenv environment variables file
62+
.env
63+
.env.test
64+
.env.production
65+
.env.local
66+
67+
# parcel-bundler cache (https://parceljs.org/)
68+
.cache
69+
.parcel-cache
70+
71+
# Next.js build output
72+
.next
73+
74+
# Nuxt.js build / generate output
75+
.nuxt
76+
dist
77+
78+
# Gatsby files
79+
.cache/
80+
public
81+
82+
# Storybook build outputs
83+
.out
84+
.storybook-out
85+
86+
# Temporary folders
87+
tmp/
88+
temp/
89+
90+
# Logs
91+
logs
92+
*.log
93+
94+
# Editor directories and files
95+
.vscode/
96+
.idea/
97+
*.swp
98+
*.swo
99+
*~
100+
101+
# OS generated files
102+
.DS_Store
103+
.DS_Store?
104+
._*
105+
.Spotlight-V100
106+
.Trashes
107+
ehthumbs.db
108+
Thumbs.db
109+
110+
# Git
111+
.git
112+
.gitignore
113+
114+
# Docker
115+
Dockerfile
116+
.dockerignore
117+
docker-compose.yml
118+
119+
# Prisma
120+
prisma/migrations/

0 commit comments

Comments
 (0)