728x90
반응형
728x90
반응형
반응형

환경: mac

 

설치

brew install redis

 

접속

// 단일 노드 접근
redis-cli -h alpha-redis-master.abc.net -p 6006 -a {pwd}

// 클러스터 접근
redis-cli -c -h alpha-redis-master.abc.net -p 6001 -a {pwd}
728x90
반응형

'서버 세팅 & tool > vm on mac' 카테고리의 다른 글

[terminal] alias in mac terminal  (0) 2022.06.08
[parallels] local server not working on parallels  (0) 2022.04.11
[vm] nginx 설치  (0) 2022.02.24
[parallels] nox...... 99%.....  (0) 2022.02.23
[vm] axon server 설치  (0) 2022.01.12
반응형

기업에서 서버팜을 구축하게 되면 어플리케이션 서버 전에 여러 단계의 라우터나 스위치, 로드발랜서 등등이 구축되어 실제 요청한 사람의 ip를 알기 어려워지게 된다.

소스로 말하자면 아래 값이 로컬이 나오거나 내부 장비의 ip가 찍히는 상황이 생기게 된다.

HttpServletRequest request;
request.getRemoteAddr();

 

그리하여 실제로 요청한 사람/장비의 ip를 알기 어려워지는데.. 아래와 같이 설정하면 해결할 수 있다.

 

1. nginx 설정

1-1. nginx map 설정(생략가능)

map은 다음과 같이 $key라는 변수를 받아 $value라는 결과값을 매핑해준다.
아래 코드에서 $key 값이 a라면, $value 값은 1이다.

map $key $value {
  a 1;
  b 2;
  default 0;
}

map 규칙은 위처럼 쓸 수도 있지만, 다른 파일에 분리해 둔 뒤 받아올 수도 있다.
가령 위의 규칙을 map-rule이라는 파일에 아래와 같이 분리하면:

a 1;
b 2;

다음과 같이 파일의 상대 include할 수 있다:

map $key $value {
  include PATH/TO/map-rule; # map-rule 파일의 절대 경로
  default 0;
}

 

위 map을 사용하여 아래처럼 clientip 라는 변수에 값을 담는다.

    map $http_x_forwarded_for $clientip {
        "" $remote_addr;
        default $http_x_forwarded_for;
    }

 

1-2. server.location 세팅

clientip를 아래와 같이 세팅한다. 

  proxy_set_header   X-Forwarded-For  $clientip;

대략적인 큰 그림은 아래와 같다.

 server {
        listen       80;
        server_name  server.abc.com;
        server_tokens off;
        
        ...
        
        location / {
        	//여기부터
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $clientip;
            여기까지//
            proxy_set_header Connection "";
            proxy_http_version 1.1;
            proxy_pass http://localhost:8200;
        }
    }

 

1-3. nginx reload

nginx -s reload

 

2. 소스 변경

애플리케이션에서 X-Forwarded-For 헤더를 사용하도록 아래 두 가지 방법 중 하나를 적용해야 한다.
  1. HttpServletRequestWrapper 를 사용해서 getRemoteAddr 를 상속 -> 별도로 필터 개발 필요
  2. server.tomcat.remoteip.remote-ip-header 프로퍼티 설정

2번 방식이 더 쉽고 빠르다고 생각하여 적용해본다.

적용하기 전에, 버전 별로 키값이 달라지니 스프링 공식 문서는 꼭 확인해보자.

https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto.webserver.use-behind-a-proxy-server

 

“How-to” Guides

Spring Boot has no mandatory logging dependency, except for the Commons Logging API, which is typically provided by Spring Framework’s spring-jcl module. To use Logback, you need to include it and spring-jcl on the classpath. The recommended way to do th

docs.spring.io

https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties.server

 

Common Application Properties

 

docs.spring.io

지금 상황에서 연관있는 값은 아래 값인 것 같다. 기본 값은 없다.

# springboot2.2 버전 이상이면
server.tomcat.remoteip.remote-ip-header=X-FORWARDED-FOR

# 구버전
#server.tomcat.remote-ip-header=X-FORWARDED-FOR

경우에 따라서는 아래 값도 조정해야할 수 있다.

