FTP через движок приложения С Python разрешить соединение, но время ожидания ответа - PullRequest
1 голос
/ 31 октября 2019

Привет, я пытаюсь проверить мое приложение ftp на python через движок приложения.

В локально работает с ftp, но когда я пытаюсь подключиться:

ftp: // rebus-v5-prod.appspot.com:443 или ftps: //rebus-v5-prod.appspot.com: 443

Показывает мне:

Статус: соединение установлено, жду приветственного сообщения ... Ошибка: Соединение закрыто сервером

Мой код:

import os
from backend import upload_jobs
from firebase.firebase import Firebase

if not bool(os.getenv('CLOUD',False)):
    from dotenv import load_dotenv
    load_dotenv(verbose=True)
    print('LOAD ENV',os.getenv('VERSION'))
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer

Firebase()
class HandleFTP(FTPHandler):
    def on_file_received(self, file):
        upload_jobs(file)
    def on_connect(self):
        print(self.remote_ip)

class Autorizer(DummyAuthorizer):
    def validate_authentication(self, username, password, handler):
        print(username,password,handler)

def main():
    # Instantiate a dummy authorizer for managing 'virtual' users
    authorizer = Autorizer()

    # Define a new user having full r/w permissions and a read-only
    # anonymous user
    authorizer.add_user('user', '12345', './files', perm='elradfmwMT')
    #authorizer.add_anonymous(os.getcwd())

    # Instantiate FTP handler class
    handler = HandleFTP
    handler.authorizer = authorizer
    # Define a customized banner (string returned when client connects)
    handler.banner = "pyftpdlib based ftpd ready."
    # Specify a masquerade address and the range of ports to use for
    # passive connections.  Decomment in case you're behind a NAT.
    # handler.masquerade_address = '151.25.42.11'
    handler.passive_ports = range(60000, 65535)

    # Instantiate FTP server class and listen on 0.0.0.0:2121
    address = ('', int(os.environ.get('PORT', 2121)))
    server = FTPServer(address, handler)

    # set a limit for connections
    server.max_cons = 256
    server.max_cons_per_ip = 5

    # start ftp server
    server.serve_forever()
    server.handle_write()


if __name__ == '__main__':
    main()

Механизм приложения YML

runtime: python
env: flex
entrypoint: python app.py

service: default

runtime_config:
  python_version: 3

automatic_scaling:
  min_num_instances: 1
  max_num_instances: 15
  cool_down_period_sec: 180
  cpu_utilization:
    target_utilization: 0.6

resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

network:
  forwarded_ports:
    - 2121/tcp

1 Ответ

0 голосов
/ 01 ноября 2019

Вы не перенаправляете порт 443 в свое приложение:

network:
  forwarded_ports:
    - 443/tcp

Кроме того, входящий трафик извне вашей сети не разрешен через брандмауэры Google Cloud Platform . После того как вы указали переадресацию портов в своем файле app.yaml, вы должны добавить правило брандмауэра, разрешающее трафик с портов, которые вы хотите открыть.

Вы можете указать правило брандмауэра в Правилах сетевого брандмауэра страница в консоли Google Cloud Platform

...