-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
140 lines (130 loc) · 3.78 KB
/
docker-compose.yml
File metadata and controls
140 lines (130 loc) · 3.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# Docker Compose setup for Video Processor with Procrastinate
# Complete development and testing environment
services:
# PostgreSQL database for Procrastinate
postgres:
image: postgres:15-alpine
environment:
POSTGRES_DB: video_processor
POSTGRES_USER: video_user
POSTGRES_PASSWORD: video_password
POSTGRES_HOST_AUTH_METHOD: trust
volumes:
- postgres_data:/var/lib/postgresql/data
- ./docker/init-db.sql:/docker-entrypoint-initdb.d/init-db.sql
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U video_user -d video_processor"]
interval: 10s
timeout: 5s
retries: 5
networks:
- video_net
# Video Processor API service
app:
build:
context: .
dockerfile: Dockerfile
target: development
environment:
- DATABASE_URL=postgresql://video_user:video_password@postgres:5432/video_processor
- PROCRASTINATE_DATABASE_URL=postgresql://video_user:video_password@postgres:5432/video_processor
- PYTHONPATH=/app
volumes:
- .:/app
- video_uploads:/app/uploads
- video_outputs:/app/outputs
ports:
- "8000:8000"
depends_on:
postgres:
condition: service_healthy
networks:
- video_net
command: ["python", "examples/docker_demo.py"]
# Procrastinate worker for background processing
worker:
build:
context: .
dockerfile: Dockerfile
target: worker
environment:
- PROCRASTINATE_DATABASE_URL=postgresql://video_user:video_password@postgres:5432/video_processor
- WORKER_CONCURRENCY=4
- WORKER_TIMEOUT=300
volumes:
- video_uploads:/app/uploads
- video_outputs:/app/outputs
depends_on:
postgres:
condition: service_healthy
networks:
- video_net
command: ["python", "-m", "video_processor.tasks.worker_compatibility", "worker"]
# Migration service (runs once to setup DB)
migrate:
build:
context: .
dockerfile: Dockerfile
target: migration
environment:
- PROCRASTINATE_DATABASE_URL=postgresql://video_user:video_password@postgres:5432/video_processor
depends_on:
postgres:
condition: service_healthy
networks:
- video_net
command: ["python", "-c", "
import asyncio;
from video_processor.tasks.migration import migrate_database;
asyncio.run(migrate_database('postgresql://video_user:video_password@postgres:5432/video_processor'))
"]
# Test runner service
test:
build:
context: .
dockerfile: Dockerfile
target: development
environment:
- DATABASE_URL=postgresql://video_user:video_password@postgres:5432/video_processor_test
- PROCRASTINATE_DATABASE_URL=postgresql://video_user:video_password@postgres:5432/video_processor_test
volumes:
- .:/app
depends_on:
postgres:
condition: service_healthy
networks:
- video_net
command: ["uv", "run", "pytest", "tests/", "-v", "--cov=src/", "--cov-report=html", "--cov-report=term"]
# Demo web interface (optional)
demo:
build:
context: .
dockerfile: Dockerfile
target: development
environment:
- DATABASE_URL=postgresql://video_user:video_password@postgres:5432/video_processor
- PROCRASTINATE_DATABASE_URL=postgresql://video_user:video_password@postgres:5432/video_processor
ports:
- "8080:8080"
volumes:
- .:/app
- video_uploads:/app/uploads
- video_outputs:/app/outputs
depends_on:
postgres:
condition: service_healthy
networks:
- video_net
command: ["python", "examples/web_demo.py"]
volumes:
postgres_data:
driver: local
video_uploads:
driver: local
video_outputs:
driver: local
networks:
video_net:
driver: bridge