Seize the day

POST : Backend study

[docker study] 오라클 로드밸런서 <--> nginx <--> deno server

[Backend study] - 오라클 클라우드 로드 밸런서 스터디

지난번 스터디에서 오라클 클라우드 로드밸런서에서 백엔드의 Nginx까지 연결에 성공했다. 

오라클 클라우드에서 로드밸런서 ---> Nginx ---->  deno 서버까지 연결을 테스트한다.   (Nginx와 deno 서버는 하나의 vm에 있다)

간단한 deno 앱 서버

deno_service/app.ts

import { serve } from "https://deno.land/std@0.164.0/http/server.ts";

const port = 8080;

const handler = (request: Request): Response => {
  const body = `Your user-agent is:\n\n${
    request.headers.get("user-agent") ?? "Unknown"
  }`;

  return new Response(body, { status: 200 });
};

console.log(`HTTP webserver running. Access it at: http://localhost:8080/`);
await serve(handler, { port });

 

docker Network 가 없다면 생성한다.

sudo docker network create backend

 

Deno 서버 구성, 실행

deno_service/docker-compose.yml

version: "3.0"
services:

  deno:
    image: denoland/deno:1.28.0
    restart: always
    volumes:
      - ./:/app
    hostname: deno-app
    ports:
      - 8080:8080
    networks:
      - backend
    working_dir: /app
    command: run --allow-net /app/app.ts

networks:
  backend:
    driver: bridge
    external: true

 실행 

[opc@instance-20221029-2034 deno_service]$ docker-compose up -d
Pulling deno (denoland/deno:1.28.0)...
Creating deno_service_deno_1 ... done

[opc@instance-20221029-2034 deno_service]$ curl localhost:8080
Your user-agent is:

curl/7.61.1

 

deno-app 호스트의 8080가 열려있기 때문에 nginx의 conf를 수정해서 연결한다.

nginx의 conf 확인
https://hub.docker.com/r/denoland/deno  를 보면 conf파일의 경로는 /etc/nginx/conf.d/default.conf  임을 알 수 있다. 

[opc@instance-20221029-2034 nginx]$ sudo docker exec -it nginx_nginx_1 bash
root@39a89ec53c9b:/# cat /etc/nginx/conf.d/default.conf
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

 이 파일에서 proxy부분만 수정해서 호스트 pc에 default.conf 생성한다. 
vi default.conf

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    location /deno-app {
        proxy_pass   http://deno-app:8080;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

location /deno-app { 부문만 수정했다. deno-app 호스트는 deno_service/docker-compose.yml에 정의된 호스트 이름이고 8080 포트로 리다이렉트 시킨다.

nginx/docker-compose.yml

services:
  nginx:
    image: nginx:1.21.6
    ports:
      - '80:80'
    networks:
      - backend
    volumes:
      - ./default.conf:/etc/nginx/conf.d/default.conf

networks:
  backend:
    driver: bridge
    external: true

default.conf 파일을 우리가 수정한 파일로 덮어쓴다.
nginx 서버 시작  docker-compose up -d

동작 확인 맥미니에서 오라클 서비스 접속

dajkim76@Kims-Mac-mini ~ % curl https://oci.mdiwebma.com/deno-app
Your user-agent is:

curl/7.79.1

https://oci.mdiwebma.com/deno-app  크롬으로 열어도 잘 연결된다.. ^^

 

top

posted at

2022. 11. 15. 21:08


CONTENTS

Seize the day
BLOG main image
김대정의 앱 개발 노트와 사는 이야기
RSS 2.0Tattertools
공지
아카이브
최근 글 최근 댓글
카테고리 태그 구름사이트 링크