server.tomcat.remoteip.internal-proxies

이 값은 신뢰할 내부 프록시를 매칭하는 값이다. 정규식으로 작성해야하며 기본값은 아래와 같다. 일반적으로는 기본값으로도 사용가능하지만 프로덕션 환경에서 내부 프록시 ip들이 해당 범위를 넘어갈 수도 있으니 확인이 필요하다. 참고로 공백으로 설정하면 모든 프록시를 신뢰한다는 뜻으로 프로덕션 환경에서는 이렇게 설정하면 위험할 수 있으니 주의해야 한다.

  • 10/8
  • 192.168/16
  • 169.254/16
  • 127/8
  • 등등(공식 문서 확인 필요)

 

728x90
반응형

'서버 세팅 & tool > nginx' 카테고리의 다른 글

라이브환경 인증서 교체  (0) 2024.01.08
[이슈해결][apache] 304 NOT_MODIFIED  (0) 2023.10.12
[nginx] WAF  (0) 2022.03.30
[nginx] API gateway  (0) 2022.03.14
[nginx] 실전 cors 해결하기  (0) 2022.03.14
반응형

환경: windows11, springboot2.7.6, java17

 

springboot 프로젝트인 catalog service 를 도커에 올려본다.

 

1. pom.xml 경로에 Dockerfile 생성

FROM openjdk:17-ea-slim-buster
VOLUME /tmp
COPY target/catalog-service-1.0.jar catalog-service.jar
ENTRYPOINT ["java", "-jar", "catalog-service.jar"]

pom.xml 파일 확인하여 jar가 위 이름으로 빌드되는지 확인 필요

 

2. 도커 이미지 생성

mvn clean compile package -DskipTests=true
docker build -t haileyjhbang/catalog-service:1.0 .  //도커이미지생성

 

3. 도커 이미지 -> repository 푸시

docker push haileyjhbang/catalog-service:1.0

 

4. 도커 실행

실행 시 사용 중인 외부 접속 정보가 있으면 아래처럼 전달하는 방법 사용

소스&application.yml 파일 내/외부 꼼곰히 확인 필요

해당 부분 수정 필

docker run -d --network ecommerce-network --name catalog-service -e "eureka.client.serviceUrl.defaultZone=http://discovery-service:8761/eureka/" -e "logging.file=/api-logs/catalog-test.log" haileyjhbang/catalog-service:1.0

 

docker network insepect ecommerce-network
localhost:8761

성공적..

728x90
반응형
반응형

환경: windows11, springboot2.7.6, java17

 

springboot 프로젝트인 order service 를 도커에 올려본다.

 

1. pom.xml 경로에 Dockerfile 생성

FROM openjdk:17-ea-slim-buster
VOLUME /tmp
COPY target/order-service-1.0.jar order-service.jar
ENTRYPOINT ["java", "-jar", "order-service.jar"]

pom.xml 파일 확인하여 jar가 위 이름으로 빌드되는지 확인 필요

 

2. 도커 이미지 생성

mvn clean compile package -DskipTests=true
docker build -t haileyjhbang/order-service:1.0 .  //도커이미지생성

 

3. 도커 이미지 -> repository 푸시

docker push haileyjhbang/order-service:1.0

 

4. 도커 실행

실행 시 사용 중인 외부 접속 정보가 있으면 아래처럼 전달하는 방법 사용

소스&application.yml 파일 내/외부 꼼곰히 확인 필요

docker run -d --network ecommerce-network --name order-service -e "spring.zipkin.base-url=http://zipkin:9411" -e "eureka.client.serviceUrl.defaultZone=http://discovery-service:8761/eureka/" -e "spring.datasource.url=jdbc:mariadb://mariadb:3306/mydb" -e "logging.file=/api-logs/orders-test.log" haileyjhbang/order-service:1.0

 

띄우고 로그를 보는데 아래와 같이 실패가 났음

패스워드 이상하다는 에러여서 설정 파일 확인

