반응형
** 개인 도메인을 가비아 혹은 카페24 혹은 그외 사이트에서 구매하여 가지고 있어야 합니다 
** 저의 프로젝트 기준이므로 꼭 사전에 Elb를 설정해주세요 !

 

aws Route 53 메뉴로 이동하여 호스팅영역으로 이동하여, [호스팅 영역 생성] 버튼을 클릭해줍니다.

 

가지고계신 도메인 이름을 입력 후 [호스팅 영역 생성] 버튼을 클릭합니다.

 

 

자, 이제 여러분의 호스트가 등록이 되었습니다.

아래 이미지의 dns정보를, 여러분이 사용하는 호스팅 사이트의 dns에 추가 해주세요 !
(아래 URL의 우선순위를 높여서 등록해주세요 ~)

 

 

 

DNS 정보를 등록하였다면 이제 직접적으로 사용자들이 접근할 서브 도메인을 만들어보죠 ~

 

서브도메인의 경우 가지고있는 퍼블릭 IP가 있다면, IP로 연결하면 되지만,

저는 Elb로 바로 연결할거기때문에 사전에 아래 내용은 Elb셋팅이 꼭 되어 있어야 합니다 ~

 

 

레코드 생성 버튼을 눌러줍니다 !

 

[레코드 이름] : 사용할 서브도메인 앞의 부분을 입력해주십니다

[별칭] : elb와 연결하기 위해 꼭 활성화 해주세요.

[트래픽 라우팅 대상] : 본인의 리전정보로 사용할 elb를 선택해주시면 됩니다.

 

위 내용이 전부 입력되었으면 레코드 생성을 눌러줍니다.

 

자, 이제 레코드가 생성이 된 것이 보일거에요 ~

하지만 이렇게 되었다고 바로 접근이 가능한건 아닙니다 ~

 

https://www.whatsmydns.net/#A/test.bigtori.store

 

DNS Propagation Checker - Global DNS Checker Tool

Instant DNS Propagation Check. Global DNS Propagation Checker - Check DNS records around the world.

www.whatsmydns.net

위 URL에서 본인의 레코드를 입력 후 검색 해봅니다 !

 

 

그럼 DNS서버에 본인의 도메인이 얼마나 뿌려졌나 확인 할 수 있습니다

체크상태가 어느정도 나와야 접근이 가능하니 바로 나오지 않는다고 너무 상심하지 마세요 :)


앗차차 그리고 꼭 체크해주셔야 하는 부분이있습니다 !

aws 보안그룹에서 인바운드규칙과 아웃바운드규칙을 확인하셔서 본인 서비스에 맞게 규칙이 설정되어있는지 체크해주세요 ~

본인 포트가 막혀있다면 접근이 안될 수 있습니다 !!

 

 

위 내용까지 마무리하면 본인의 도메인이 정상적으로 elb 혹은 IP와 연결되는것을 확인하실 수 있을거에요 !

감사합니다 ~

반응형
반응형

Docker-Compose로 Nginx, Certbot이미지를 사용하여, LetsEncrypt SSL인증서를 발급받는 방법을 알아보도록 하죠

 

certbot으로 ssl 인증서를 발급받는 방법은 다양하게 있지만,

 

저는 dns를 이용하여 발급받도록 하겠습니다.

 

dns를 이용하여 발급받을때는, certbot에서 제공해주는 문자열 제 DNS주소에 TXT레코딩을 입력하면, certbot에서 레코딩이 입력되었는지 확인 후 인증서를 발급해줍니다 !

 

저는 nginx라는 디렉토리 생성 후 작업을 하도록 하겠습니다.

 

디렉터리 구조는 아래와 같습니다.

 

디렉터리 구조

nginx

  ㄴ certbot

     ㄴ conf

     ㄴ www

  ㄴ conf
     ㄴ nginx.conf

     ㄴ test.bigdragon.shop.conf

     ㄴ data.bigdragon.shop.conf

  ㄴ cert.sh

  ㄴ docker-compose.xml

 

도메인

저는 DNS를 이용하여 인증서를 발급받을 것입니다.

서브도메인마다 인증서를 받지않고 와일드카드(*)를 사용해 인증서를 발급받도록 하겠습니다.

*.domain.com 식으로 인증서를 발급받으면 서브도메인 인증서를 받지않아도 다 같이 사용할 수 있습니다.

 

nginx.conf

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for" -- $host';
    #access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

nginx.conf는 있는 그대로 복사하셔도 무방합니다 :)

test.Exampledomain.shop.conf ( 사용할 서브도메인.conf)

upstream myWeb {
    server 118.67.123.51:443; #리버스 프록시 사용을 위해
}
log_format  main  '$sent_http_X_DEBUG_MESSAGE';

