본문 바로가기
개인공부/배포

미니 피씨의 젠킨스를 이용한 ci/cd 작업 - nginx, mysql 마운트하기 위한 환경설정 (3)

by 응가1414 2023. 9. 2.

nginx, mysql 마운트하기 위한 환경설정

nginx, mysql 마운트하기 위한 환경설정

 이부분
 ├── database
 │   └── mysql
 │       └─── my.cnf
 ├── nginx
 │   └── nginx.conf
 │       └── nginx.conf

폴더 구성 (제발 보세요) 깃도 보면서 비교

 폴더 구성 기본 폴더는 docker-compose.yml 이있는 폴더가 root 폴더입니다.
 ├── backend
 │   └── spring-boot-3
 │       └─── Dockerfile
 ├── database
 │   └── mysql
 │       ├─── Dockerfile
 │       └─── my.cnf
 ├── frontend
 │   └─── Dockerfile
 ├── nginx
 │   ├── Dockerfile
 │   └── nginx.conf
 │       └── nginx.conf
 └── docker-compose.yml

1. ./nginx/nginx.conf 의 nginx.conf의 환경파일 생성

 # /nginx/nginx.conf
 ​
 upstream frontend-nextjs {
     # 사용시 변경 향후 컨테이너이름:포트번호
     # max_fails 3;은 3번의 연속 실패 후에 서버를 '망가진' 상태로 표시합니다.
     # fail_timeout 10s;는 서버가 실패한 후 10초 동안 망가진 상태로 유지되며, 이 기간 동안 추가 연결 시도가 거부됩니다.
     server compose-frontend-nextjs:3000 max_fails=3 fail_timeout=10s; 
 }
 ​
 upstream backend-spring-boot-3 {
     # 사용시 변경 컨테이너이름:포트번호
     server compose-backend-spring-boot-3:8080 max_fails=3 fail_timeout=10s;
 }
 ​
 server {
     # listen 80;: 이 설정은 Nginx가 IPv4 주소를 사용하여 80번 포트에서 들어오는 
     # HTTP 요청을 수신하도록 지시합니다. 
     # 80번 포트는 일반적으로 HTTP 트래픽을 처리하는 데 사용됩니다.
     listen 80;
     # listen [::]:80;: 이 설정은 Nginx가 IPv6 주소를 지원하며, 
     # IPv6 주소에서 80번 포트에서 들어오는 HTTP 요청도 수신하도록 지시합니다. 
     listen [::]:80;
 ​
     location / {        
         # proxy_pass는 클라이언트의 요청을 이 업스트림 서버로 전달합니다.
         proxy_pass http://frontend-nextjs;
 ​
         # HTTP 버전 1.1을 사용하도록 Nginx에 지시합니다.
         proxy_http_version 1.1;
 ​
         # 이 설정은 HTTP 업그레이드 헤더를 설정합니다. 
         # $http_upgrade는 클라이언트의 요청에서 업그레이드 헤더의 값을 가져와서 
         # 백엔드 서버로 전달합니다. 
         # 이렇게 함으로써 웹 소켓과 같은 업그레이드 요청을 올바르게 처리할 수 있습니다.
         proxy_set_header Upgrade $http_upgrade; 
 ​
         # Connection 헤더를 'upgrade'로 설정합니다. 
         # 이것은 HTTP 연결을 업그레이드하도록 요청하는 데 사용됩니다.
         proxy_set_header Connection 'upgrade'; 
 ​
         # Host 헤더를 클라이언트의 원래 Host 헤더 값으로 설정합니다. 
         # 이것은 요청이 백엔드 서버에 도달할 때 올바른 호스트 이름으로 전달되도록 합니다.
         proxy_set_header Host $host;  
     }
 ​
     location /api {        
         # rewrite /api/(.*) /$1 break; 이 설정은 URL에서 
         # /api/ 다음의 모든 것을 가져와서 /로 재작성합니다. 
         #$ 1은 정규식 그룹을 나타내며, /api/ 다음의 경로를 그룹으로 캡처합니다. 
         # 그런 다음 /와 함께 캡처한 경로를 조합하여 URL을 재작성합니다.
             # 예를 들어, 클라이언트가 /api/some/route로 요청하면 
             #이 설정은 해당 요청을 /some/route로 재작성합니다. 
             # 이렇게 하면 실제 요청이 /some/route로 전달되며, 
             # /api/ 부분은 URL에서 제거됩니다.
         rewrite /api/(.*) /$1 break;
 ​
         # proxy_pass는 클라이언트의 요청을 이 업스트림 서버로 전달합니다.
         proxy_pass http://backend-spring-boot-3;
 ​
         # HTTP 버전 1.1을 사용하도록 Nginx에 지시합니다.
         proxy_http_version 1.1; 
 ​
           # 이 설정은 HTTP 업그레이드 헤더를 설정합니다. 
         # $http_upgrade는 클라이언트의 요청에서 업그레이드 헤더의 값을 가져와서 
         # 백엔드 서버로 전달합니다. 
         # 이렇게 함으로써 웹 소켓과 같은 업그레이드 요청을 올바르게 처리할 수 있습니다.
         proxy_set_header Upgrade $http_upgrade;
         
         # Connection 헤더를 'upgrade'로 설정합니다. 
         # 이것은 HTTP 연결을 업그레이드하도록 요청하는 데 사용됩니다.
         proxy_set_header Connection 'upgrade';
 ​
         # proxy_set_header: 이 지시문은 Nginx에서 요청 헤더를 설정하는 데 사용됩니다.
         # Host: 요청 헤더 중 하나로, 클라이언트가 요청한 호스트(도메인)를 나타냅니다.
         # $host: Nginx 내장 변수 중 하나로, 현재 요청을 받은 서버에 대한 호스트 정보를 나타냅니다. 이 값은 클라이언트가 요청한 호스트와 일치하게 설정됩니다.
         proxy_set_header Host $host; 
 ​
         # 이 헤더는 모든 Origin(모든 도메인)에서 리소스에 접근을 허용합니다. *는 모든 도메인을 나타냅니다. 
         # 이를 통해 어떤 Origin에서도 해당 리소스에 접근할 수 있게 됩니다.
         add_header 'Access-Control-Allow-Origin' '*';
         # 요청이 인증 정보(예: 쿠키, 인증 토큰)를 포함하고 있을 때 CORS 요청을 허용하는지 여부를 지정합니다. 
         # true로 설정되어 있으므로 인증 정보가 있는 요청도 허용됩니다.
         add_header 'Access-Control-Allow-Credentials' 'true';
         # 허용되는 HTTP 메서드를 지정합니다. 이 경우, GET, POST 및 OPTIONS 메서드가 허용됩니다.
         add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
         # 허용되는 HTTP 헤더를 지정합니다. 이 헤더는 다양한 표준 및 사용자 지정 헤더를 허용하며, 다양한 클라이언트 요청을 처리하기 위해 사용됩니다. 
         # 이 예에서는 DNT, X-CustomHeader, Keep-Alive, User-Agent 등 다양한 헤더를 허용하고 있습니다.
         add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
     }
 }

2. .database/mysql 의 my.cnf 파일 설정

 # For advice on how to change settings please see
 # http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html
 ​
 [mysqld]
 #
 # Remove leading # and set to the amount of RAM for the most important data
 # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
 # innodb_buffer_pool_size = 128M
 #
 # Remove leading # to turn on a very important data integrity option: logging
 # changes to the binary log between backups.
 # log_bin
 #
 # Remove leading # to set options mainly useful for reporting servers.
 # The server defaults are faster for transactions and fast SELECTs.
 # Adjust sizes as needed, experiment to find the optimal values.
 # join_buffer_size = 128M
 # sort_buffer_size = 2M
 # read_rnd_buffer_size = 2M
 ​
 # Remove leading # to revert to previous value for default_authentication_plugin,
 # this will increase compatibility with older clients. For background, see:
 # https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
 # default-authentication-plugin=mysql_native_password
 ​
 character-set-server=utf8mb4
 collation-server=utf8mb4_unicode_ci
 skip-character-set-client-handshake
 ​
 skip-host-cache
 skip-name-resolve
 datadir=/var/lib/mysql
 socket=/var/run/mysqld/mysqld.sock
 secure-file-priv=/var/lib/mysql-files
 user=mysql
 ​
 pid-file=/var/run/mysqld/mysqld.pid
 [client]
 socket=/var/run/mysqld/mysqld.sock
 ​
 !includedir /etc/mysql/conf.d/