docker compose dotnetMVC與API + nginx

既然上一篇是把專案的docker image做好,這邊就是把它發布

如果直接發布的話,沒甚麼問題,就是直接放PORT

不過既然沒有用IIS,就加個nginx,算是這次要加上的新工具吧

這邊就直接先放上docker compose

version: "3.9"  # optional since v1.27.0
services:
  frontend:
    container_name: nginx
    image: nginx:latest
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
    ports:
      - "8080:80"
    restart: always
    networks:
      - some-net

  ttweb:
    # image: ttweb
    build: ./UMATTUrbanSystem
    depends_on:
      - frontend
    container_name: ttweb
    expose:
    - "5000"
    restart: always
    networks:
      - some-net

  ttapi:
    # image: ttapi
    build: ./UMATTUrbanAPI
    container_name: ttapi
    expose:
      - "9090"
    networks:
      - some-net

networks:
  some-net:
    driver: bridge

先講ttweb&ttapi兩個,就是上一篇的image做出來,用save就可以,是我註解掉的image: ttapi

build就是在docker compose build的時候(或是如果沒有build 直接up)的時候就會用dockerfile跑起來

然後上一篇提到的 expose就是直接把host跟guest的9090打通,如果docker run –scale=n就會跑起n個容器來分散流量

然後要讓web跟api互相能連,如果沒有nginx,就只要互相給port

今天是把入口只有nginx然後再互連,就要用networks

其實我自己也是看nginx docker compose之後抄來的

nginx config

worker_processes 1;

events { worker_connections 1024; }

http {

    sendfile on;

    upstream ttwebs {
        server ttweb:5000;
    }

    server {
        listen 80;
        # server_name $hostname;
        server_name localhost 127.0.0.1;
        location / {
            proxy_pass         http://ttwebs;
            proxy_redirect     off;
            proxy_http_version 1.1;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header   Upgrade $http_upgrade;
            proxy_set_header   Connection keep-alive;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Proto $scheme;
            proxy_set_header   X-Forwarded-Host $server_name;
        }

        location /ttweb/ {
            proxy_pass         http://ttweb:5000/;
        }

        location /ttapi/ {
            proxy_pass http://ttapi:9090/api/Announcement/Committee;
        }
        location /string/ {
            return 200 'a string response';
        }
    }
}

這樣就是 主機IP/ttweb 就會連到這邊host的5000的port連到docker 就是ttweb

然後我再ttapi先接連到一個get 讓我確定可以直接得到API的結果

結語:

nginx的流量附載還是一個坑 還不會

不過這次能把nginx用network串起來就已經是一個階段性目標了

中間卡很久的的是怎麼都連不起來 不過我重新build一次nginx就好了

發表留言