开机后自动启动python flask webserver 并保持开机直到结束

Start python flask webserver automatically after booting the system and keep it on till the end

我正在使用 Flask 作为我的 UI 的网络服务器(这是一个简单的网络界面,可以通过网络摄像头和 [=26] 在 ubuntu 上使用 gstreamer 控制录制=]framegrabber 同时/有点简单的播放器)

每次我需要从命令提示符手动 运行 命令 "python main.py" 到 运行 服务器。

我尝试了 init.d 解决方案,甚至编写了一个简单的 shell 脚本并在每次启动时重新启动系统后启动它,但它无法保持服务器正常运行 运行宁到最后(我猜只是调用服务器并终止它)

是否有任何解决方案可以帮助我在启动时每次引导系统后启动网络服务器并保持它并 运行ning?

我想将我的系统配置为直接启动到浏览器,因此不需要用户执行更多操作。

任何类型的 suggestion/help 都表示赞赏。

很好documented解决方案是使用Gunicorn和Nginx服务器:

  1. 安装组件并设置 Python 具有依赖项的 virtualenv
  2. 创建 wsgi.py 文件:
from myproject import application

    if __name__ == "__main__":

         application.run()

这将由 Gunicorn 处理:

gunicorn --bind 0.0.0.0:8000 wsgi
  1. 通过设置 systemd 配置文件配置 Gunicorn:/etc/systemd/system/myproject.service :
 [Unit]
    Description=Gunicorn instance to serve myproject
    After=network.target

 [Service]
    User=sammy
    Group=www-data
    WorkingDirectory=/home/sammy/myproject
    Environment="PATH=/home/sammy/myproject/myprojectenv/bin"
    ExecStart=/home/sammy/myproject/myprojectenv/bin/gunicorn 
    --workers 3 --bind unix:myproject.sock -m 007 wsgi:app

[Install]
    WantedBy=multi-user.target
  1. 启动时启动 Gunicorn 服务:
    sudo systemctl start myproject
    sudo systemctl enable myproject

我想建议使用 supervisor,文档是 here


出于非常简单的演示目的,在安装并完成设置后,触摸一个新的文件,如下所示:

[program:flask_app]                                                                  
command = python main.py                                      
directory = /dir/to/your/app                            
autostart = true                                                                
autorestart = true

然后

$ sudo supervisorctl update

现在,您应该可以开始了。 Flask 应用程序将在您每次启动机器后启动。(注意:分发包已经集成到服务管理基础架构中,如果您使用其他的,请参阅 here

检查您的应用是否 运行:

$ sudo supervisorctl status

生产环境可以使用nginx+uwsgi+supervisor。 Flask 部署文档是 here