spring cloud config를 살펴보니..  4가지 정도가 주의하면 좋을 것 같다.


1. 
Spring Cloud(Boot) 주요 클래스에 @EnableConfigServer를 붙이기


@RestController
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {

@RequestMapping(value = "/")
public @ResponseBody String root() {
return "Global Config Server";
}

public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}



2. 

설정 이름 주의하기

yaml 파일의 이름을

${ApplicationName}-${EnvironmentName}.yml로 설정해야 한다.


즉 아래와 같은 형태로 되어야 spring cloud config 설정을 확인할 수 있다. 

global-beta.yml

order-alpha.yml


따라서


http://localhot:8080/global/beta 

http://localhot:8080/order/alpha 이렇게 접근할 수 있다.




3. 

private 저장소의 경우 암호를 넣어야 한다.

spring.cloud.config.server.git.username=google-lab
spring.cloud.config.server.git.password=lab1234



4. 

spring cloud git url을 설정할 때 root 주소로 접근해야지 git 저장소의 sub directory에 접근하려고 하면 파싱 에러(org.eclipse.jgit.api.errors.TransportException: invalid advertisement of) 가 난다. 


이렇게 하지 말고

spring.cloud.config.server.git.uri=https://github.com/google/internal-config/config


아래와 같이 저장소 로 접근해야 한다.

spring.cloud.config.server.git.uri=https://github.com/google/internal-config


runtime 에러에서 final int tab = line.indexOf('\t'); 부분에서 에러가 발생한 것을 확인할 수 있다.

package org.eclipse.jgit.transport;

public class TransportHttp extends HttpTransport implements WalkTransport,

