Я докертизировал свое приложение 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
Я не уверен, почему это происходитпотому что я уже установил прокси, который необходим для доступа к внешним ресурсам, и все работает локально.
Любая помощь, пожалуйста?