[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 크롬으로 열어도 잘 연결된다.. ^^