-
Notifications
You must be signed in to change notification settings - Fork 34
/
Copy pathdocker-compose.full.yml
135 lines (132 loc) · 3.4 KB
/
docker-compose.full.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
# Example of a full infrastructure stack
#
# Note, this file is not suitable for a production deployment. It is only an
# example of all the infrastructure components needed in a real production
# deployment.
#
# Usage::
#
# $ docker compose up -f docker-compose.full.yml -d
#
# Following services are included:
# - Frontend: Nginx (exposed ports: 40 and 443)
# - UI application: UWSGI (not exposed)
# - API application: UWSGI (not exposed)
# - Cache: Redis (exposed port: 6379)
# - DB: (PostgresSQL/MySQL) (exposed port: 5432 or 3306)
# - Message queue: RabbitMQ (exposed ports: 5672, 15672)
# - Search platform: (OpenSearch) (exposed ports: 9200, 9600)
# - OpenSearch Dashboard/Kibana (view OS/ES indexes) (exposed ports: 5601)
#
services:
cache:
extends:
file: docker-services.yml
service: cache
db:
extends:
file: docker-services.yml
service: db
mq:
extends:
file: docker-services.yml
service: mq
search:
extends:
file: docker-services.yml
service: search
{%- if cookiecutter.development_tools == 'yes'%}
opensearch-dashboards:
extends:
file: docker-services.yml
service: opensearch-dashboards
{%- if cookiecutter.database == 'postgresql'%}
pgadmin:
extends:
file: docker-services.yml
service: pgadmin
{%- elif cookiecutter.database == 'mysql'%}
phpmyadmin:
extends:
file: docker-services.yml
service: phpmyadmin
{%- endif %}
{%- endif %}
{%- if cookiecutter.file_storage == 'S3'%}
s3:
extends:
file: docker-services.yml
service: s3
{%- endif %}
# Frontend
frontend:
extends:
file: docker-services.yml
service: frontend
volumes:
- static_data:/opt/invenio/var/instance/static
depends_on:
- web-ui
- web-api
ports:
- "80:80"
- "443:443"
# UI Application
web-ui:
extends:
file: docker-services.yml
service: app
command: ["uwsgi /opt/invenio/var/instance/uwsgi_ui.ini"]
image: {{cookiecutter.project_shortname}}:latest
ports:
- "5000"
volumes:
- static_data:/opt/invenio/var/instance/static
{%- if cookiecutter.file_storage == 'local'%}
- uploaded_data:/opt/invenio/var/instance/data
- archived_data:/opt/invenio/var/instance/archive
{%- endif %}
# API Rest Application
web-api:
extends:
file: docker-services.yml
service: app
command: ["uwsgi /opt/invenio/var/instance/uwsgi_rest.ini"]
image: {{cookiecutter.project_shortname}}:latest
ports:
- "5000"
{%- if cookiecutter.file_storage == 'local'%}
volumes:
- uploaded_data:/opt/invenio/var/instance/data
- archived_data:/opt/invenio/var/instance/archive
{%- endif %}
# Worker
worker:
extends:
file: docker-services.yml
service: app
command: ["celery -A invenio_app.celery worker --beat --loglevel=INFO"]
image: {{cookiecutter.project_shortname}}:latest
{%- if cookiecutter.file_storage == 'local'%}
volumes:
- uploaded_data:/opt/invenio/var/instance/data
{%- endif %}
depends_on:
search:
condition: service_started
cache:
condition: service_started
db:
condition: service_started
mq:
condition: service_started
{%- if cookiecutter.file_storage == 'S3'%}
volumes:
static_data:
data:
{%- else %}
volumes:
static_data:
uploaded_data:
archived_data:
{%- endif %}