运行 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 文件。
对于学校项目,我需要在服务器上 运行 一个 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 文件。