알고보니 로컬에서는 1234로 설정해서 설정파일에 1234로 되어 있었는데, 도커에 마리아 세팅할 때는 다른 패스워드로 하는 바람에 실패난 것. 패스워드를 외부에서 주입받거나 하는 방식도 있겠지만, 우선 수정하고 다시 컴파일하고 도커 이미지 지우고 다시 런하니 성공하였다..

유레카에 등록도 성

성공적..

728x90
반응형
반응형

환경: windows11, springboot2.7.6, java17

 

springboot 프로젝트인 user service 를 도커에 올려본다.

 

1. pom.xml 경로에 Dockerfile 생성

FROM openjdk:17-ea-slim-buster
VOLUME /tmp
COPY target/user-service-1.0.jar user-service.jar
ENTRYPOINT ["java", "-jar", "user-service.jar"]

pom.xml 파일 확인하여 jar가 위 이름으로 빌드되는지 확인 필요

 

2. 도커 이미지 생성

mvn clean compile package -DskipTests=true
docker build -tag haileyjhbang/user-service:1.0 .  //도커이미지생성

 

3. 도커 이미지 -> repository 푸시

docker push haileyjhbang/user-service:1.0

4. 도커 실행

실행 시 사용 중인 외부 접속 정보가 있으면 아래처럼 전달하는 방법 사용

소스&application.yml 파일 내/외부 꼼곰히 확인 필요

docker run -d --network ecommerce-network --name user-service -e "spring.cloud.config.uri=http://config-service:8888" -e "spring.rabbitmq.host=rabbitmq" -e "spring.zipkin.base-url=http://zipkin:9411" -e "eureka.client.serviceUrl.defaultZone=http://discovery-service:8761/eureka/" -e "logging.file=/api-logs/users-ws.log" haileyjhbang/user-service:1.0

docker network inspect ecommerce-network
docker logs user-service

성공적..

728x90
반응형
반응형

환경: windows11, springboot2.7.6, java17

 

공식 사이트에서 제공하는 도커 이미지를 띄워보기

도커이미지

프로메테우스 

https://hub.docker.com/u/prom

 

Docker

 

hub.docker.com

그라파나 

https://grafana.com/docs/grafana/latest/setup-grafana/installation/docker/

 

Run Grafana Docker image | Grafana documentation

Enterprise Open source Run Grafana Docker image You can use Grafana Cloud to avoid installing, maintaining, and scaling your own instance of Grafana. Create a free account to get started, which includes free forever access to 10k metrics, 50GB logs, 50GB t

grafana.com


프로메테우스

프로메테우스의 job이 적인 prometheus.yml을 열어서 localhost를 도커에 맞게 변경한다.

prometheus.yml 전

8000 포트는 게이트웨이임.

9090 포트는 프로메테우스인데 도커로 띄울 때 이름을 미리 적어준다.

prometheus.yml 후

 

그리고 해당 prometheus.yml 파일을 로컬에서 프로메테우스 컨테이너 내부로 이동해야 함.

도커 실행 시 volume mount(-v 옵션)를 통해서 설정파일만 옮기게 되면 파일을 직접 컨트롤하지 않더라고 호스트 pc의 내용을 이용하여 컨테이너를 기동 할 수 있게 됨(공유 폴더 같이..)

-v from:to

docker run -d -p 9090:9090 --network ecommerce-network --name prometheus -v C:/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

사이트에서 제공하는 명령어에 네트워크 옵션이랑 -v 옵션주고 파일의 경로를 명시한다.

참고로 - v 이후 입력하는 파일 경로에 대문자나 띄어쓰기가 있으면 아래와 같은 에러가 나서 임시로 C아래로 이동해서 실행시켰다.

docker: invalid reference format: repository name (Downloads/prometheus-2.49.1.windows-amd64/prometheus-2.49.1.windows-amd64/prometheus.yml) must be lowercase.

 

그라파나

docker run -d -p 3000:3000 --network ecommerce-network --name grafana grafana/grafana

 

docker ps -a
docker network inspect ecommerce-network

 

마찬가지로 포트 포워딩이 되어있기 때문에 로컬호스트로 도커 이미지에 접근 가능하다.

9090 prometheus
3000 grafana admin/admin으로 로그인

728x90
반응형
반응형

환경: windows11, springboot2.7.6, java17

 