server {
        listen 80; #리스닝 포트
        server_name test.bigdragon.shop; #접근 도메인
        #letsencrypt 도메인 확인
        location /.well-known/acme-challenge/ { 
            root /var/www/certbot;
        }

        # path
        location / {
            return 301 https://$server_name$request_uri;
        }
}
server {

    listen 443 ssl;
    server_name test.exampledomain.shop; #사용할 서브도메인을 입력
    ssl_certificate /etc/letsencrypt/live/exampledomain.shop/fullchain.pem; #사용할 메인도메인 입력
    ssl_certificate_key /etc/letsencrypt/live/exampledomain.shop/privkey.pem; #사용할 메인도메인 입력

    location / {
        add_header X_DEBUG_MESSAGE "test.exampledomain.shop";
        proxy_pass https://myWeb;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
    access_log  /var/log/nginx/access.log  main;
}

server_name : 호스트를 보고 자기 호스트에 맞는곳으로 연결된다 위 기준 test.exapledomain.shop 으로 접속 시 위 server가 리스닝 하고있다가 통신함 !

 

pullchain.pem : letsencrypt인증서를 발급받으면 자동 생성됨 docker-compose.yml에서 볼륨 마운트 되어있으니, 서브도메인만 신경써주도록하죠 !

 

privkeykey.pem : letsencrypt인증서를 발급받으면 자동 생성됨 docker-compose.yml에서 볼륨 마운트 되어있으니, 서브도메인만 신경써주도록하죠 !

 

 

data.bigragon.shop.conf

log_format  data  '$sent_http_X_DEBUG_MESSAGE';

server {
    listen 80;
    server_name data.exampledomaim.shop;
    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        return 301 https://data.exampledomaim.shop$request_uri;
    }
}
server {
    listen 443 ssl;
    server_name data.example.shop;

    ssl_certificate /etc/letsencrypt/live/exampledomaim.shop/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/exampledomaim.shop/privkey.pem;

    location / {
        add_header X_DEBUG_MESSAGE "data.example.shop";
        root /usr/share/nginx/html;
        index index.html;
        try_files $uri $uri/ /index.html;
    }
    access_log  /var/log/nginx/access.log  data;
}

 

cert.sh

docker-compose run --rm --entrypoint "\
    certbot certonly \
    -d *.exampledomaim.shop \
    --email example@gmail.com \
    --manual --preferred-challenges dns \
    --server https://acme-v02.api.letsencrypt.org/directory \
    --force-renewal" certbot
echo

echo "### Reloading nginx ..."
docker-compose exec nginx nginx -s reload

Letsencrypt인증서를 발급받는 ssh 입니다

 

인증서 발급 후 nginx를 재시작 하는 부분이 재일 아래쪽입니다.

 

docker-compose.yml 

version: '3.8'
services:
    certbot:
        image: certbot/certbot
        container_name: certbot
        volumes:
            - ./nginx/certbot/conf:/etc/letsencrypt
            - ./nginx/certbot/www:/var/www/certbot
        entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
    nginx:
        image: nginx
        container_name: nginx
        ports:
            - "80:80"
            - "443:443"
        volumes:
            - ./nginx/certbot/conf:/etc/letsencrypt
            - ./nginx/certbot/www:/var/www/certbot
            - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
            - ./nginx/conf/test.exampledomaim.shop.conf:/etc/nginx/conf.d/test.exampledomaim.shop.conf
            - ./nginx/conf/data.exampledomaim.shop.conf:/etc/nginx/conf.d/data.exampledomaim.shop.conf
        command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"

 

위 4가지 파일을 만든 후 

 

1. nginx 디렉토리로 이동하여 ./cert.sh 명령어를 통해 인증서를 발급받아준다.

인증서 발급 시 특정 문자열을 TXT레코드에 입력하라고하는데, 본인이 관리하는 DNS서버에 해당 TXT레코드를 작성해준다 !

 

2. docker-compose  run  -p 443:443 -p 80:80  nginx  명령어로 nginx 실행

 

3. https도메인으로 접근하면 잘 접속되는것을 확인 할 수 있습니다 :)

 

반응형

'기록' 카테고리의 다른 글

brew node version 변경  (0) 2023.03.18
[Docker] 도커명령어 정리  (0) 2023.02.02
[Git] Github - GitBash 사용법  (0) 2022.11.22
반응형

안녕하세요. 지난 포스팅에 이어서 Git프로젝트와 Jenkins와 연동하여 빌드&배포하는 방법을 포스팅 하도록하겠습니다.

 

윈도우 Jenkins설치[2]  기억이 안나시면 왼쪽 링크 참조하시기 바랍니다.

 

Github

환경

  • 개발 Window10 / 배포 Window2008 
  • Visual Studio 2019
  • Git
  • IIS
  • Github
  • Jenkins
  • Nuget4.9
  • MSBuilder

설정

먼저, GitHub에 테스트용 프로젝트를 생성하고 진행 하시기 바랍니다.

 

JenKins 메인화면에서 New Item 혹은 새로운 Item 메뉴를 클릭합니다.

 

 

 

아이템명을 입력하고 FreeStyle Project를 선택한 후 OK버튼을 누릅니다.

 

 

GitHub Project에 체크를하고 Project Url에 프로젝트의 URL을 입력합니다.

https://github.com/유저명/프로젝트명

 

 

 

소스 코드 관리 탭에서 Git을 체크 하고 Repository URL에 clone에 쓰이는 url을 입력 합니다. 

 

