-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathdocker-compose.yml
138 lines (130 loc) · 3.82 KB
/
docker-compose.yml
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
services:
db:
image: postgres:16
env_file:
- docker.env
volumes:
- db_data:/var/lib/postgresql/data/
- ./data/postgresql:/docker-entrypoint-initdb.d/
shm_size: "1gb"
restart: always
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}" ]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:alpine
# Enable redis data persistence using the "Append Only File" with the
# default policy of fsync every second. See https://redis.io/topics/persistence
command: redis-server --appendonly yes
volumes:
- redis_data:/data
restart: always
# This service is responsible for ensuring the correct ownership of files
# in the shared volumes used by the application (static and media).
# It ensures that all files inside the `/var/dejacode/` directory are owned
# by the user and group with the UID and GID defined in the environment variables
# APP_UID and APP_GID, which default to 1000 if not set.
#
# The service runs only once (due to "restart: no") and performs a `chown` operation
# to change the ownership of the static and media directories, ensuring proper
# file access rights for the running application containers.
#
# Volumes mounted:
# - static: Ensures the ownership of static files in the /var/dejacode/static directory
# - media: Ensures the ownership of media files in the /var/dejacode/media directory
#
# Notes: This service can be removed once DejaCode 5.3.0 will be released.
chown:
image: alpine:latest
restart: "no"
command: chown -R ${APP_UID:-1000}:${APP_GID:-1000} /var/dejacode/
env_file:
- docker.env
volumes:
- static:/var/dejacode/static
- media:/var/dejacode/media
web:
build: .
command: sh -c "
./manage.py migrate &&
./manage.py collectstatic --no-input --verbosity 0 --clear &&
gunicorn dejacode.wsgi:application --bind :8000 --timeout 600 \
--workers 4 --worker-tmp-dir /dev/shm"
env_file:
- docker.env
expose:
- 8000
volumes:
- .env:/opt/dejacode/.env
- /etc/dejacode/:/etc/dejacode/
- static:/var/dejacode/static
- media:/var/dejacode/media
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
clamav:
condition: service_started
chown:
condition: service_completed_successfully
worker:
build: .
# Ensure that potential db migrations run first by waiting until "web" is up
command: wait-for-it --strict --timeout=180 web:8000 -- sh -c "
./manage.py rqworker-pool --num-workers 2 --verbosity 1"
env_file:
- docker.env
volumes:
- .env:/opt/dejacode/.env
- /etc/dejacode/:/etc/dejacode/
# The media volume is required to access uploaded files from the worker
- media:/var/dejacode/media
depends_on:
- redis
- db
- web
- chown
scheduler:
build: .
command: wait-for-it web:8000 -- sh -c "
./manage.py setupcron &&
./manage.py rqscheduler --interval=600"
env_file:
- docker.env
volumes:
- .env:/opt/dejacode/.env
- /etc/dejacode/:/etc/dejacode/
depends_on:
- redis
- db
- web
- chown
nginx:
image: nginx:alpine
ports:
- "${NGINX_PUBLISHED_HTTP_PORT:-80}:80"
- "${NGINX_PUBLISHED_HTTPS_PORT:-443}:443"
volumes:
- ./etc/nginx/conf.d/:/etc/nginx/conf.d/
- /var/www/html:/var/www/html
- static:/var/dejacode/static/
depends_on:
- web
restart: always
clamav:
image: clamav/clamav
volumes:
- clamav_data:/var/lib/clamav
- media:/var/dejacode/media
ports:
- "3310:3310"
restart: always
volumes:
db_data:
redis_data:
clamav_data:
static:
media: