使用 docker-compose 将 nginx.conf 负载平衡更正到 uvicorn FastAPI
Correct nginx.conf loadbalancing to uvicorn FastAPI with docker-compose
我想使用 nginx 作为我 FastAPI replicas but i cannot get it to work. I read that uvicorn can also do it, but nginx would handle load balancing nicely. 的负载均衡器。
我收到一个错误
host not found in upstream "inconnect1:5001"
docker-compose.yml
version: "3"
networks:
proxy-tier:
external:
name: nginx-proxy
services:
inconnect1:
image: inconnect:0.1
container_name: inconnect1
environment:
- PORT=5001
volumes:
- ./inconnect/app:/app
ports:
- 5001:5001
nginx:
image: jwilder/nginx-proxy
container_name: nginx
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./letsencrypt/certs:/etc/nginx/certs:ro
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
networks:
- proxy-tier
restart: always
deploy:
mode: replicated
replicas: 1
nginx.conf
worker_processes 1;
events { worker_connections 1024; }
http {
sendfile on;
upstream restapis {
server inconnect:5001;
}
server {
listen 80;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_buffering off;
proxy_pass http://restapis;
}
location /static {
# path for static files
root /path/to/app/static;
}
}
}
作为您的 nginx.conf 文件:
server inconnect:5001;
应该是 server inconnect1:5001;
并且在 docker 中,撰写文件应该使用 link
从 nginx 容器到 inconnect1
应用程序。 (删除 nginx 容器上的网络)
image: jwilder/nginx-proxy
container_name: nginx
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./letsencrypt/certs:/etc/nginx/certs:ro
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
links:
- "inconnect1:inconnect1"
restart: always
deploy:
mode: replicated
replicas: 1
或在 1 个网络上使用:
networks:
proxy-tier:
driver: bridge
services:
inconnect1:
image: inconnect:0.1
container_name: inconnect1
environment:
- PORT=5001
volumes:
- ./inconnect/app:/app
ports:
- 5001:5001
networks:
- proxy-tier
nginx:
image: jwilder/nginx-proxy
container_name: nginx
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./letsencrypt/certs:/etc/nginx/certs:ro
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
networks:
- proxy-tier
restart: always
deploy:
mode: replicated
replicas: 1
我想使用 nginx 作为我 FastAPI replicas but i cannot get it to work. I read that uvicorn can also do it, but nginx would handle load balancing nicely.
我收到一个错误
host not found in upstream "inconnect1:5001"
docker-compose.yml
version: "3"
networks:
proxy-tier:
external:
name: nginx-proxy
services:
inconnect1:
image: inconnect:0.1
container_name: inconnect1
environment:
- PORT=5001
volumes:
- ./inconnect/app:/app
ports:
- 5001:5001
nginx:
image: jwilder/nginx-proxy
container_name: nginx
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./letsencrypt/certs:/etc/nginx/certs:ro
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
networks:
- proxy-tier
restart: always
deploy:
mode: replicated
replicas: 1
nginx.conf
worker_processes 1;
events { worker_connections 1024; }
http {
sendfile on;
upstream restapis {
server inconnect:5001;
}
server {
listen 80;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_buffering off;
proxy_pass http://restapis;
}
location /static {
# path for static files
root /path/to/app/static;
}
}
}
作为您的 nginx.conf 文件:
server inconnect:5001;
应该是 server inconnect1:5001;
并且在 docker 中,撰写文件应该使用 link
从 nginx 容器到 inconnect1
应用程序。 (删除 nginx 容器上的网络)
image: jwilder/nginx-proxy
container_name: nginx
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./letsencrypt/certs:/etc/nginx/certs:ro
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
links:
- "inconnect1:inconnect1"
restart: always
deploy:
mode: replicated
replicas: 1
或在 1 个网络上使用:
networks:
proxy-tier:
driver: bridge
services:
inconnect1:
image: inconnect:0.1
container_name: inconnect1
environment:
- PORT=5001
volumes:
- ./inconnect/app:/app
ports:
- 5001:5001
networks:
- proxy-tier
nginx:
image: jwilder/nginx-proxy
container_name: nginx
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./letsencrypt/certs:/etc/nginx/certs:ro
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
networks:
- proxy-tier
restart: always
deploy:
mode: replicated
replicas: 1