Skip to content

Commit 7abc973

Browse files
committed
feat: create full docker compose setup
1 parent 333323d commit 7abc973

File tree

3 files changed

+358
-1
lines changed

3 files changed

+358
-1
lines changed

docker-compose.yaml

Lines changed: 350 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,350 @@
1+
version: '2.7'
2+
3+
networks:
4+
mongo:
5+
driver: bridge
6+
redis:
7+
driver: bridge
8+
nats-streaming:
9+
driver: bridge
10+
apps:
11+
driver: bridge
12+
13+
volumes:
14+
mongo_volume:
15+
redis_volume:
16+
nats_volume:
17+
18+
services:
19+
mongo:
20+
image: mongo:latest
21+
container_name: ticketing-mongo
22+
hostname: ticketing-mongo
23+
# volumes:
24+
# - mongo_volume:/data/db
25+
# environment:
26+
# MONGO_INITDB_ROOT_USERNAME: root
27+
# MONGO_INITDB_ROOT_PASSWORD: example=value
28+
networks:
29+
- mongo
30+
ports:
31+
- '${MONGO_PORT:-27017}:27017'
32+
mem_limit: 256m
33+
memswap_limit: 512m
34+
restart: always
35+
profiles:
36+
- 'deps-only'
37+
- 'dev'
38+
39+
redis:
40+
image: redis:alpine
41+
container_name: ticketing-redis
42+
hostname: ticketing-redis
43+
# volumes:
44+
# - redis_volume:/data
45+
networks:
46+
- redis
47+
ports:
48+
- '${REDIS_PORT:-6379}:6379'
49+
mem_limit: 256m
50+
memswap_limit: 512m
51+
restart: always
52+
profiles:
53+
- 'deps-only'
54+
- 'dev'
55+
56+
nats-streaming:
57+
image: nats-streaming:0.23.0
58+
container_name: ticketing-nats
59+
hostname: ticketing-nats
60+
command:
61+
[
62+
--store,
63+
MEMORY,
64+
--port,
65+
'4222',
66+
--http_port,
67+
'8222',
68+
--hb_interval,
69+
5s,
70+
--hb_timeout,
71+
5s,
72+
--hb_fail_count,
73+
'2',
74+
--stan_debug,
75+
--cluster_id,
76+
ticketing,
77+
]
78+
networks:
79+
- nats-streaming
80+
ports:
81+
- '4222:4222'
82+
- '8222:8222'
83+
restart: always
84+
profiles:
85+
- 'deps-only'
86+
- 'dev'
87+
88+
auth-service:
89+
image: 'ghcr.io/getlarge/ticketing-auth:${AUTH_IMAGE_VERSION:-latest}'
90+
container_name: auth-service
91+
hostname: auth-service
92+
environment:
93+
NODE_ENV: ${NODE_ENV:-development}
94+
LOG_LEVEL: ${LOG_LEVEL:-info}
95+
PORT: ${AUTH_HTTP_PORT:-3000}
96+
SERVER_URL: http://127.0.0.1:${AUTH_HTTP_PORT:-3000}
97+
PROXY_SERVER_URLS: ${PROXY_SERVER_URLS:-http://ticketing.dev}
98+
FRONTEND_URL: ${FRONTEND_URL:-http://ticketing.dev}
99+
JWT_ALGORITHM: ${JWT_ALGORITHM:-ES256}
100+
JWT_EXPIRES_IN: ${JWT_EXPIRES_IN:-60m}
101+
JWT_ISSUER: ${JWT_ISSUER:-ticketing.dev}
102+
JWT_PRIVATE_KEY: ${JWT_PRIVATE_KEY}
103+
JWT_PUBLIC_KEY: ${JWT_PUBLIC_KEY}
104+
SESSION_KEY: ${SESSION_KEY}
105+
NATS_URL: http://ticketing-nats:4222
106+
NATS_CLUSTER_ID: ticketing
107+
MONGODB_URI: mongodb://ticketing-mongo:27017/auth
108+
healthcheck:
109+
test: node ./healthcheck.js http://0.0.0.0:${AUTH_HTTP_PORT:-3000}/$GLOBAL_API_PREFIX/health
110+
interval: 60s
111+
timeout: 3s
112+
start_period: 10s
113+
retries: 2
114+
depends_on:
115+
- mongo
116+
- nats-streaming
117+
ports:
118+
- '${AUTH_HTTP_PORT:-3000}:${AUTH_HTTP_PORT:-3000}'
119+
networks:
120+
- mongo
121+
- nats-streaming
122+
- apps
123+
mem_limit: 256m
124+
memswap_limit: 512m
125+
restart: always
126+
profiles:
127+
- 'services-only'
128+
- 'dev'
129+
130+
expiration-service:
131+
image: 'ghcr.io/getlarge/ticketing-expiration:${EXPIRATION_IMAGE_VERSION:-latest}'
132+
container_name: expiration-service
133+
hostname: expiration-service
134+
environment:
135+
NODE_ENV: ${NODE_ENV:-development}
136+
LOG_LEVEL: ${LOG_LEVEL:-info}
137+
PORT: ${EXPIRATION_HTTP_PORT:-3030}
138+
SERVER_URL: http://127.0.0.1:${EXPIRATION_HTTP_PORT:-3030}
139+
PROXY_SERVER_URLS: ${PROXY_SERVER_URLS:-http://ticketing.dev}
140+
NATS_URL: http://ticketing-nats:4222
141+
NATS_CLUSTER_ID: ticketing
142+
REDIS_URL: redis://ticketing-redis:6379
143+
healthcheck:
144+
test: node ./healthcheck.js http://0.0.0.0:${EXPIRATION_HTTP_PORT:-3000}/${GLOBAL_API_PREFIX:-api}/health
145+
interval: 60s
146+
timeout: 3s
147+
start_period: 10s
148+
retries: 2
149+
depends_on:
150+
- redis
151+
- nats-streaming
152+
ports:
153+
- '${EXPIRATION_HTTP_PORT:-3030}:${EXPIRATION_HTTP_PORT:-3030}'
154+
networks:
155+
- redis
156+
- nats-streaming
157+
- apps
158+
mem_limit: 256m
159+
memswap_limit: 512m
160+
restart: always
161+
profiles:
162+
- 'services-only'
163+
- 'dev'
164+
165+
orders-service:
166+
image: 'ghcr.io/getlarge/ticketing-orders:${ORDERS_IMAGE_VERSION:-latest}'
167+
container_name: orders-service
168+
hostname: orders-service
169+
environment:
170+
NODE_ENV: ${NODE_ENV:-development}
171+
LOG_LEVEL: ${LOG_LEVEL:-info}
172+
PORT: ${ORDERS_HTTP_PORT:-3020}
173+
SERVER_URL: http://127.0.0.1:${ORDERS_HTTP_PORT:-3020}
174+
PROXY_SERVER_URLS: ${PROXY_SERVER_URLS:-http://ticketing.dev}
175+
FRONTEND_URL: ${FRONTEND_URL:-http://ticketing.dev}
176+
JWT_ALGORITHM: ${JWT_ALGORITHM:-ES256}
177+
JWT_EXPIRES_IN: ${JWT_EXPIRES_IN:-60m}
178+
JWT_ISSUER: ${JWT_ISSUER:-ticketing.dev}
179+
JWT_PRIVATE_KEY: ${JWT_PRIVATE_KEY}
180+
JWT_PUBLIC_KEY: ${JWT_PUBLIC_KEY}
181+
SESSION_KEY: ${SESSION_KEY}
182+
NATS_URL: http://ticketing-nats:4222
183+
NATS_CLUSTER_ID: ticketing
184+
MONGODB_URI: mongodb://ticketing-mongo:27017/orders
185+
healthcheck:
186+
test: node ./healthcheck.js http://0.0.0.0:${ORDERS_HTTP_PORT:-3020}/${GLOBAL_API_PREFIX:-api}/health
187+
interval: 60s
188+
timeout: 3s
189+
start_period: 10s
190+
retries: 2
191+
depends_on:
192+
- mongo
193+
- nats-streaming
194+
ports:
195+
- '${ORDERS_HTTP_PORT:-3020}:${ORDERS_HTTP_PORT:-3020}'
196+
networks:
197+
- mongo
198+
- nats-streaming
199+
- apps
200+
mem_limit: 256m
201+
memswap_limit: 512m
202+
restart: always
203+
profiles:
204+
- 'services-only'
205+
- 'dev'
206+
207+
payments-service:
208+
image: 'ghcr.io/getlarge/ticketing-payments:${PAYMENTS_IMAGE_VERSION:-latest}'
209+
container_name: payments-service
210+
hostname: payments-service
211+
environment:
212+
NODE_ENV: ${NODE_ENV:-development}
213+
LOG_LEVEL: ${LOG_LEVEL:-info}
214+
PORT: ${PAYMENTS_HTTP_PORT:-3040}
215+
SERVER_URL: http://127.0.0.1:${PAYMENTS_HTTP_PORT:-3040}
216+
PROXY_SERVER_URLS: ${PROXY_SERVER_URLS:-http://ticketing.dev}
217+
FRONTEND_URL: ${FRONTEND_URL:-http://ticketing.dev}
218+
JWT_ALGORITHM: ${JWT_ALGORITHM:-ES256}
219+
JWT_EXPIRES_IN: ${JWT_EXPIRES_IN:-60m}
220+
JWT_ISSUER: ${JWT_ISSUER:-ticketing.dev}
221+
JWT_PRIVATE_KEY: ${JWT_PRIVATE_KEY}
222+
JWT_PUBLIC_KEY: ${JWT_PUBLIC_KEY}
223+
SESSION_KEY: ${SESSION_KEY}
224+
NATS_URL: http://ticketing-nats:4222
225+
NATS_CLUSTER_ID: ticketing
226+
MONGODB_URI: mongodb://ticketing-mongo:27017/payments
227+
STRIPE_PUBLISHABLE_KEY: ${STRIPE_PUBLISHABLE_KEY}
228+
STRIPE_SECRET_KEY: ${STRIPE_SECRET_KEY}
229+
STRIPE_ENDPOINT_SECRET: ${STRIPE_ENDPOINT_SECRET}
230+
healthcheck:
231+
test: node ./healthcheck.js http://0.0.0.0:${PAYMENTS_HTTP_PORT:-3040}/${GLOBAL_API_PREFIX:-api}/health
232+
interval: 60s
233+
timeout: 3s
234+
start_period: 10s
235+
retries: 2
236+
depends_on:
237+
- mongo
238+
- nats-streaming
239+
ports:
240+
- '${PAYMENTS_HTTP_PORT:-3040}:${PAYMENTS_HTTP_PORT:-3040}'
241+
networks:
242+
- mongo
243+
- nats-streaming
244+
- apps
245+
mem_limit: 256m
246+
memswap_limit: 512m
247+
restart: always
248+
profiles:
249+
- 'services-only'
250+
- 'dev'
251+
252+
tickets-service:
253+
image: 'ghcr.io/getlarge/ticketing-tickets:${TICKETS_IMAGE_VERSION:-latest}'
254+
container_name: tickets-service
255+
hostname: tickets-service
256+
environment:
257+
NODE_ENV: ${NODE_ENV:-development}
258+
LOG_LEVEL: ${LOG_LEVEL:-info}
259+
PORT: ${TICKETS_HTTP_PORT:-3010}
260+
SERVER_URL: http://127.0.0.1:${TICKETS_HTTP_PORT:-3010}
261+
PROXY_SERVER_URLS: ${PROXY_SERVER_URLS:-http://ticketing.dev}
262+
FRONTEND_URL: ${FRONTEND_URL:-http://ticketing.dev}
263+
JWT_ALGORITHM: ${JWT_ALGORITHM:-ES256}
264+
JWT_EXPIRES_IN: ${JWT_EXPIRES_IN:-60m}
265+
JWT_ISSUER: ${JWT_ISSUER:-ticketing.dev}
266+
JWT_PRIVATE_KEY: ${JWT_PRIVATE_KEY}
267+
JWT_PUBLIC_KEY: ${JWT_PUBLIC_KEY}
268+
SESSION_KEY: ${SESSION_KEY}
269+
NATS_URL: http://ticketing-nats:4222
270+
NATS_CLUSTER_ID: ticketing
271+
MONGODB_URI: mongodb://ticketing-mongo:27017/tickets
272+
healthcheck:
273+
test: node ./healthcheck.js http://0.0.0.0:${TICKETS_HTTP_PORT:-3010}/${GLOBAL_API_PREFIX:-api}/health
274+
interval: 60s
275+
timeout: 3s
276+
start_period: 10s
277+
retries: 2
278+
depends_on:
279+
- mongo
280+
- nats-streaming
281+
ports:
282+
- '${TICKETS_HTTP_PORT:-3010}:${TICKETS_HTTP_PORT:-3010}'
283+
networks:
284+
- mongo
285+
- nats-streaming
286+
- apps
287+
mem_limit: 256m
288+
memswap_limit: 512m
289+
restart: always
290+
profiles:
291+
- 'services-only'
292+
- 'dev'
293+
294+
ng-client:
295+
image: 'ghcr.io/getlarge/ticketing-ng-client:${CLIENT_IMAGE_VERSION:-latest}'
296+
container_name: ng-client
297+
hostname: ng-client
298+
healthcheck:
299+
test: curl -f http://localhost:3000
300+
ports:
301+
- '4200:3000'
302+
networks:
303+
- apps
304+
mem_limit: 256m
305+
memswap_limit: 512m
306+
restart: always
307+
profiles:
308+
- 'services-only'
309+
- 'dev'
310+
311+
nginx:
312+
container_name: ticketing-nginx
313+
build:
314+
context: infra/nginx
315+
dockerfile: Dockerfile
316+
args:
317+
- TEMPLATE=nginx.template
318+
environment:
319+
- DOMAIN=${NGINX_DOMAIN:-ticketing.dev}
320+
- PORT=8080
321+
- FRONTEND_PORT=3000
322+
- FRONTEND=ng-client
323+
- AUTH_SERVICE=auth-service
324+
- ORDERS_SERVICE=orders-service
325+
- PAYMENTS_SERVICE=payments-service
326+
- TICKETS_SERVICE=tickets-service
327+
- AUTH_SERVICE_PORT=${AUTH_HTTP_PORT:-3000}
328+
- ORDERS_SERVICE_PORT=${ORDERS_HTTP_PORT:-3020}
329+
- PAYMENTS_SERVICE_PORT=${PAYMENTS_HTTP_PORT:-3040}
330+
- TICKETS_SERVICE_PORT=${TICKETS_HTTP_PORT:-3010}
331+
depends_on:
332+
ng-client:
333+
condition: service_started
334+
auth-service:
335+
condition: service_started
336+
orders-service:
337+
condition: service_started
338+
payments-service:
339+
condition: service_started
340+
tickets-service:
341+
condition: service_started
342+
# condition: service_healthy
343+
networks:
344+
- apps
345+
ports:
346+
- '${NGINX_HTTP_PORT:-80}:8080'
347+
restart: always
348+
profiles:
349+
- 'services-only'
350+
- 'dev'

package.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@
3131
"docker:proxy:up": "docker run -d --rm --name nginx-proxy --env-file infra/nginx/.env -p 127.0.0.1:80:8080/tcp ticketing/nginx-proxy",
3232
"docker:proxy:down": "docker kill nginx-proxy",
3333
"docker:proxy:log": "docker logs -f --tail=100 nginx-proxy",
34+
"docker:dev:up": "docker-compose -p ticketing --env-file .env.docker --profile dev up -d",
35+
"docker:dev:down": "docker-compose -p ticketing --env-file .env.docker --profile dev down",
36+
"docker:dev:log": "docker-compose -p ticketing logs -f --tail=100",
37+
"docker:deps:up": "docker-compose -p ticketing --env-file .env.docker --profile deps-only up -d",
38+
"docker:deps:down": "docker-compose -p ticketing --env-file .env.docker --profile deps-only down",
39+
"docker:deps:clean": "docker volume rm ticketing_mongo_volume ; docker volume rm ticketing_redis_volume ; docker volume rm ticketing_nats_volume",
40+
"docker:deps:log": "docker-compose -p ticketing logs -f --tail=100",
3441
"k8s:jwt-secret": "kubectl create secret generic jwt-secret --from-env-file ./keys/.env",
3542
"k8s:stripe-secret": "kubectl create secret generic stripe-secret --from-env-file ./infra/k8s/apps/.env.stripe",
3643
"k8s:dev:deps": "skaffold dev --module deps --port-forward",

skaffold.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ build:
6767
custom:
6868
buildCommand: npx nx run payments:docker-build --conf=development --tag=dev
6969
dependencies:
70-
command: node ./tools/nx/get-dependencies-cli.js -p payments
70+
command: node ./tools/nx/get-dependencies-cli.js -p payments
7171
# CLIENT - NEXTJS
7272
# - image: ghcr.io/getlarge/ticketing-client
7373
# context: .

0 commit comments

Comments
 (0)