Невозможно использовать Mongo Atlas в закрепляемой фляге: pymongo.errors.ServerSelectionTimeoutError - PullRequest
0 голосов
/ 06 октября 2019

Я докертизировал свое приложение React + Flask + Nginx и обслуживал его на своем внутреннем сервере.

Я использовал Mongo Atlas в качестве базы данных и использовал pymongo в Flask для создания API.

Начальная часть моего приложения для колб выглядит следующим образом:

from flask import Flask, render_template, request, jsonify
from flask_cors import CORS
from bson.objectid import ObjectId
import pymongo
import json
import ssh
import OpenSSL
import pprint

application = Flask(__name__)
cors = CORS(application)

client = pymongo.MongoClient("mongodb+srv://...")

db = pymongo.database.Database(client, '...')
col = pymongo.collection.Collection(db, '...')

# some parts are written as `...`

Dockerfile для приложения Flask выглядит следующим образом:

#Using ubuntu as our base
FROM ubuntu:latest

#Install commands in ubuntu, including pymongo for DB handling

RUN apt-get update -y
RUN apt-get install -y python3 python3-pip python3-dev build-essential


#Unsure of COPY command's purpose, but WORKDIR points to /backend
COPY . /backend
WORKDIR /backend/

RUN pip3 install --proxy <proxy_settings_for_my_workplace> -r requirements.txt
RUN python3 -m pip install --proxy <proxy_settings_for_my_workplace> pymongo[srv]

ENV HTTPS_PROXY=<proxy_settings_for_my_workplace>
ENV HTTP_PROXY=<proxy_settings_for_my_workplace>

#Run order for starting up the backend
ENTRYPOINT ["python3"]
CMD ["app.py"]

и в моемnginx.conf, я установил proxy_pass в точку (?) Для моего внутреннего запроса.

user  root;
worker_processes auto;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    server {
      server_name <internal_server_name>
                  ;
      listen [::]:80;
      listen 80;
      root /usr/share/nginx/html;
      location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html =404;
      }
      location /v1 {
        proxy_pass <interna_server_name>:5000;
      }
    }
    client_max_body_size 2M;
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
    include /etc/nginx/conf.d/*.conf;
}

Все хорошо строится и идет вверх. Тем не менее, после того, как он идет вверх, я могу получить доступ к части интерфейса, но журналы для моего бэкенда показывают ошибку, которая говорит:

pymongo.errors.ServerSelectionTimeoutError: <cluster>.mongodb.net:27017: timed out,<cluster>.mongodb.net:27017: timed out,<cluster>.mongodb.net:27017: timed out

Я не уверен, почему это происходитпотому что я уже установил прокси, который необходим для доступа к внешним ресурсам, и все работает локально.

Любая помощь, пожалуйста?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...