-
Notifications
You must be signed in to change notification settings - Fork 4
/
docker-compose.yml
168 lines (160 loc) · 5.38 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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# https://docs.docker.com/compose/compose-file/
version: "3.8"
services:
# Application container (Node.js server).
app:
hostname: app
build:
context: .
dockerfile: Dockerfile.dev
depends_on:
- base
- db
- vt_generate
- vt_serve
environment:
# Always connect the application running in this container to the database
# running in the `db` container. These environment variables take
# precedence over those in the `.env` file because dotenv does not
# override variables that are already set
# (https://www.npmjs.com/package/dotenv#what-happens-to-environment-variables-that-were-already-set).
DB_HOST: db
DB_PORT: 5432
DB_NAME: smapshot_v2
DB_USER: postgres
DB_PASS: postgres
# If this variable is set, the entrypoint script will run `npm install`
# before starting the application, to install new dependencies.
DOCKER_INSTALL_DEPENDENCIES:
ports:
- "${PORT:-1337}:1337"
restart: "no"
stop_signal: KILL
volumes:
# Mount this repository into the container so that the server running
# within it can detect changes to the code and restart automatically.
# Exclude node_modules and mount it as persistent named volume instead.
- ".:/usr/src/app"
- "node_modules:/usr/src/app/node_modules"
- "./public/data:/data"
# Database container (PostgreSQL with PostGIS).
db:
image: postgis/postgis:13-3.1-alpine
# Known compatiblity issues with ARM architecture (like M1 chip) and postgis image
# As a workaround, use the following image instead:
# image: furiousluke/postgis:13-3.3
# Increase work_mem could be needed to avoid out of memory errors
# command: >
# -c work_mem=1GB
hostname: db
environment:
POSTGRES_DB: smapshot_v2
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
ports:
# Expose the database on port 5432 of the host by default
# (or $DB_PORT, if specified).
- "${DB_PORT:-5434}:5432"
restart: "no"
volumes:
# Mount a persistent Docker volume into the container so that PostgreSQL
# data survives container restart.
- "db_data:/var/lib/postgresql/data"
- ./init_db.sh:/docker-entrypoint-initdb.d/11_init_db.sh
#- "${DUMP_PATH}:/tmp/dump.sql" #uncomment if you need to bootstrap your db from a dump
# Vector tiles generation for points container
vt_generate:
image: mediacomem/vtmarkersgenerator:2.3.1
hostname: vt_generate
environment:
# Always connect the application running in this container to the database
# running in the `db` container. These environment variables take
# precedence over those in the `.env` file because dotenv does not
# override variables that are already set
# (https://www.npmjs.com/package/dotenv#what-happens-to-environment-variables-that-were-already-set).
DB_HOST: db
DB_PORT: 5432
DB_NAME: smapshot_v2
DB_USER: postgres
DB_PASS: postgres
restart: "always"
stop_signal: KILL
depends_on:
- db
volumes:
# Mount the tasks config file
- ./docker/vt_generate/tasks.yml:/usr/src/app/tasks.yml
# Mount a persistent Docker volume into the container so that PostgreSQL
# data survives container restart.
- "vt_tilesets:/usr/src/app/output"
# Serve vector tiles generated from vt_generate container
vt_serve:
image: mediacomem/mbtileserver:1.0.0
hostname: vt_serve
environment:
TILE_DIR: "/tilesets"
MBTILESERVER_ARGS: "--disable-preview --disable-svc-list"
ports:
- "${VT_PORT:-3005}:8000"
restart: "no"
depends_on:
- vt_generate
volumes:
# Mount a persistent Docker volume into the container so that PostgreSQL
# data survives container restart.
- "vt_tilesets:/tilesets"
# Test application container (Mocha test runner).
test_app:
hostname: test_app
build:
context: .
dockerfile: Dockerfile.test
depends_on:
- base
- test_db
env_file:
- ./.env.test.defaults
environment:
# Always connect the application running in this container to the database
# running in the `test_db` container. These environment variables take
# precedence over those in the `.env` file because dotenv does not
# override variables that are already set
# (https://www.npmjs.com/package/dotenv#what-happens-to-environment-variables-that-were-already-set).
DB_HOST: test_db
DB_PORT: 5432
DB_NAME: smapshot_test
DB_USER: postgres
DB_PASS: postgres
# Force the Mocha test runner to use colors.
FORCE_COLOR: 1
LOG_LEVEL:
NODE_ENV: test
SEED:
SHOW_OPEN_API_COVERAGE:
restart: "no"
volumes:
- "./coverage:/usr/src/app/coverage"
# Test database container (PostgreSQL with PostGIS).
test_db:
image: postgis/postgis:13-3.1-alpine
hostname: test_db
environment:
POSTGRES_DB: smapshot_test
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
restart: "no"
# Base image with compile-time and runtime dependencies.
base:
image: smapshot/base
hostname: base
build:
context: .
dockerfile: Dockerfile.base
command:
# Run a dummy command so the container exits immediately.
- "true"
restart: "no"
volumes:
db_data:
node_modules:
vt_tilesets: