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/
'개인공부 > 배포' 카테고리의 다른 글
미니 피씨의 젠킨스를 이용한 ci/cd 작업 - 젠킨스 와 docker-compose Jenkins pipeline (4) (0) | 2023.09.02 |
---|---|
미니 피씨의 젠킨스를 이용한 ci/cd 작업 - Dockerfile생성 (2) (0) | 2023.09.01 |
미니 피씨의 젠킨스를 이용한 ci/cd 작업 - 프로젝트 설명 (1) (0) | 2023.09.01 |