forked from PyeonHalLae/Pnale
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
119 lines (110 loc) · 4.23 KB
/
docker-compose.yml
File metadata and controls
119 lines (110 loc) · 4.23 KB
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
# 도커 컴포즈 버전 작성
version: "3"
# 도커 네트워크
networks:
special_network:
# 도커 컴포즈로 수행할 항목을 작성하다. service, networks, volumes: 등 존재
services: #컨테이너를 정의하는 것
#=========================================
# reverse proxy를 위한 외부 nginx 선언
#=========================================
external_nginx:
image: nginx:1.25.2 #사용되는 이미지
container_name : external_nginx
# 도커 내부 네트워크
networks:
- special_network
# 호스트와 컨테이너의 데이터를 바인딩한다(볼륨 바인딩)
# jenkins에 의해 compose가 실행되므로 var/jenkins_home하위 디렉토리에서 데이터를 가져온다.
volumes:
- /home/ubuntu/special_config/data/nginx/external_nginx.conf:/etc/nginx/conf.d/default.conf
#- /home/ubuntu/special_config/data/nginx:/etc/nginx/conf.d
- /home/ubuntu/special_config/data/certbot/conf:/etc/letsencrypt #nginx
- /home/ubuntu/special_config/data/certbot/www:/var/www/certbot
restart: unless-stopped
depends_on:
- special_be
- special_fe
# 외부에 공개할 포트들을 선언한다.
ports:
- "80:80"
- "443:443"
expose:
- "80"
- "443"
# certbot에서 갱신된 인증서를 확인하는 코드
command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
# nginx 실행 명령어 : 무한루프를 만들어 주기적으로 다시 로드하는 역할
# 6시간 마다 재 로드를 수행한다
# & : 백그라운드에서 동작토록 한다.
# daemon off : 데몬 모드로 실행 -> -g를 통해 전역(global)하게 사용 가능하며 포그라운드엣 ㅓ동작토록 한다.
#=========================================
# certbot 선언
#=========================================
certbot:
image: certbot/certbot:latest
container_name: special_certbot
networks:
- special_network
volumes:
- /home/ubuntu/special_config/data/certbot/conf:/etc/letsencrypt #nginx
- /home/ubuntu/special_config/data/certbot/www:/var/www/certbot
restart: unless-stopped
# 자동으로 읹ㅇ서를 갱신 해주는 코드다.
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
#=========================================
# Springboot 선언
#=========================================
special_be:
image: minyumanyu/special_be:latest # 도커 허브에 올리면 그것을 그대로 이용해도 된다.
container_name: special_be
networks:
- special_network
environment:
- TZ=Asia/Seoul
build:
context: ./BackEnd
dockerfile: Dockerfile
volumes : #applicaion.properties 같은 파일을 저장하는 공간
- /home/ubuntu/special_config/config/spring:/var/jenkins_home/Special/BackEnd/src/main/resources:ro
restart: always
expose:
- "9999"
#=========================================
# react 선언
#=========================================
special_fe:
image: minyumanyu/special_fe:latest
container_name: special_fe
networks:
- special_network
environment:
- TZ=Asia/Seoul
build:
context: ./FrontEnd
dockerfile: Dockerfile
restart: always
expose: # expose 컨테이너 내부에서 도커 컨테이너에게 열어주는 포트
- "5173"
# ports: 외부 nginx를 적용해 호스트에 직접 접근할 필요가 없기 때문에 port가 아닌 expose로 변겨한다.
# - "3000:5173" #
#=========================================
# react 선언
#=========================================
special_mysql:
image: mysql:8.0.34
volumes:
- /home/ubuntu/mysqlData:/var/lib/mysql
networks:
- special_network
environment:
- TZ=Asia/Seoul
ports:
- "4906"
expose:
- "3306"
# react, spring은 restart : always
# nginx, certbot은 restart : unless-stopeed?
# 중요한 서비스는 종료되도 다시 시작되도록 보장해야함
# ssl인증서와 웹 서버 역할을 하기 떄문에 서비스를 중단할 필요가 없다
# 명시적으로 수동 중지 하지 않는 이상 계속 실행되게