我已经完成了一个部署在Windows服务器上的应用程序的重新部署,在Windows服务器上,python后端、post话母db和前端都在同一个服务器上。我已经要求将其分离,并将其放在linux dockers上。原来做的顾问已经不能用了,所以我不太清楚什么是关键的,什么不是。
在我自己的ubuntu电脑上,我使用-网络=主机。我已经设置了后置和python后端,服务生正在收听localhost:7000,现在我需要做nginx对接。
与nginx配置文件相关的windows服务器的部署说明如下:
在远程机器上编辑配置后,可以用psexec -w C:\tools\nginx -s nginx -s reload.重新加载配置(nginx保存在C:\tools\nginx中)
server_names_hash_bucket_size 64;
proxy_buffering on;
proxy_buffers 24 4k;
proxy_busy_buffers_size 32k;
proxy_set_header Host $host;
proxy_http_version 1.1;
gzip on;
gzip_proxied any;
gzip_min_length 1000;
gzip_types
text/css
text/plain
image/.*
application/javascript
application/json;
# Test setup
server {
listen 80;
server_name test.xxx.yyy.com localhost 127.0.0.1;
root C:/www/html-dev;
error_log C:/www/error-dev.log debug;
index index.html;
try_files $uri $uri/ /index.html;
charset utf-8;
location /api/ {
proxy_pass http://localhost:7000/;
}
location /nginx-status {
stub_status;
}
}看到这个nginx设置之后,我当前的dockerfile如下所示:
FROM nginx
COPY html /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf对于这个设置来说,是否有一个可修复的nginx.conf的手术,或者我错过了什么?一般来说,几乎任何建议都会受到赞赏(我是个菜鸟)。
发布于 2019-06-07 09:31:54
根据发布的nginx配置,您主要做三件事:
C:/www/html-dev文件(我假设这是静态内容,如img/css/js)/api/,这只是被代理到http://localhost:7000 (应该是应用服务器)您可以使用此配置,但这需要在Docker端进行一些配置。nginx容器需要访问静态争用,它位于旧Win服务器上的C:/www/html-dev中。可以将其包含在图像中(Dockerfile) )
COPY html-dev /usr/share/nginx/htmlversion: "2.4"
services:
web:
image: nginx:1.16-alpine
volumes:
- ./html-dev:/usr/share/nginx/html
# Access nginx on port 80 of the host (if already taken, change it)
- 80:80卷方法更快,特别是在开发过程中,文件夹中包含了大量文件。
总的来说,我建议您在这里使用码头工。它使多个容器的处理变得容易。这是您在这里需要的,因为Docker方法需要每个应用程序一个容器。这样,您就不会将Python应用程序放在nginx容器中。
因为nginx不能直接与Python后端对话,所以您需要WSGI。没有它,这只会使用Pythons开发服务器。但根据文档,这还没有准备好生产,不应该在开发之外使用。您的配置看起来就像后端是这样的dev服务器(或者在它们之间有一些没有显示的东西)。
我建议使用WSGI正确地解决这个问题,例如,您可以使用[uWSGI](http://flask.pocoo.org/docs/1.0/deploying/uwsgi/)来解决这个问题。在这里找到文档完整的Docker映像:https://github.com/tiangolo/uwsgi-nginx-flask-docker
简而言之,这将导致另一个容器,您将上游您的nginx。需要用这个服务名称替换localhost。例如,如果服务在uwsgi中被称为docker-compose.yml,那么将uwsgi与相应的主机一起使用,而不是本地主机。这是可能的,因为docker-复合本身在默认情况下在其容器之间创建了一个虚拟网络。
https://serverfault.com/questions/970513
复制相似问题