GitHub 프로젝트에 clone or download 에서 주소를 복사할 수 있습니다.

 

 

Git-Bash를 실행하여 해당 명령어로 키를 생성합니다.

 

passphrase 를 입력하라고 하면 그냥 엔터 누르시면 됩니다.

 

그럼  확장자없는 파일 하나, .pub 확장자를 가진 파일 하나가 생성됩니다.

 

확장자없는 파일에는 개인키가 들어있고 .pub 파일에는 공개키가 들어있습니다

ssh-keygen -t rsa -f 파일명

 

Repository URL 아래 Credentials에 Add를 누릅니다.

 

 

Kind를 SSH Username with private key 로 설정하시고 아래에 개인키를 메모장으로 열어서 begin -end 사이를  복사하여 붙여넣으세요.

 

개인키가 등록되었으면 github 프로젝트로 들어가 프로젝트의 Settings - Deploy Keys 에서 Add deploy key 를 선택합니다.

 

제목을 입력하고, Key 부분에는 아까 생성한 공개키 (.pub 파일) 을 메모장으로 열어 내용을 복붙합니다.

 

Allow write access 체크는 푸시고, Add key 하세요. 

 

저장이 되었으면, 이제 jenkins로 github 프로젝트 코드를 가져오고 빌드를 진행할 수 있습니다

 

 

Webhook 설정

 

새창을 여시고, 젠킨스 메인에서Jenkins 관리 - 시스템 설정으로 가Jenkins Location을 수정해주세요.

 

루프백 외에 외부에서 접근할 수 있는 도메인이나 ip/(설정한포트)를 입력하셔야 합니다. 

 

 

깃허브 프로젝트 설정으로 돌아가, Webhook 메뉴로 이동해 add webhook 버튼을 누릅니다.

 

Payload URL에는 Jenkins 주소/github-webhook/ 을 입력합니다.

마지막에 / 는 꼭 입력되어야 합니다

나머지는 기본값으로 두고 Add webhook 으로 완료합니다.

 

다시 젠킨스의 Item 생성 하던 곳으로 돌아갑시다.

 

빌드 유발 탭에서 GitHub hook trigger for GITScm polling을 선택합니다. 

 

이것으로 github에 push 이벤트가 발생하면 자동으로 빌드가 이루어질텐데,

 

서버에 따로 Visual Studio가 설치되어 있지 않으면 Build시 에러가 발생 할 수 있어 

 

Build전에 프로그램을 몇개 더 설치 해야합니다.

 

1.

https://www.nuget.org/downloads 에서 Nuget.exe를 다운로드하여 설치합니다

 

NuGet Gallery | Downloads

 

www.nuget.org

2.

Visual Studio Installer를 설치하여 MSbuiler만 설치합니다.

 

3.Jenkins 메인 > Jenkins 관리 > Global Tool Configuration 을 클릭합니다.

 

MSBuild탭 Add MSBuild버튼을 누르고

 

Name: 구분명

 

Path to MSBuild : 설치된 MSBuild 경로를 입력 한 후 저장을 누릅니다. 

 

 

 

다시 젠킨스의 Item 생성 하던 곳으로 돌아갑시다.

 

다시 Jeknins로 돌아와 [Build] 탭으로 옵니다.

 

Add Build Step을 눌러 [Execute Windows batch command] 를 추가하고, 

 

[Nuget 설치경로/실행파일] restore [.net 프로젝트]을 입력합니다

 

※ Build전 패키지 복구

C:\nuget\nuget.exe restore "C:\Program Files (x86)\Jenkins\workspace\bimp\jenkins.sln"

 

※ Build

다시 Add Build Step을 눌러 [Build a Visual Studio project or solution using MSBuild] 를 추가하고, 

 

MSBuild Version에는 아까 생성한 버전을 선택하고

 

MSBuild Build File은 .net프로젝트위치를 .sln을 포함하여 입력합니다

 

 

Command Line Arguments는 /p:Configuration=Release를 입력 하고 그외 설정은 직접 찾아보시면 됩니다.

 

 

※ Build 후 서비스되는 폴더로 옮기기

마지막으로 Add Build Step을 눌러 [Execute Windows batch command] 를 추가하고, 

 

xcopy ".net프로젝트폴더" "서비스되는폴더"  /s /h /e /d /y 를 입력합니다

 

xcopy "C:\Program Files (x86)\Jenkins\workspace\bimp\jenkins" "C:\test\" /s /h /e /d /y

 

 

이것으로 이제 Git에 소스를 푸쉬하면 자동 빌드 & 배포가 되도록 셋팅이 끝났습니다.

 

감사합니다.

 

반응형

'라이브러리' 카테고리의 다른 글

RabbitMQ 클러스터 설정하기  (0) 2022.01.15
윈도우 Jenkins 설치 [2]  (0) 2020.06.14
윈도우 Jenkins 설치  (0) 2020.06.11
[RabbitMQ] 사용자 추가  (0) 2018.09.06
RabbitMQ설치  (0) 2018.09.06

+ Recent posts