PackTransport {


Map<String, Ref> readAdvertisedImpl(final BufferedReader br)

throws IOException, PackProtocolException {

final TreeMap<String, Ref> avail = new TreeMap<>();

for (;;) {

String line = br.readLine();

if (line == null)

break;


final int tab = line.indexOf('\t');

if (tab < 0)

throw invalidAdvertisement(line);




git 저장소 대신 로컬 파일 시스템에서 테스트하려면 spring.cloud.config.enabled=false을 사용한다. 




Posted by '김용환'
,

[sbt] 1.3.0

scala 2019. 9. 6. 10:22



https://github.com/sbt/sbt/releases/tag/v1.3.0


sbt 1.3.0에 병렬 라이브러리 다운로드 cousier를 포함하게 되었다.

super shell도 있고..

Posted by '김용환'
,



ingress nginx 에 인증서 추가하는 방법이다. 

1. context 변경하기
kubectl config use-context google-production-context

2. kakao.com secret 생성하기
kubectl create secret tls google-com --key google.com.key --cert google.com.crt

3. kakao.com secret 확인하기
kubectl describe secret google-com

4. 인증서 확인하기
kubectl get cm -n ingress-nginx ingress-nginx -o yaml



kubernetes 설정 파일에 추가하기

spec:
tls:
- hosts:
- server_name aa.google.com
secretName: google-io


Posted by '김용환'
,

https://www.entrepreneur.com/article/336964



- 페이스북은 미국 내 성인의 69%가 사용하는 SNS이지만, 광고는 여전히 사적 공간의 ‘방해 요소’로 받아들이고 있어서 이커머스 광고를 제대로 전달하지 못하고 있다.

- 아마존은 구매 목표를 가진 사용자가 방문하는 커머스 플랫폼이다.

44%의 온라인 구매자는 처음부터 아마존의 상품 검색을 사용한다. 아마존의 영업 규모에 따라 검색 결과가 달라진다. 

구매자가 자발적으로 별점과 리뷰를 남기는 실용적인 장점을 갖는다

다양한 광고 플랫폼을 갖고 있다. 



Posted by '김용환'
,


여러 라인으로 구성된 내용을 특정 파일로 저장할 때 cat << 커맨드를 자주 사용한다.

 cat > /etc/yum.repos.d/nginx.repo << EOL

[nginx]

name=nginx repo

baseurl=http://nginx.org/packages/centos/$releasever/$basearch/

gpgcheck=0

enabled=1

EOL




도커 파일에서 아래와 같이 bash에서 사용하듯 여러 라인을 하나의 파일로 저장하려면 에러가 발생한다. 


RUN cat > /etc/yum.repos.d/nginx.repo << EOL

[nginx]

name=nginx repo

baseurl=http://nginx.org/packages/centos/$releasever/$basearch/

gpgcheck=0

enabled=1

EOL



도커 파일에서는 다음과 같이 echo와 $를 잘 사용해야 비슷한 효과를 얻을 수 있다.


RUN echo $'[nginx] \n\
name=nginx repo \n\
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ \n\
gpgcheck=0 \n\
enabled=1' >> /etc/yum.repos.d/nginx.repo


Posted by '김용환'
,


Dockerfile에서 아래와 같이 nginx 설치 커맨드를 추가했다.


RUN yum install -y nginx


그러나 에러가 발생했다.

Rpmdb checksum is invalid: dCDPT(pkg checksums): policycoreutils.x86_64 0:2.0.83-30.1.el6_8 - u



rpm 체크섬 이슈이니. 아래와 같이 rpm 체크섬을 재구축하는 커맨드를 사용하면 에러가 발생하지 않는다.


RUN rpm --rebuilddb && yum install -y nginx


Posted by '김용환'
,





인텔리J에서 Intellij에서 한 프로젝트 열고 여러 프로젝트 임포트하려면...


File > New > Module from Existing Sources…


를 이용한다.



Posted by '김용환'
,


docker export와 docker import를 먼저 살펴본다.


1. docker export :  container를 tar파일로 저장한다. 


$ docker export (컨테이너명 or 컨테이너 ID) > (컨테이너).tar

 

 

2. docker import : tar 파일을 다시 docker 이미지로 생성한다. export의 반대이다. 


$ docker import (파일 또는 URL)




docker save와 docker load를 살펴본다. 


1. docker save : docker 이미지를 tar 파일로 저장한다


$ docker save -o rabbitmq_managment.tar rabbitmq:managment



2. docker load : tar파일 이미지를 docker 이미지로 저장한다.


$ docker load -i rabbitmq_managment.tar


 





간단히 보면 그냥 간단해 보이는데. 사실은 좀 차이가 있다. 


 커맨드

결과 유형 

사용처 

소스 유형 

 export 

 

TAR 파일

컨테이너 파일 시스템 

 컨테이너

 import

 도커 이미지

 플랫 파일 시스템

 TAR 파일

 save

 TAR 파일

 도커 이미지(히스토리 포함)

 이미지

 load

 도커 이미지

 도커 이미지(히스토리포함)

 TAR 파일



플랫(flat) 파일 시스템 - 하위 디렉토리 없이 파일들을 포함하는 하나의 디렉토리를 의미한다



docker export와 import 커맨드는 플랫 파일 시스템에서 동작한다.


 docker export 커맨드는 컨테이너 상태를 구성하는 TAR 파일을 생성한다. 도커와 마찬가지로 프로세스 실행 상태는 저장되지 않는다. 즉 파일만 저장한다. docker import 커맨드는 TAR 파일에서 히스토리 또는 메타 데이터가 없는 도커 이미지를 생성한다.


docker import 및 docker export 커맨드는 대칭적이지 않다. 


즉 docker import 및 docker export 커맨드만 사용해서는 기존 컨테이너에서 컨테이너를 생성할 수 없다. 비대칭은 유용하다. docker export는 이미지를 TAR 파일로 내보내고 docker import는 모든 계층 히스토리와 메타 데이터를 “삭제”하기에 비대칭이 유용할 수 있다. 




TAR 파일로 내보내거나 저장하고 싶다면 기본적으로 stdout으로 전송되기에 다음처럼 파일로 저장한다.


$ docker save rabbitmq:management > rabbitmq_management.tar



방금 생성 한 것처럼 TAR 파일을 네트워크으로 안전하게 전송할 수 있다. 전송 전에 미리 gzip으로 압축할 수도 있다. 다른 사람들이 TAR 파일을 사용해 이미지를 그대로 가져올 수 있다. 접근 권한이 있으면 이메일이나 scp로 전송할 수 있다.


$ scp rabbitmq_management.tar ex.google.com:/tmp/

rabbitmq_management.tar



그리고 다른 사용자의 도커 데몬에 직접 이미지를 전송할 수 있다


docker save rabbitmq:management | \          


 ssh ex.google.com \                  


 docker load -     





도커 이미지의 기록을 삭제하고 싶다면 load 대신 import를 사용할 수 있다.





docker export $(docker run -d rabbitmq:management true) | \


    ssh ex.google.com docker import



Posted by '김용환'
,