공식 사이트에서 제공하는 도커 이미지를 띄워보기

https://zipkin.io/pages/quickstart.html

 

Quickstart · OpenZipkin

Quickstart In this section we’ll walk through building and starting an instance of Zipkin for checking out Zipkin locally. There are three options: using Java, Docker or running from source. If you are familiar with Docker, this is the preferred method t

zipkin.io

이 이미지를 우리가 구축하고자 하는 ecommerce-network 안에서 뜨도록 네트워크 옵션을 추가하여 띄운다.

docker run -d -p 9411:9411 --network ecommerce-network --name zipkin openzipkin/zipkin

 

현재 도커에 zipkin이미지가 없기 때문에 다운로드 받아서 띄운다.

네트워크 확인

 docker network inspect ecommerce-network

로그 확인

포트포워딩을 해서 띄웠기 때문에 로컬(외부)에서 동일한 포트로 접근 가능

728x90
반응형
반응형

환경: windows11, springboot2.7.6, java17

 

DOCKER COMPOSE?

Simplified control: Docker Compose allows you to define and manage multi-container applications in a single YAML file. 

https://docs.docker.com/compose/intro/features-uses/#:~:text=Simplified%20control%3A%20Docker%20Compose%20allows,and%20replicate%20your%20application%20environment.

 

Why use Compose?

Key benefits and use cases of Docker Compose

docs.docker.com

이미 만들어진 카프카 도커 컴포즈 파일 이용

https://github.com/wurstmeister/kafka-docker

 

GitHub - wurstmeister/kafka-docker: Dockerfile for Apache Kafka

Dockerfile for Apache Kafka. Contribute to wurstmeister/kafka-docker development by creating an account on GitHub.

github.com

참고

 

docker-compose-single-broker.yml

싱글 도커 파일 열어보면 초기에 위와 같은데 도커 이미지와 포트 포워딩 정보가 적혀있다.

기존에 도커로 작업했던 ecommerce-network와 묶이도록 아래처럼 지정, 카프카와 주키퍼는 뜨는 ip를 지하여 후에 프로젝트에서 해당 ip로 접근하도록 수정해야 함.

저장하고 docker daemon(docker desktop)을 실행한다.

아래와 같은 명령어로 docker compose 실행

docker compose로 실행하면 그 안에 여러개의 컨테이너가 들어있어도 마치 하나의 컨테이너처럼 실행 가능하다.

docker-compose -f docker-compose-single-broker.yml up -d

 

위 명령어를 치면 이미지를 열심히 풀링하다가 아래와 같은 에러가 발생하면서 종료된다.

time="2024-02-25T15:00:21+09:00" level=warning msg="a network with name ecommerce-network exists but was not created by compose.\nSet `external: true` to use an existing network"
network ecommerce-network was found but has incorrect label com.docker.compose.network set to ""

아까 컴포즈 파일을 열어서 수정

external 추가

다시 실행하면 정상 실행된다.

네트워크도 확인해보면 지정된 ip로 잘 떴음을 확인할 수 있다.

docker network inspect ecommerce-network

 

728x90
반응형
반응형

환경: windows11, springboot2.7.6, java17

 

2024.02.18 - [서버 세팅 & tool/docker] - [windows] gateway server 세팅, docker 배포

2024.02.04 - [서버 세팅 & tool/kafka] - [windows] kakfa connect; mariadb 설치

 

마리아 DB는 프로젝트가 아니기 때문에 별도 폴더를 만들고 그 안에서 Dockerfile과 필요한 폴더 생성

기존에 로컬에서 작업 시 생성했던 쿼리를 그대로 도커에 올릴 예정

그러려면 로컬에 마리아 디비 설치 경로와, 해당 쿼리 파일이 있는 곳을 파악해야 함

 

로컬 디비 작업 파일 복사

  • 아래와 같은 방식대로 했을 때 잘 진행되지 않음.. 해결방법은 별도로 작성
C:\Program Files\MariaDB 11.2\data

해당 경로로 가서 아래 내용 확인

 

 data 폴더를 그대로 복사

도커 파일 작성

