运行 Python 文件,在 Ubuntu 中包含 Flask、nginx 和 uWSGI

Running a Python file with Flask, nginx and uWSGI in Ubuntu

对于学校项目,我需要在服务器上 运行 一个 Python API。我在 Digital Ocean 上创建了一个 droplet 并安装了 Ubuntu。之后我跟着this tutorial用nginx、Flask和WSGI搭建了环境

一切正常,显示 "Hello There!" 消息,我可以更改它的文本并在屏幕上看到更改。所以没有问题。

此时文件结构为:

ProjectFolder
|
|── api.py (The file with "Hello There!")
|── api.ini 
|── api.sock
|── wsgi.py
|── projectenv

问题是我们的 API 代码存储在 BitBucket 存储库中。我已经克隆了存储库,以便文件结构变为:

ProjectFolder
|
|── api.py (The file with "Hello There!")
|── api.ini 
|── api.sock
|── wsgi.py
|── projectenv/
|── bitbucketrepo/
    |── api.py

当然,由于其他文件中的配置,服务器仍然加载api.py和"Hello There!"文本。我已经更改了 wsgi.py 以及 /etc/nginx/sites-enabled//etc/nginx/sites-available/ 目录中的文件,以便所有内容都指向 bitbucketrepo 文件夹中的 api.py ,但这没有用.我还尝试将根文件夹中的所有文件移动到 bitbucketrepo 文件夹并相应地更改上述文件,但这也没有用。

我也不明白为什么当我在浏览器中访问我的服务器时,带有 "Hello There!" 文本的 api.py 会自动 运行,但当我直接复制和粘贴时我的 API 代码在该文件中,它不起作用。

文件中的代码如下:

ProjectFolder/apy.py:

from flask import Flask
application = Flask(__name__)

@application.route("/")
def hello():
    return "<h1 style='color:blue'>Hello There!</h1>"

if __name__ == "__main__":
    application.run(host='0.0.0.0')

Projectfolder/api.ini:

[uwsgi]
module = wsgi

master = true
processes = 5

socket = api.sock
chmod-socket = 660
vacuum = true

die-on-term = true

ProjectFolder/wsgi.py:

from api import application

if __name__ == "__main__":
    application.run()

ProjectFolder/bitbucketrepo/api.py:

#imports

application = Flask(__name__)
api = Api(application)

#API code

if __name__ == '__main__':
    application.run(debug=True, host='0.0.0.0')

所以我的问题是,当我 运行 命令 python api.py 时,bitbucket 文件夹中的 API 仅 运行s。当我这样做时,API 可以在端口 5000 上访问。所以只有当我 运行 那个终端命令时,有人才能访问我的 API。

我想要的是bitbucket文件夹中的API总是运行s,就像ProjectFolder中的api.py一样。

我感觉我非常接近实现这一目标,但只是缺少过程中的某个步骤。我没有服务器和服务器管理方面的经验,所以这对我来说很陌生。

有谁知道要采取哪些步骤才能实现这一目标?如果 Whosebug 上有类似的问题,我深表歉意。 post 重复的问题不是我的本意。

提前致谢!

您尝试过使用:

from bitbucketrepo.api import application

如果您使用 python2,请确保 bitbucketrepo 文件夹中有一个 __init__.py 文件。