-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdocker-compose.yml
135 lines (123 loc) · 3.11 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
# Docker Compose file for Vapor
#
# Install Docker on your system to run and test
# your Vapor app in a production-like environment.
#
# Note: This file is intended for testing and does not
# implement best practices for a production deployment.
#
# Learn more: https://docs.docker.com/compose/reference/
#
# Build images: docker-compose build
# Start app: docker-compose up app
# Start database: docker-compose up db
# Run migrations: docker-compose run migrate
# Stop all: docker-compose down (add -v to wipe db)
#
version: '3.7'
volumes:
db_data:
db_test_data:
networks:
frontend:
backend:
x-shared_environment: &shared_environment
LOG_LEVEL: ${LOG_LEVEL:-debug}
DATABASE_HOST: db
DATABASE_NAME: vapor_database
DATABASE_USERNAME: vapor_username
DATABASE_PASSWORD: vapor_password
services:
# nginx reverse proxy. Accepts public connections, provides TLS termination.
frontend:
image: frontend
build:
context: ./frontend
ports:
- "8081:8081"
networks:
- frontend
- backend
depends_on:
- backend
# nginx reverse proxy for the app that is running in Xcode.
frontend-xcode:
image: frontend-xcode
build:
context: ./frontend-xcode
ports:
- "8082:8082"
networks:
- frontend
- backend
# The actual Vapor app. Note that the ports are not exposed to external network,
# meaning that the app is only accessible through the above nginx frontend.
backend:
image: backend
build:
context: ./backend
environment:
<<: *shared_environment
depends_on:
- db
networks:
- backend
# user: '0' # uncomment to run as root for testing purposes even though Dockerfile defines 'vapor' user.
command: ["serve", "--env", "development", "--hostname", "0.0.0.0", "--port", "8080"]
# migration.
migrate:
image: backend
build:
context: ./backend
environment:
<<: *shared_environment
depends_on:
- db
command: ["migrate", "--yes"]
deploy:
replicas: 0
networks:
- backend
# reverting migration.
revert:
image: backend
build:
context: ./backend
environment:
<<: *shared_environment
depends_on:
- db
command: ["migrate", "--revert", "--yes"]
deploy:
replicas: 0
networks:
- backend
# Application database for development and regular use.
db:
image: postgres:12-alpine
volumes:
- db_data:/var/lib/postgresql/data/pgdata
environment:
PGDATA: /var/lib/postgresql/data/pgdata
POSTGRES_USER: vapor_username
POSTGRES_PASSWORD: vapor_password
POSTGRES_DB: vapor_database
ports:
- '5432:5432'
networks:
- backend
# Application database for running tests.
# Cleared at the start of each test.
testdb:
image: postgres:12-alpine
volumes:
- db_test_data:/var/lib/postgresql/data/pgdata
environment:
PGDATA: /var/lib/postgresql/data/pgdata
POSTGRES_USER: vapor_username
POSTGRES_PASSWORD: vapor_password
POSTGRES_DB: vapor_database
ports:
- '5433:5432'
networks:
- backend