FROM mariadb
ENV MYSQL_ROOT_PASSWORD test1357
ENV MYSQL_DATABASE mydb
COPY ./mysql_data/data /var/lib/mysql
EXPOSE 3306
ENTRYPOINT ["mysqld"]

에러 발생

docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "mysqld": executable file not found in $PATH: unknown.

 

다른 방식으로 진행

버전 관련 문제인 듯하여 로컬에서 만들어진 데이터 베이스를 쿼리로 덤프 떠서 그걸 사용하는 방식으로 전환

1. cmd를 관리자 모드로 열기

2. 아래 명령어 실행

 

3. 해당 경로에 mydb.sql 생성 확인

 

4. 해당 파일을 Dockerfile 이 있는 경로에 옮기 도커 파일 수정

FROM mariadb
ENV MYSQL_ROOT_PASSWORD test1357
ENV MYSQL_DATABASE mydb
COPY ./mydb.sql /docker-entrypoint-initdb.d/
EXPOSE 3306

 

5. 도커 빌드 & 실행

docker build -t haileyjhbang/my-mariadb:1.0 . 
docker run -d -p 3306:3306  --network ecommerce-network --name mariadb haileyjhbang/my-mariadb:1.0

 

6. 도커 로그 확인

docker logs 컨테이너id

 

7. 도커 이미지 삭제

잘못 만들어진 이미지들을 지우기 위해서는 아래 명령어 사용

docker rmi  컨테이너id

 

8. 도커의 mariaDB에 접속하여 권한 등 확인

 docker exec -it mariadb bin/bash
 // 도커 안, 디비에 붙으면
 mariadb -h127.0.0.1 -uroot -p
 // 디비 접속
 //127.0.0.1 is not allowed to connect to ~sever 라는 에러가 뜨면 localhost로 시도

grant all privileges on *.* to 'root'@'%' identified by 'test1357';
//           모든 데이터베이스의 root라는 계정에 ip address 허용
flush privileges;
// 내용 반영

 

기타 명령어들로 mydb 데이터베이스 안 테이블/데이터가 덤프뜬대로 잘 나오는 것도 확인 가능 

728x90
반응형
반응형

환경: windows11, springboot2.7.6, java17

 

2024.02.12 - [서버 세팅 & tool/docker] - [windows] 네트워크 세팅, rabbitmq 세팅, config server 세팅

2024.02.18 - [서버 세팅 & tool/docker] - [windows] discovery server 세팅, docker 배포

 

gateway service를 도커에 배포하기

1. Dockerfile 생성

FROM openjdk:17-ea-slim-buster
VOLUME /tmp
COPY target/gateway-service-1.0.jar gateway-service.jar
ENTRYPOINT ["java", "-jar", "gateway-service.jar"]

 

2. 도커이미지 생성

 mvn clean compile package -DskipTests=true
 docker build -t haileyjhbang/gateway-service:1.0 .  //도커이미지생성

도커 이미지 생성 확인 

 

3. 레파지토리 푸시

도커 이미지를 허브 사이트에 올려보기

docker push haileyjhbang/gateway-service:1.0

 

4. 도커 실행

gateway server 서버는 유레카, rabbitmq 등 타 서버에 의존적이고 해당 정보는 도커에서는 다르게 적용되어야 하므로 실행 시 정보 추가 필요

docker run -d -p 8000:8000 --network ecommerce-network \
 -e "spring.cloud.config.uri=http://config-service:8888" \
 -e "spring.rabbitmq.host=rabbitmq" \
 -e "eureka.client.serviceUrl.defaultZone=http://discovery-service:8761/eureka/" \
 --name gateway-service \
 haileyjhbang/gateway-service:1.0

 

5. 상태 확인

 docker ps -a

네트워크 확인 

 docker network inspect ecommerce-network

로그 확인

 docker logs gateway-service

유레카 연결 확인

해당 status를 클릭해 보면 이상한 호스트명이 적혀있는 것을 볼 수 있는데

해당 값은 컨테이너 아이디로 같은 네트워크에 묶여있을 때는 ip뿐만 아니라 컨테이너 ID나 컨테이너 이름으로 접근 가능하다.

728x90
반응형

+ Recent posts